Spring MVC靜態資源訪問

最近在學習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能夠找到它。

 

 

但願對你們能有幫助,謝謝

相關文章
相關標籤/搜索