springmvc---web.xml的配置檔案
阿新 • • 發佈:2019-02-03
<?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的這裡沒有init-param,那麼載入的時候會預設去載入[servlet-name]-servlet.xml.就是說如果我這裡沒有init-param告訴你我的配置檔案的地址,那麼系統載入的時候會自動找到springServlet-servlet.xml的配置檔案,當作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>
<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來處理靜態檔案。