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

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

xml裏面配置標籤:css

<!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的路徑:html

咱們配置的springmvc.xml只能對jsp進行攔截,但不能對html等進行攔截,咱們在webapp下新建個test.html
java

而後訪問:
web

緣由是沒有對html等靜態資源後綴進行處理的handle.spring

咱們在springmvc.xml裏面配置:tomcat

<mvc:default-servlet-handler/>

訪問:mvc

繼續測試:
若是咱們將html頁面放在webapp之外的其餘位置,都是沒法訪問的:
app

那若是咱們想讓靜態資源在resources下面訪問,咱們應該怎麼配置呢?框架

靜態資源配置方案二

將test.html放在resources目錄下面,而後配置springmvc.xml:webapp

<!--靜態資源配置,方案二,SpringMVC框架本身處理靜態資源
        mapping:約定的靜態資源的url規則
        location:指定的靜態資源的存放位置
    -->
    <mvc:resources location="classpath:/"  mapping="/resources/**"/>

resources目錄就是我們的classpath路徑。
訪問:

http://localhost:8080/resources/test.html

相關文章
相關標籤/搜索