SpringMVC的url-pattern配置及原理剖析
xml裏面配置標籤:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<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:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--
方式一:帶後綴,比如*.action *.do *.aaa
該種方式比較精確、方便,在以前和現在企業中都有很大的使用比例
方式二:/ 不會攔截 .jsp,但是會攔截.html等靜態資源(靜態資源:除了servlet和jsp之外的js、css、png等)
爲什麼配置爲/ 會攔截靜態資源???
因爲tomcat容器中有一個web.xml(父),你的項目中也有一個web.xml(子),是一個繼承關係
父web.xml中有一個DefaultServlet, url-pattern 是一個 /
此時我們自己的web.xml中也配置了一個 / ,覆寫了父web.xml的配置
爲什麼不攔截.jsp呢?
因爲父web.xml中有一個JspServlet,這個servlet攔截.jsp文件,而我們並沒有覆寫這個配置,
所以springmvc此時不攔截jsp,jsp的處理交給了tomcat
如何解決/攔截靜態資源這件事?
方式三:/* 攔截所有,包括.jsp
-->
<!--攔截匹配規則的url請求,進入springmvc框架處理-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
父xml的路徑:
我們配置的springmvc.xml只能對jsp進行攔截,但不能對html等進行攔截,我們在webapp下新建個test.html
然後訪問:
原因是沒有對html等靜態資源後綴進行處理的handle.
我們在springmvc.xml裏面配置:
<mvc:default-servlet-handler/>
訪問:
繼續測試:
如果我們將html頁面放在webapp以外的其他位置,都是無法訪問的:
那如果我們想讓靜態資源在resources下面訪問,我們應該怎麼配置呢?
靜態資源配置方案二
將test.html放在resources目錄下面,然後配置springmvc.xml:
<!--靜態資源配置,方案二,SpringMVC框架自己處理靜態資源
mapping:約定的靜態資源的url規則
location:指定的靜態資源的存放位置
-->
<mvc:resources location="classpath:/" mapping="/resources/**"/>
resources目錄就是咱們的classpath路徑。
訪問:
http://localhost:8080/resources/test.html