今天發現網上有些坑爹的博客,估計博主本身也沒要用過,就寫了出來,害得我折騰半天。鑑於避免其餘同窗出現相似的狀況,寫出來,也請你們指正。html
優雅REST風格的資源URL不但願帶 .html 或 .do 等後綴.因爲早期的Spring MVC不能很好地處理靜態資源,因此在web.xml中配置DispatcherServlet的請求映射,每每使用 *.do 、 *.xhtml、*.hml等後綴方式進行區分。這就決定了請求URL必須是一個帶後綴的URL,而沒法採用真正的REST風格的URL。通俗說RESTf風格就是在Spring MVC 3.0新增的,它經過不帶擴展名的URL來訪問系統資源。web
若是將DispatcherServlet請求映射配置爲"/",則Spring MVC將捕獲Web容器全部的請求,包括靜態資源的請求,Spring MVC會將它們當成一個普通請求處理,所以找不到對應處理器將致使錯誤。spring
如何讓Spring框架可以捕獲全部URL的請求,同時又將靜態資源的請求轉由Web容器處理,是可將DispatcherServlet的請求映射配置爲"/"的前提。因爲REST是Spring3.0最重要的功能之一,因此Spring團隊很看重靜態資源處理這項任務,給出了堪稱經典的兩種解決方案。服務器
先調整web.xml中的DispatcherServlet的配置,使其能夠捕獲全部的請求:mvc
<servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
按照上面url-pattern的配置,全部URL請求都將被Spring MVC的DispatcherServlet截獲。app
方案1:採用<mvc:default-servlet-handler />框架
注意,須要是spring3.0.5以上版本url
在springMVC-servlet.xml中配置<mvc:default-servlet-handler />後,會在Spring MVC上下文中定義一個org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它會像安檢人員,對進入DispatcherServlet的URL進行過濾,若是發現是靜態資源的URL請求,就將該請求轉由Web應用服務器默認的Servlet處理,若是不是靜態資源的請求,才由DispatcherServlet繼續處理。spa
通常Web應用服務器默認的Servlet名稱是"default",所以DefaultServletHttpRequestHandler能夠找到它。若是你全部的Web應用服務器的默認Servlet名稱不是"default",則須要經過default-servlet-name屬性顯示指定:<mvc:default-servlet-handler default-servlet-name="所使用的Web服務器默認使用的Servlet名稱" />code
我看網上其餘博客大都是這樣寫的,我本身試了很久仍是不行。
緣由:缺乏 <mvc:annotation-driven />
ps:我就找了半天緣由,~~~~~心好累~~~~
配置文件若是沒有<mvc:annotation-driven/>,那麼全部的Controller可能就沒有解析,全部當有請求時候都沒有匹配的處理請求類,就都去<mvc:default-servlet-handler/>即default servlet處理了。添加上<mvc:annotation-driven/>後,相應的url請求被Controller處理,而靜態資源由於沒有相應的Controller就會被default servlet處理;即沒有相應的Controller就會被default servlet處理。
<mvc:annotation-driven/>至關於註冊了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter兩個bean,配置一些messageconverter。即解決了@Controller註解的使用前提配置。
方案二:採用<mvc:resources />
在springMVC-servlet中添加以下配置: <mvc:resources mapping="/static/**" location="/static/" />
首先,<mvc:resources />容許靜態資源放在任何地方,徹底打破了傳統Web容器的靜態資源只能放在Web容器的根路徑。這個由Spring MVC框架本身處理靜態資源,並添加一些有用的附加值功能。