SpringMVC的url-pattern配置及原理剖析

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章