1、url-pattern為/
在web.xml配置前端控制器的url-pattern為/時,動态資源和配置的控制器可以通路,但html,gif圖檔,css,js等靜态資源不可以通路了。
1.1 原因
其實在每個動态web項目下都會有個局部web.xml配置檔案,tomcat下有個全局web.xml配置檔案,當使用tomcat啟動動态web項目時,當url-pattern為/在局部的web.xml配置,預設全局web.xml已經配置了url-pattern為/,全局web.xml的url-pattern為/,可以通路靜态資源、動态資源、控制器。此時,tomcat會就近原則,選擇該動态web項目的局部web.xml,進而隻能通路jsp動态資源和配置的控制器,不能通路靜态資源。
1.2 解決方案
第一種:springmvc.xml配置放行靜态資源
mvc:default-servlet-handler是把靜态資源還給全局配置web.xml的預設servlet處理。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 元件包掃描 -->
<context:component-scan base-package="cn.zj.springmvc"/>
<!-- 設定SpringMVC的注解驅動 -->
<mvc:annotation-driven/>
<!-- 設定SpringMVC靜态資源處理 -->
<mvc:default-servlet-handler/>
</beans>
第二種:web.xml配置*.do等通配符
此時springmvc不需要配置放行靜态資源mvc:default-servlet-handler标簽,在web.xml配置url-pattern為*.do。當靜态資源進來,不符合*.do,則走全局的web.xml,而全局的web.xml又放行靜态資源,進而靜态資源可以通路到。
注意:控制器通路時,需要加上.do,但@RequestMapping("/url"),url不需要添加.do。springmvc預設會給url添加.do。是以可以添,可不添。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<!-- 內建配置SpringMVC -->
<!-- 配置SpringMVC的前端控制器(總控) 讓浏覽器的所有請求都經過SpringMVC架構 -->
<servlet>
<servlet-name>MVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置讀取配置檔案的初始化參數 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 初始化容器建立所有對象 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MVC</servlet-name>
<!-- <url-pattern>/</url-pattern> -->
<!-- 實際開發一般都喜歡通配符 * 加上字尾
*.do , *.action (早期Struts2的風格)
-->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
2、url-pattern為/*
在web.xml配置前端控制器的url-pattern為/*時,配置的控制器也不可以通路,html,gif圖檔,css,js等靜态資源和動态資源(jsp)都不可以通路了。