在配置項目組件的過程當中, 瞭解Tomcat加載組件順序頗有必要。 例如某些框架如Quartz的集羣功能須要數據庫的支持, 數據庫的加載確定要在框架組件加載以前。css
通過查閱和Debug發現, web.xml組件加載順序爲:context-param -> listener -> filter -> servlet(同類則按編寫順序執行)。html
web.xml經常使用組件解析:前端
<web-app> <display-name></display-name> WEB應用的名字 <description></description> WEB應用的描述 <context-param></context-param> context-param元素聲明應用範圍內的初始化參數 <!-- 指定spring配置文件位置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> <!--加載多個spring配置文件 --> /WEB-INF/applicationContext.xml, /WEB-INF/action-servlet.xml </param-value> </context-param> <filter></filter> 過濾器將一個名字與一個實現javax.servlet.Filter接口的類相關聯 <filter-mapping></filter-mapping> 一旦命名了一個過濾器,就要利用filter-mapping元素把它 與一個或多個servlet或JSP頁面相關聯 <listener></listener> 事件監聽程序在創建、修改和刪除會話或servlet環境時獲得通知。 Listener元素指出事件監聽程序類。 如Log4j這個普遍使用的監聽 <!-- 定義SPRING監聽器,加載spring --> <listener> <listenerclass> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet></servlet> 在向servlet或JSP頁面制定初始化參數或定製URL時, 必須首先命名servlet或JSP頁面。 Servlet元素就是用來完成此項任務的。 <servlet-mapping></servlet-mapping> 服務器通常爲servlet提供一個缺省的URL:http://host/webAppPrefix/servlet/ServletName。 可是,經常會更改這個URL, 以便servlet能夠訪問初始化參數或更容易地處理相對URL。 在更改缺省URL時,使用servlet-mapping元素 <session-config></session-config> 若是某個會話在必定時間內未被訪問, 服務器能夠拋棄它以節省內存。 可經過使用HttpSession的setMaxInactiveInterval方法明確設置單個會話對象的超時值, 或者可利用session-config元素制定缺省超時值 <mime-mapping></mime-mapping> 若是Web應用具備想到特殊的文件, 但願能保證給他們分配特定的MIME類型, 則mime-mapping元素提供這種保證 <welcome-file-list></welcome-file-list> 指示服務器在收到引用一個目錄名而不是文件名的URL時, 使用哪一個文件(其實就是歡迎界面或者說入口界面通常爲index.*) <error-page></error-page> 在返回特定HTTP狀態代碼時,或者特定類型的異常被拋出時, 可以制定將要顯示的頁面。 <taglib></taglib> 對標記庫描述符文件(Tag Libraryu Descriptor file)指定別名。 此功能使你可以更改TLD文件的位置, 而不用編輯使用這些文件的JSP頁面。 <resource-env-ref></resource-env-ref> 聲明與資源相關的一個管理對象。 <resource-ref></resource-ref> 聲明一個資源工廠使用的外部資源。 <security-constraint></security-constraint> 制定應該保護的URL。它與login-config元素聯合使用 <login-config></login-config> 指定服務器應該怎樣給試圖訪問受保護頁面的用戶受權。 它與sercurity-constraint元素聯合使用。 <security-role></security-role> 給出安全角色的一個列表,這些角色將出如今servlet元素內的 security-role-ref元素的role-name子元素中。 分別地聲明角色可以使高級IDE處理安全信息更爲容易 <env-entry></env-entry> 聲明Web應用的環境項 </web-app>
例如個人一個配置:java
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>jwxt</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!--Spring配置--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext-*.xml</param-value> </context-param> <!-- Spring監聽器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 處理POST提交亂碼問題 --> <filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <!--MVC 前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 默認找 /WEB-INF/[servlet的名稱]-servlet.xml --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:SpringMVC.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 1. /* 攔截全部 jsp js png .css 真的全攔截 建議不使用 2. *.action *.do 攔截以do action 結尾的請求 確定能使用 ERP 3. / 攔截全部 (不包括jsp) (包含.js .png.css) 強烈建議使用 前臺 面向消費者 www.jd.com/search /對靜態資源放行 --> <url-pattern>*.action</url-pattern> </servlet-mapping> <!--配置多個請求的方式--> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- shiro過濾器定義 --> <filter> <filter-name>shiroFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> <init-param> <param-name>targetFilterLifecycle</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 404頁面 --> <error-page> <error-code>404</error-code> <location>/404.jsp</location> </error-page> <!-- 500頁面 --> <error-page> <error-code>500</error-code> <location>/500.html</location> </error-page> </web-app>
補充:web
context-param中的param-value能夠用通配符,例如:classpath:application*.xmlspring
也能夠用多個逗號分割多個值,如classpath:appli1.xml,classpath:app2.xml數據庫