Spring MVC DispatcherServlet url-pattern配置攔截靜態資源

web.xml中配置

 <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/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>

一般url-pattern配置都是/

這樣配置會攔截html,js css等靜態資源
因爲Web容器Tomcat中有一個DefatulServlet 主要提供靜態資服務默認的url-pattern也是/
這裏覆蓋了,

  • JSP爲什麼不攔截呢?
    容器tomcat 中還有一個JspServlet,這裏並沒有重寫
<servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
</servlet>
 <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>

解決方法一

spingmvc配置文件中使用下面標籤就可以了

<mvc:default-servlet-handler/>

會在Spring上下文中定義一個DefaultServletHttpRequestHandler對象
會對進行DispatcherServelt的請求進行過濾,如果發現是一個靜態資源請求,會把請求轉給Web容器-Tomcat處理
不是靜態資源,繼承由SpringMVC管理
缺點:靜態資源只能放在Webapp根目錄下,可以建立目錄

解決方法二

使用<mvc:resources標籤

<mvc:resources mapping="/resources/**" location="classpath:/"/>

location元素表示webapp目錄下的static包下的所有文件;
這裏是resources目錄
mapping元素表示以/static開頭的所有請求路徑,如/static/a 或者/static/a/b;
mapping這裏表示以resources開頭的請求路徑
如:
http://localhost:8088/resources/test1.html

解決方法三-web.xml中配置defaultServlet的mapping

 <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.js</url-pattern>
        <url-pattern>*.css</url-pattern>
        <url-pattern>*.html</url-pattern>
        <url-pattern>*.htm</url-pattern>
        <url-pattern>*.png</url-pattern>
        <url-pattern>*.jpg</url-pattern>
        <url-pattern>*.gif</url-pattern>
        <url-pattern>*.ico</url-pattern>
    </servlet-mapping>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章