web.xml加載順序

首先可以肯定的是紫新,加載順序與它們?cè)?web.xml 文件中的先后順序無關(guān)。即不會(huì)因?yàn)?filter 寫在 listener 的前面而會(huì)先加載 filter熙卡。最終得出的結(jié)論是:listener -> filter -> servlet
同時(shí)還存在著這樣一種配置節(jié):context-param,它用于向 ServletContext 提供鍵值對(duì)掏湾,即應(yīng)用程序上下文信息。我們的 listener, filter 等在初始化時(shí)會(huì)用到這些上下文中的信息肿嘲,那么 context-param 配置節(jié)是不是應(yīng)該寫在 listener 配置節(jié)前呢融击?實(shí)際上 context-param 配置節(jié)可寫在任意位置,因此真正的加載順序?yàn)椋篶ontext-param -> listener -> filter -> servlet
對(duì)于某類配置節(jié)而言雳窟,與它們出現(xiàn)的順序是有關(guān)的尊浪。以 filter 為例,web.xml 中當(dāng)然可以定義多個(gè) filter封救,與 filter 相關(guān)的一個(gè)配置節(jié)是 filter-mapping拇涤,這里一定要注意,對(duì)于擁有相同 filter-name 的 filter 和 filter-mapping 配置節(jié)而言誉结,filter-mapping 必須出現(xiàn)在 filter 之后鹅士,否則當(dāng)解析到 filter-mapping 時(shí),它所對(duì)應(yīng)的 filter-name 還未定義惩坑。web 容器啟動(dòng)時(shí)初始化每個(gè) filter 時(shí)掉盅,是按照 filter 配置節(jié)出現(xiàn)的順序來初始化的,當(dāng)請(qǐng)求資源匹配多個(gè) filter-mapping 時(shí)以舒,filter 攔截資源是按照 filter-mapping 配置節(jié)出現(xiàn)的順序來依次調(diào)用 doFilter() 方法的趾痘。
servlet 同 filter 類似,此處不再贅述蔓钟。
由此永票,可以看出,web.xml 的加載順序是:context-param -> listener -> filter -> servlet 奋刽,而同個(gè)類型之間的實(shí)際程序調(diào)用的時(shí)候的順序是根據(jù)對(duì)應(yīng)的 mapping 的順序進(jìn)行調(diào)用的瓦侮。

web.xml文件詳解
Xml代碼
Web.xml常用元素
<web-app >
<display-name > </display-name > 定義了WEB應(yīng)用的名字
<description > </description > 聲明WEB應(yīng)用的描述信息

<context-param > </context-param > context-param元素聲明應(yīng)用范圍內(nèi)的初始化參數(shù)。
<filter > </filter > 過濾器元素將一個(gè)名字與一個(gè)實(shí)現(xiàn)javax.servlet.Filter接口的類相關(guān)聯(lián)佣谐。
<filter-mapping > </filter-mapping > 一旦命名了一個(gè)過濾器肚吏,就要利用filter-mapping元素把它與一個(gè)或多個(gè)servlet或JSP頁面相關(guān)聯(lián)。
<listener > </listener > servlet API的版本2.3增加了對(duì)事件監(jiān)聽程序的支持狭魂,事件監(jiān)聽程序在建立罚攀、修改和刪除會(huì)話或servlet環(huán)境時(shí)得到通知。
Listener元素指出事件監(jiān)聽程序類雌澄。
<servlet > </servlet > 在向servlet或JSP頁面制定初始化參數(shù)或定制URL時(shí)斋泄,必須首先命名servlet或JSP頁面。Servlet元素就是用來完成此項(xiàng)任務(wù)的镐牺。
<servlet-mapping > </servlet-mapping > 服務(wù)器一般為servlet提供一個(gè)缺省的URL:http://host/webAppPrefix/servlet/ServletName炫掐。
但是,常常會(huì)更改這個(gè)URL睬涧,以便servlet可以訪問初始化參數(shù)或更容易地處理相對(duì)URL募胃。在更改缺省URL時(shí)旗唁,使用servlet-mapping元素。

<session-config > </session-config > 如果某個(gè)會(huì)話在一定時(shí)間內(nèi)未被訪問痹束,服務(wù)器可以拋棄它以節(jié)省內(nèi)存检疫。
可通過使用HttpSession的setMaxInactiveInterval方法明確設(shè)置單個(gè)會(huì)話對(duì)象的超時(shí)值,或者可利用session-config元素制定缺省超時(shí)值祷嘶。

<mime-mapping > </mime-mapping > 如果Web應(yīng)用具有想到特殊的文件屎媳,希望能保證給他們分配特定的MIME類型,則mime-mapping元素提供這種保證论巍。
<welcome-file-list > </welcome-file-list > 指示服務(wù)器在收到引用一個(gè)目錄名而不是文件名的URL時(shí)烛谊,使用哪個(gè)文件。
<error-page > </error-page > 在返回特定HTTP狀態(tài)代碼時(shí)环壤,或者特定類型的異常被拋出時(shí)晒来,能夠制定將要顯示的頁面。
<taglib > </taglib > 對(duì)標(biāo)記庫(kù)描述符文件(Tag Libraryu Descriptor file)指定別名郑现。此功能使你能夠更改TLD文件的位置湃崩,而不用編輯使用這些文件的JSP頁面。
<resource-env-ref > </resource-env-ref > 聲明與資源相關(guān)的一個(gè)管理對(duì)象接箫。
<resource-ref > </resource-ref > 聲明一個(gè)資源工廠使用的外部資源攒读。 <security-constraint > </security-constraint > 制定應(yīng)該保護(hù)的URL。它與login-config元素聯(lián)合使用
<login-config > </login-config >指定服務(wù)器應(yīng)該怎樣給試圖訪問受保護(hù)頁面的用戶授權(quán)辛友。它與sercurity-constraint元素聯(lián)合使用薄扁。 <security-role > </security-role > 給出安全角色的一個(gè)列表,這些角色將出現(xiàn)在servlet元素內(nèi)的security-role-ref元素
的role-name子元素中废累。分別地聲明角色可使高級(jí)IDE處理安全信息更為容易邓梅。
<env-entry > </env-entry > 聲明Web應(yīng)用的環(huán)境項(xiàng)。
<ejb-ref > </ejb-ref > 聲明一個(gè)EJB的主目錄的引用邑滨。
< ejb-local-ref > </ ejb-local-ref > 聲明一個(gè)EJB的本地主目錄的應(yīng)用日缨。
</web-app >

相應(yīng)元素配置

1、Web應(yīng)用圖標(biāo):指出IDE和GUI工具用來表示W(wǎng)eb應(yīng)用的大圖標(biāo)和小圖標(biāo)
<icon >
<small-icon > /images/app_small.gif</small-icon >
<large-icon > /images/app_large.gif</large-icon >
</icon >
2掖看、Web 應(yīng)用名稱:提供GUI工具可能會(huì)用來標(biāo)記這個(gè)特定的Web應(yīng)用的一個(gè)名稱
<display-name > Tomcat Example</display-name >
3匣距、Web 應(yīng)用描述: 給出于此相關(guān)的說明性文本
<disciption > Tomcat Example servlets and JSP pages.</disciption >
4、上下文參數(shù):聲明應(yīng)用范圍內(nèi)的初始化參數(shù)哎壳。
<context-param >
<param-name > ContextParameter</para-name >
<param-value > test</param-value >
<description > It is a test parameter.</description >
</context-param >
在servlet里面可以通過getServletContext().getInitParameter("context/param")得到

5毅待、過濾器配置:將一個(gè)名字與一個(gè)實(shí)現(xiàn)javaxs.servlet.Filter接口的類相關(guān)聯(lián)。
<filter >
<filter-name > setCharacterEncoding</filter-name >
<filter-class > com.myTest.setCharacterEncodingFilter</filter-class >
<init-param >
<param-name > encoding</param-name >
<param-value > GB2312</param-value >
</init-param >
</filter >
<filter-mapping >
<filter-name > setCharacterEncoding</filter-name >
<url-pattern > /</url-pattern >
</filter-mapping >
6归榕、監(jiān)聽器配置
<listener >
<listerner-class > listener.SessionListener</listener-class >
</listener >
7尸红、Servlet配置
基本配置
<servlet >
<servlet-name > snoop</servlet-name >
<servlet-class > SnoopServlet</servlet-class >
</servlet >
<servlet-mapping >
<servlet-name > snoop</servlet-name >
<url-pattern > /snoop</url-pattern >
</servlet-mapping >
高級(jí)配置
<servlet >
<servlet-name > snoop</servlet-name >
<servlet-class > SnoopServlet</servlet-class >
<init-param >
<param-name > foo</param-name >
<param-value > bar</param-value >
</init-param >
<run-as >
<description > Security role for anonymous access</description >
<role-name > tomcat</role-name >
</run-as >
</servlet >
<servlet-mapping >
<servlet-name > snoop</servlet-name >
<url-pattern > /snoop</url-pattern >
</servlet-mapping >
元素說明
<servlet > </servlet > 用來聲明一個(gè)servlet的數(shù)據(jù),主要有以下子元素:
<servlet-name > </servlet-name > 指定servlet的名稱
<servlet-class > </servlet-class > 指定servlet的類名稱
<jsp-file > </jsp-file > 指定web站臺(tái)中的某個(gè)JSP網(wǎng)頁的完整路徑
<init-param > </init-param > 用來定義參數(shù),可有多個(gè)init-param驶乾。在servlet類中通過getInitParamenter( String name)方法訪問初始化參數(shù)
<load-on-startup > </load-on-startup > 指定當(dāng)Web應(yīng)用啟動(dòng)時(shí)邑飒,裝載Servlet的次序循签。
當(dāng)值為正數(shù)或零時(shí):Servlet容器先加載數(shù)值小的servlet级乐,再依次加載其他數(shù)值大的servlet.
當(dāng)值為負(fù)或未定義:Servlet容器將在Web客戶首次訪問這個(gè)servlet時(shí)加載它
<servlet-mapping > </servlet-mapping > 用來定義servlet所對(duì)應(yīng)的URL,包含兩個(gè)子元素
<servlet-name > </servlet-name > 指定servlet的名稱
<url-pattern > </url-pattern > 指定servlet所對(duì)應(yīng)的URL
8县匠、會(huì)話超時(shí)配置(單位為分鐘)
<session-config >
<session-timeout > 120</session-timeout >
</session-config >
9风科、MIME類型配置
<mime-mapping >
<extension > htm</extension >
<mime-type > text/html</mime-type >
</mime-mapping >
10、指定歡迎文件頁配置
<welcome-file-list >
<welcome-file > index.jsp</welcome-file >
<welcome-file > index.html</welcome-file >
<welcome-file > index.htm</welcome-file >
</welcome-file-list >
11乞旦、配置錯(cuò)誤頁面
一贼穆、 通過錯(cuò)誤碼來配置error-page
<error-page >
<error-code > 404</error-code >
<location > /NotFound.jsp</location >
</error-page >
上面配置了當(dāng)系統(tǒng)發(fā)生404錯(cuò)誤時(shí),跳轉(zhuǎn)到錯(cuò)誤處理頁面NotFound.jsp兰粉。
二故痊、通過異常的類型配置error-page
<error-page >
<exception-type > java.lang.NullException</exception-type >
<location > /error.jsp</location >
</error-page >
上面配置了當(dāng)系統(tǒng)發(fā)生java.lang.NullException(即空指針異常)時(shí),跳轉(zhuǎn)到錯(cuò)誤處理頁面error.jsp
12玖姑、TLD配置
<taglib >
<taglib-uri > http://jakarta.apache.org/tomcat/debug-taglib</taglib-uri >
<taglib-location > /WEB-INF/jsp/debug-taglib.tld</taglib-location >
</taglib >
如果MyEclipse一直在報(bào)錯(cuò),應(yīng)該把<taglib > 放到 <jsp-config > 中
<jsp-config >
<taglib >
<taglib-uri > http://jakarta.apache.org/tomcat/debug-taglib</taglib-uri >
<taglib-location > /WEB-INF/pager-taglib.tld</taglib-location >
</taglib >
</jsp-config >
13愕秫、資源管理對(duì)象配置
<resource-env-ref >
<resource-env-ref-name > jms/StockQueue</resource-env-ref-name >
</resource-env-ref >
14、資源工廠配置
<resource-ref >
<res-ref-name > mail/Session</res-ref-name >
<res-type > javax.mail.Session</res-type >
<res-auth > Container</res-auth >
</resource-ref >
配置數(shù)據(jù)庫(kù)連接池就可在此配置:
<resource-ref >
<description > JNDI JDBC DataSource of shop</description >
<res-ref-name > jdbc/sample_db</res-ref-name >
<res-type > javax.sql.DataSource</res-type >
<res-auth > Container</res-auth >
</resource-ref >
15焰络、安全限制配置
<security-constraint >
<display-name > Example Security Constraint</display-name >
<web-resource-collection >
<web-resource-name > Protected Area</web-resource-name >
<url-pattern > /jsp/security/protected/
</url-pattern >
<http-method > DELETE</http-method >
<http-method > GET</http-method >
<http-method > POST</http-method >
<http-method > PUT</http-method >
</web-resource-collection >
<auth-constraint >
<role-name > tomcat</role-name >
<role-name > role1</role-name >
</auth-constraint >
</security-constraint >
16戴甩、登陸驗(yàn)證配置
<login-config >
<auth-method > FORM</auth-method >
<realm-name > Example-Based Authentiation Area</realm-name >
<form-login-config >
<form-login-page > /jsp/security/protected/login.jsp</form-login-page >
<form-error-page > /jsp/security/protected/error.jsp</form-error-page >
</form-login-config >
</login-config >
17、安全角色:security-role元素給出安全角色的一個(gè)列表闪彼,這些角色將出現(xiàn)在servlet元素內(nèi)的security-role-ref元素的role- name子元素中甜孤。
分別地聲明角色可使高級(jí)IDE處理安全信息更為容易。
<security-role >
<role-name > tomcat</role-name >
</security-role >
18畏腕、Web環(huán)境參數(shù):env-entry元素聲明Web應(yīng)用的環(huán)境項(xiàng)
<env-entry >
<env-entry-name > minExemptions</env-entry-name >
<env-entry-value > 1</env-entry-value >
<env-entry-type > java.lang.Integer</env-entry-type >
</env-entry >
19缴川、EJB 聲明
<ejb-ref >
<description > Example EJB reference</decription >
<ejb-ref-name > ejb/Account</ejb-ref-name >
<ejb-ref-type > Entity</ejb-ref-type >
<home > com.mycompany.mypackage.AccountHome</home >
<remote > com.mycompany.mypackage.Account</remote >
</ejb-ref >
20、本地EJB聲明
<ejb-local-ref >
<description > Example Loacal EJB reference</decription >
<ejb-ref-name > ejb/ProcessOrder</ejb-ref-name >
<ejb-ref-type > Session</ejb-ref-type >
<local-home > com.mycompany.mypackage.ProcessOrderHome</local-home >
<local > com.mycompany.mypackage.ProcessOrder</local >
</ejb-local-ref >
21描馅、配置DWR
<servlet >
<servlet-name > dwr-invoker</servlet-name >
<servlet-class > uk.ltd.getahead.dwr.DWRServlet</servlet-class>
</servlet >
<servlet-mapping >
<servlet-name > dwr-invoker</servlet-name>
<url-pattern > /dwr/*</url-pattern>
</servlet-mapping >
22把夸、配置Struts
<display-name > Struts Blank Application</display-name >
<servlet >
<servlet-name > action</servlet-name >
<servlet-class >
org.apache.struts.action.ActionServlet
</servlet-class >
<init-param >
<param-name > detail</param-name >
<param-value > 2</param-value >
</init-param >
<init-param >
<param-name > debug</param-name>
<param-value > 2</param-value >
</init-param >
<init-param >
<param-name > config</param-name >
<param-value > /WEB-INF/struts-config.xml</param-value >
</init-param >
<init-param >
<param-name > application</param-name >
<param-value > ApplicationResources</param-value >
</init-param >
<load-on-startup > 2</load-on-startup>
</servlet >
<servlet-mapping >
<servlet-name > action</servlet-name >
<url-pattern > *.do</url-pattern >
</servlet-mapping >
<welcome-file-list >
<welcome-file > index.jsp</welcome-file >
</welcome-file-list >

 <!-- Struts Tag Library Descriptors -->   
 <taglib >    
     <taglib-uri > struts-bean</taglib-uri >    
     <taglib-location> /WEB-INF/tld/struts-bean.tld</taglib-location >    
 </taglib>    
 <taglib>    
     <taglib-uri> struts-html</taglib-uri>    
     <taglib-location > /WEB-INF/tld/struts-html.tld</taglib-location>    
 </taglib >    
 <taglib >    
 <taglib-uri> struts-nested</taglib-uri>    
 <taglib-location > /WEB-INF/tld/struts-nested.tld</taglib-location>    
 </taglib >    
 <taglib >    
     <taglib-uri> struts-logic</taglib-uri >    
     <taglib-location> /WEB-INF/tld/struts-logic.tld</taglib-location>    
 </taglib>    
 <taglib >    
     <taglib-uri> struts-tiles</taglib-uri>    
     <taglib-location> /WEB-INF/tld/struts-tiles.tld</taglib-location>    
 </taglib>    

23、配置Spring(基本上都是在Struts中配置的)

<!-- 指定spring配置文件位置 -->   
<context-param>    
   <param-name> contextConfigLocation</param-name >    
   <param-value>    
    <!--加載多個(gè)spring配置文件 -->   
     /WEB-INF/applicationContext.xml, /WEB-INF/action-servlet.xml   
   </param-value>    
</context-param>    

<!-- 定義SPRING監(jiān)聽器流昏,加載spring -->   

<listener >
<listener-class > org.springframework.web.context.ContextLoaderListener</listener-class>
</listener >

<listener >
<listener-class >
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener >

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扎即,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子况凉,更是在濱河造成了極大的恐慌谚鄙,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刁绒,死亡現(xiàn)場(chǎng)離奇詭異闷营,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門傻盟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來速蕊,“玉大人,你說我怎么就攤上這事娘赴」嬲埽” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵诽表,是天一觀的道長(zhǎng)唉锌。 經(jīng)常有香客問我,道長(zhǎng)竿奏,這世上最難降的妖魔是什么袄简? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮泛啸,結(jié)果婚禮上绿语,老公的妹妹穿的比我還像新娘。我一直安慰自己候址,他們只是感情好吕粹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宗雇,像睡著了一般昂芜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赔蒲,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天泌神,我揣著相機(jī)與錄音,去河邊找鬼舞虱。 笑死欢际,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的矾兜。 我是一名探鬼主播损趋,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼椅寺!你這毒婦竟也來了浑槽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤返帕,失蹤者是張志新(化名)和其女友劉穎桐玻,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荆萤,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡镊靴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年铣卡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偏竟。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡煮落,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出踊谋,到底是詐尸還是另有隱情蝉仇,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布褪子,位于F島的核電站量淌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嫌褪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一胚股、第九天 我趴在偏房一處隱蔽的房頂上張望笼痛。 院中可真熱鬧,春花似錦琅拌、人聲如沸缨伊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刻坊。三九已至,卻和暖如春党晋,著一層夾襖步出監(jiān)牢的瞬間谭胚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工未玻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留灾而,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓扳剿,卻偏偏與公主長(zhǎng)得像旁趟,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子庇绽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容