最近在學習servlet的時候發現本身不能訪問到css和js, 因而google一番學到很多方法加載,總結以下:css
1.對於Spring MVC, 因爲咱們截獲了全部請求<url-pattern>/</url-pattern>,也就包括了對css訪問的請求,因此Spring提供了加載靜態資源標籤<mvc:resources mapping="/style/**" location="/style/"/>,如此咱們就能夠直接用url直接訪問資源文件。web
2.咱們還能夠採用default servlet mapping來截獲請求,訪問咱們目標資源,這裏又有一些知識得分享,那就是mapping的優先級spring
從高到低 >Exact match (like /style/a.css )服務器
>Path match (like /style/*)mvc
>Extension match (like /*.jsp) app
因此咱們能夠添加一個 jsp
<servlet-mapping>學習
<servlet-name>default</servlet-name></p>google
<url-pattern>/css/*</url-pattern></p> url
</servlet-mapping>
經過這個Mapping來截獲請求,讓靜態資源得以訪問.
3. 第三種方式是添加一個Filter ,在請求達到或離開servlet以前進行一些處理,因此咱們能夠過濾掉關於靜態資源的請求
<filter>
<filter-name>resource</filter-name>
<filter-class>com.thought.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>resource</filter-name>
<url-pattern> /*</filter-mapping>
</filter-mapping>
而後實現doFilter()方法
String uri = ((HttpServletRequest) request).getRequestURI();
if (uri.startsWith("/css")) {
chain.doFilter(request, response); // Goes to container's default servlet.
} else {
request.getRequestDispatcher("/" + uri).forward(request, response);
}
這樣就能夠跳過對靜態資源的請求截獲了。
4.在獲得祁兮同志的建議後,加上個人實驗,在spring3.0後又有一種方法來截獲靜態文件:
在配置文件中添加 <mvc:default-servlet-handler/>
在springMVC-servlet.xml中配置後,會在Spring MVC上下文中定一個org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它會像一個檢查員,對進入DispatcherServlet的URL進行篩查,若是發現是靜態資源的請求,就將該請求轉由Web應用服務器默認的Servlet處理,若是不是靜態資源的請求,才由DispatcherServlet繼續處理。
通常Web應用服務器默認的Servlet名稱是"default",所以DefaultServletHttpRequestHandler能夠找到它。
但願對你們能有幫助,謝謝