JavaWEB項目靜態資源訪問問題

  今天碰到一個問題,SSM項目WEB-INF目錄下的靜態資源例如.css .js .font等文件沒法訪問。百度了一下,須要配置SpringMvc對訪問靜態資源的支持。css

  若是將DispatcherServlet請求映射配置爲"/",則Spring MVC將捕獲Web容器全部的請求,包括靜態資源的請求,Spring MVC會將它們當成一個普通請求處理,所以找不到對應處理器將致使錯誤。這多是個歷史性的問題。因爲早期的Spring MVC不能很好地處理靜態資源,因此在web.xml中配置DispatcherServlet的請求映射,每每使用 *.do 、 *.xhtml等方式。這就決定了請求URL必須是一個帶後綴的URL,而沒法採用真正的REST風格的URL。html

  如何讓Spring框架可以捕獲全部URL的請求,同時又將靜態資源的請求轉由Web容器處理,是可將DispatcherServlet的請求映射配置爲"/"的前提。因爲REST是Spring3.0最重要的功能之一,因此Spring團隊很看重靜態資源處理這項任務,給出了堪稱經典的兩種解決方案。web

 

  方法一:採用<mvc:default-servlet-handler />spring

  在springMVC-servlet.xml中配置<mvc:default-servlet-handler />後,會在Spring MVC上下文中定義一個org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它會像一個檢查員,對進入DispatcherServlet的URL進行篩查,若是發現是靜態資源的請求,就將該請求轉由Web應用服務器默認的Servlet處理,若是不是靜態資源的請求,才由DispatcherServlet繼續處理。服務器

通常Web應用服務器默認的Servlet名稱是"default",所以DefaultServletHttpRequestHandler能夠找到它。若是你全部的Web應用服務器的默認Servlet名稱不是"default",則須要經過default-servlet-name屬性顯示指定:mvc

<mvc:default-servlet-handler default-servlet-name="所使用的Web服務器默認使用的Servlet名稱" />app

採用這種方式的靜態資源最好都放在webapp目錄下,也就是WEB-INF的同級目錄。更方便尋址,路徑不會很長。./就表明了webapp目錄。框架

  方法2.採用<mvc:resources />webapp

  暫時還未看懂,看懂了再來更新。。spa

相關文章
相關標籤/搜索