1. 程式人生 > >spring-mvc裡的 mvcresources 及靜態資源訪問

spring-mvc裡的 mvcresources 及靜態資源訪問

轉自:https://www.cnblogs.com/linnuo/p/7699401.html

在進行Spring MVC的配置時,通常我們會配置一個dispatcher servlet用於處理對應的URL。配置如下:

<servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

只攔截.do請求配置如下:

<servlet-mapping>  
    <servlet-name>springMVC</servlet-name>  
    <url-pattern>*.do</url-pattern>  
</servlet-mapping> 

這表示名字為 SpringMVC 的servlet會處理一切的url對應的請求,那麼我們怎麼讓servlet來處理專案中的靜態資源呢?這裡有兩種方法。

  • 另外使用一個servlet來處理靜態資源。若我們的資源放置在webapps資料夾下的resources資料夾中,那麼我們可以用名字為default的servlet來處理靜態資源。因此我們還需要在上述配置的基礎上加上以下配置:

      <servlet-mapping>  
      <servlet-name>default</servlet-name>  
      <url-pattern>resources/*</url-pattern>  
      </servlet-mapping>  
    

這表示default的servlet會處理url中為resources/*的對應的請求。這樣,當你把你的image,css已經其他檔案放在resources檔案中時,spring就可以找到它啦。

  • 採用spring自帶mvc:resources方法。首先找到你定義的那個servlet的xml檔案,如本例子中,servlet的名字叫mvc-dispatcher,因此需要找到mvc-dispatcher-servlet.xml檔案,並在該檔案中插入以下配置:

      <mvc:annotation-driven/>  
      <mvc:resources mapping="/resources/**/" location="/resources/"/>  
    

如此就不必另外新增一個mvc來處理靜態資源。而mvc知道靜態資源所處的位置為resources資料夾。
兩種方法都可以將spring mvc配置處理靜態資源。

在SpringMVC3.0之後推薦

<mvc:annotation-driven />
 <mvc:resources location="/img/" mapping="/img/**"/>   
 <mvc:resources location="/js/" mapping="/js/**"/>    
 <mvc:resources location="/css/" mapping="/css/**"/>  

說明:

location元素表示webapp目錄下的static包下的所有檔案;

mapping元素表示以/static開頭的所有請求路徑,如/static/a 或者/static/a/b;

該配置的作用是:DispatcherServlet不會攔截以/static開頭的所有請求路徑,並當作靜態資源

交由Servlet處理。