常用元素及含義
<!-- standalone 定義了外部定義的 DTD 文件的存在性,有效值是 yes和 no --> <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!-- web-app是部署描述符的根元素,其它元素都要寫在<web-app></web-app>之間 --> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <!-- 在開發中以上部分基本都是一樣的,不需要我們過多的關注 --> <!-- 定義了web應用的名稱 --> <display-name>test-web</display-name> <!-- 聲明web應用的描述信息 --> <description>test-web application</description> <!-- 過濾器,一個filter對應一個filter-mapping,二者的順序不能顛倒,並且filter-name一致 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!-- 只針對這個filter的參數 --> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- web應用整個生命周期都存在的參數名和值,類似於全局變量,參數名唯一 --> <context-param> <param-name>defaultHtmlEscape</param-name> <param-value>true</param-value> </context-param> <!-- 監聽器,指出事件監聽程序類 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- servlet配置,下面有詳細解釋 --> <servlet> <servlet-name>test-web</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>test-web</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 會話超時配置(單位為分鍾),超時后服務器將次session銷毀 --> <session-config> <session-timeout>10</session-timeout> </session-config> <!--在返回特定HTTP狀態代碼時,或者特定類型的異常被拋出時,能夠制定將要顯示的頁面--> <error-page> <!-- 通過異常類型顯示對應內容,location可以配置路由或者頁面--> <exception-type>java.lang.Exception</exception-type> <location>/exceptionServlet</location> </error-page> <error-page> <!-- 通過出錯碼顯示對應內容 --> <error-code>404</error-code> <location>/notFound.jsp</location> </error-page> </web-app>
servlet配置詳解
<servlet> <servlet-name>servlet名稱</servlet-name> <servlet-class>servlet類全路徑(包名.類名)</servlet-class> <init-param> <param-name>參數</param-name> <param-value>參數值</param-value> </init-param> <load-on-startup>加載優先級</load-on-startup> </servlet> <servlet-mapping> <servlet-name>servlet名稱</servlet-name> <url-pattern>訪問路徑</url-pattern> </servlet-mapping>
其中,<load-on-startup>必須是整數;如果是小於0或者不存在,這個servlet只有被選擇的時候才會被加載;如果大於等於0,容器在啟動web應用時就被加載;數值越小servlet的越先被加載;值相同時,容器自行選擇順序加載。
<context-param>和<init-param>區別
<context-param>配置在web.xml的<web-app>標簽中,類似於全局變量,servlet隨時都能訪問它,存放在servletContext對象中(即application對象); 通過getServletContext().getInitParameter("contextParam")的方式獲取。
<init-param>是針對於filter/servlet等而言的參數,用來初始化當前的Servlet的,屬於當前Servlet的配置,因此存放在servletConfig對象中; 通過getServletConfig().getInitParameter("initParam")的方式獲取。
元素加載過程
當我們去啟動一個WEB項目時,容器包括(JBoss、Tomcat等)首先會讀取項目web.xml配置文件里的配置,當這一步驟沒有出錯並且完成之后,項目才能正常地被啟動起來。
啟動WEB項目的時候,容器首先會去它的配置文件web.xml讀取兩個節點: <listener></listener>和<context-param></context-param>,
緊接着,容器創建一個ServletContext(application),這個WEB項目所有部分都將共享這個上下文。
