1. 程式人生 > >springmvc---web.xml的配置檔案

springmvc---web.xml的配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">

    <display-name>springmvc-projects</display-name>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath*:applicationContext.xml
        </param-value>
    </context-param>
    
    <!--Spring ApplicationContext 載入 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <!-- Support for HiddentHttpMethod -->
    <filter>
        <filter-name>hiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>hiddenHttpMethodFilter</filter-name>
        <servlet-name>springServlet</servlet-name>
    </filter-mapping>

	 <!-- Spring MVC Servlet -->
    <servlet>
        <servlet-name>springServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/spring-mvc.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
	
</web-app>

web.xml載入的優先順序為:listner----->filter----->servlet。

context-param,它用於向 ServletContext 提供鍵值對,即應用程式上下文資訊。

所以真正的載入順序應該是:context-param -> listener -> filter -> servlet

重點來看看springmvc相關的配置

  <servlet>
        <servlet-name>springServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/spring-mvc.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
這裡的servlet的這裡沒有init-param,那麼載入的時候會預設去載入[servlet-name]-servlet.xml.就是說如果我這裡沒有init-param告訴你我的配置檔案的地址,那麼系統載入的時候會自動找到springServlet-servlet.xml的配置檔案,當作springmvc容器初始化的配置檔案。
<load-on-startup>1</load-on-startup>

這個引數實際含義是:

1)load-on-startup元素標記容器是否在啟動的時候就載入這個servlet(例項化並呼叫其init()方法)。

2)它的值必須是一個整數,表示servlet應該被載入的順序

2)當值為0或者大於0時,表示容器在應用啟動時就載入並初始化這個servlet;

3)當值小於0或者沒有指定時,則表示容器在該servlet被選擇時才會去載入。

4)正數的值越小,該servlet的優先順序越高,應用啟動時就越先載入。

5)當值相同時,容器就會自己選擇順序來載入。

所以,<load-on-startup>x</load-on-startup>,中x的取值1,2,3,4,5代表的是優先順序,而非啟動延遲時間。

再來看看關於路徑對映的配置:

 <servlet-mapping>
        <servlet-name>springServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
注意這裡的url攔截是(/)而不是(/*),就是攔截所有的請求,包括靜態檔案(比如:js,css,jpg等)。其中(/*)配置是錯誤的,你的請求能夠對映到對應的controller上,但是返回的如果是*.jsp的話,同樣被攔截了,一直會訪問不到資源的。

那麼(/)會攔截靜態檔案請求,如何處理呢?

1)第一種方式就是nginx做跳轉。

2)第二種就是啟用Tomcat的defaultServlet來處理靜態檔案