java web中web.xml文件配置

前言:一般的web工程中都會(huì)用到web.xml抡谐,web.xml主要用來(lái)配置,可以方便的開(kāi)發(fā)web工程。web.xml主要用來(lái)配置Filter也祠、Listener、Servlet等近速。但是要說(shuō)明的是web.xml并不是必須的诈嘿,一個(gè)web工程可以沒(méi)有web.xml文件。

1削葱、WEB工程加載web.xml過(guò)程

經(jīng)過(guò)個(gè)人測(cè)試奖亚,WEB工程加載順序與元素節(jié)點(diǎn)在文件中的配置順序無(wú)關(guān)。即不會(huì)因?yàn)?filter 寫(xiě)在 listener 的前面而會(huì)先加載 filter析砸。WEB容器的加載順序是:ServletContext -> context-param -> listener -> filter -> servlet昔字。并且這些元素可以配置在文件中的任意位置。

加載過(guò)程順序如下:

啟動(dòng)一個(gè)WEB項(xiàng)目的時(shí)候首繁,WEB容器會(huì)去讀取它的配置文件web.xml作郭,讀取<listener>和<context-param>兩個(gè)結(jié)點(diǎn)。
緊急著弦疮,容創(chuàng)建一個(gè)ServletContext(servlet上下文)夹攒,這個(gè)web項(xiàng)目的所有部分都將共享這個(gè)上下文。
容器將<context-param>轉(zhuǎn)換為鍵值對(duì)挂捅,并交給servletContext芹助。
容器創(chuàng)建<listener>中的類(lèi)實(shí)例,創(chuàng)建監(jiān)聽(tīng)器闲先。
2状土、web.xml文件元素詳解

1、schema

web.xml的模式文件是由Sun公司定義的伺糠,每個(gè)web.xml文件的根元素<web-app>中蒙谓,都必須標(biāo)明這個(gè) web.xml使用的是哪個(gè)模式文件。其它的元素都放在<web-app></web-app>之中训桶。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
</web-app>
  2累驮、<icon>Web應(yīng)用圖標(biāo)

指出IDE和GUI工具用來(lái)表示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>
  3、<display-name>Web應(yīng)用名稱(chēng)

提供GUI工具可能會(huì)用來(lái)標(biāo)記這個(gè)特定的Web應(yīng)用的一個(gè)名稱(chēng)

<display-name>Tomcat Example</display-name>
  4谤专、<disciption>Web應(yīng)用描述

給出于此相關(guān)的說(shuō)明性文本

<disciption>Tomcat Example servlets and JSP pages.</disciption>
  5躁锡、<context-param>上下文參數(shù)

聲明應(yīng)用范圍內(nèi)的初始化參數(shù)。它用于向 ServletContext提供鍵值對(duì)置侍,即應(yīng)用程序上下文信息映之。我們的listener, filter等在初始化時(shí)會(huì)用到這些上下文中的信息。在servlet里面可以通過(guò)getServletContext().getInitParameter("context/param")得到蜡坊。

<context-param>
<param-name>ContextParameter</para-name>
<param-value>test</param-value>
<description>It is a test parameter.</description>
</context-param>
  6杠输、<filter>過(guò)濾器

將一個(gè)名字與一個(gè)實(shí)現(xiàn)javaxs.servlet.Filter接口的類(lèi)相關(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>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
  7秕衙、<listener>監(jiān)聽(tīng)器

<listener>
<listerner-class>com.listener.SessionListener</listener-class>
</listener>
  8蠢甲、<servlet>

<servlet></servlet> 用來(lái)聲明一個(gè)servlet的數(shù)據(jù),主要有以下子元素:

<servlet-name></servlet-name> 指定servlet的名稱(chēng)
<servlet-class></servlet-class> 指定servlet的類(lèi)名稱(chēng)
<jsp-file></jsp-file> 指定web站臺(tái)中的某個(gè)JSP網(wǎng)頁(yè)的完整路徑
<init-param></init-param> 用來(lái)定義參數(shù)据忘,可有多個(gè)init-param鹦牛。在servlet類(lèi)中通過(guò)getInitParamenter(String name)方法訪問(wèn)初始化參數(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客戶首次訪問(wèn)這個(gè)servlet時(shí)加載它萧福。
<servlet-mapping></servlet-mapping> 用來(lái)定義servlet所對(duì)應(yīng)的URL,包含兩個(gè)子元素
<servlet-name></servlet-name> 指定servlet的名稱(chēng)
<url-pattern></url-pattern> 指定servlet所對(duì)應(yīng)的URL

<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>

<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>
  9辈赋、<session-config>會(huì)話超時(shí)配置

單位為分鐘鲫忍。

<session-config>
<session-timeout>120</session-timeout>
</session-config>
  10、<mime-mapping>

<mime-mapping>
<extension>htm</extension>
<mime-type>text/html</mime-type>
</mime-mapping>
  11钥屈、<welcome-file-list>歡迎文件頁(yè)

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
  12悟民、<error-page>錯(cuò)誤頁(yè)面


<error-page>
<error-code>404</error-code>
<location>/NotFound.jsp</location>
</error-page>

<error-page>
<exception-type>java.lang.NullException</exception-type>
<location>/error.jsp</location>
</error-page>
  13、<jsp-config>設(shè)置jsp

<jsp-config> 包括 <taglib> 和 <jsp-property-group> 兩個(gè)子元素篷就。其中<taglib> 元素在JSP 1.2 時(shí)就已經(jīng)存在射亏;而<jsp-property-group> 是JSP 2.0 新增的元素。

<jsp-property-group> 元素主要有八個(gè)子元素竭业,它們分別為:

<description>:設(shè)定的說(shuō)明
<display-name>:設(shè)定名稱(chēng)
<url-pattern>:設(shè)定值所影響的范圍智润,如: /CH2 或 /.jsp
<el-ignored>:若為 true,表示不支持 EL 語(yǔ)法
<scripting-invalid>:若為 true未辆,表示不支持 <% scripting %>語(yǔ)法
<page-encoding>:設(shè)定 JSP 網(wǎng)頁(yè)的編碼
<include-prelude>:設(shè)置 JSP 網(wǎng)頁(yè)的抬頭窟绷,擴(kuò)展名為 .jspf
<include-coda>:設(shè)置 JSP 網(wǎng)頁(yè)的結(jié)尾,擴(kuò)展名為 .jspf
<jsp-config>
<taglib>
<taglib-uri>Taglib</taglib-uri>
<taglib-location>/WEB-INF/tlds/MyTaglib.tld</taglib-location>
</taglib>
<jsp-property-group>
<description>Special property group for JSP Configuration JSP example.</description>
<display-name>JSPConfiguration</display-name>
<url-pattern>/jsp/
</url-pattern>
<el-ignored>true</el-ignored>
<page-encoding>GB2312</page-encoding>
<scripting-invalid>true</scripting-invalid>
<include-prelude>/include/prelude.jspf</include-prelude>
<include-coda>/include/coda.jspf</include-coda>
</jsp-property-group>
</jsp-config>
  對(duì)于Web 應(yīng)用程式來(lái)說(shuō)咐柜,Scriptlet 是個(gè)不樂(lè)意被見(jiàn)到的東西兼蜈,因?yàn)樗鼤?huì)使得HTML 與Java 程式碼交相混雜攘残,對(duì)于程式的維護(hù)來(lái)說(shuō)相當(dāng)?shù)穆闊匾臅r(shí)候为狸,可以在web.xml 中加上<script-invalid> 標(biāo)簽歼郭,設(shè)定所有的JSP 網(wǎng)頁(yè)都不可以使用Scriptlet。

3辐棒、Mapping規(guī)則

當(dāng)一個(gè)請(qǐng)求發(fā)送到servlet容器的時(shí)候病曾,容器先會(huì)將請(qǐng)求的url減去當(dāng)前應(yīng)用上下文的路徑作為servlet的映射url,比如我訪問(wèn)的是http://localhost/test/aaa.html涉瘾,我的應(yīng)用上下文是test知态,容器會(huì)將http://localhost/test去掉,剩下的/aaa.html部分拿來(lái)做servlet的映射匹配立叛。這個(gè)映射匹配過(guò)程是有順序的负敏,而且當(dāng)有一個(gè)servlet匹配成功以后,就不會(huì)去理會(huì)剩下的servlet了秘蛇。

其匹配規(guī)則和順序如下:

精確路徑匹配其做。例子:比如servletA 的url-pattern為 /test,servletB的url-pattern為 /* 赁还,這個(gè)時(shí)候妖泄,如果我訪問(wèn)的url為http://localhost/test ,這個(gè)時(shí)候容器就會(huì)先 進(jìn)行精確路徑匹配艘策,發(fā)現(xiàn)/test正好被servletA精確匹配蹈胡,那么就去調(diào)用servletA,也不會(huì)去理會(huì)其他的servlet了朋蔫。
最長(zhǎng)路徑匹配罚渐。例子:servletA的url-pattern為/test/,而servletB的url-pattern為/test/a/驯妄,此時(shí)訪問(wèn)http://localhost/test/a時(shí)荷并,容器會(huì)選擇路徑最長(zhǎng)的servlet來(lái)匹配,也就是這里的servletB青扔。
擴(kuò)展匹配源织,如果url最后一段包含擴(kuò)展,容器將會(huì)根據(jù)擴(kuò)展選擇合適的servlet微猖。例子:servletA的url-pattern:.action
  以”/’開(kāi)頭和以”/
”結(jié)尾的是用來(lái)做路徑映射的谈息。以前綴”.”開(kāi)頭的是用來(lái)做擴(kuò)展映射的。所以凛剥,為什么定義”/.action”這樣一個(gè)看起來(lái)很正常的匹配會(huì)錯(cuò)黎茎?因?yàn)檫@個(gè)匹配即屬于路徑映射,也屬于擴(kuò)展映射当悔,導(dǎo)致容器無(wú)法判斷傅瞻。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末踢代,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子嗅骄,更是在濱河造成了極大的恐慌胳挎,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溺森,死亡現(xiàn)場(chǎng)離奇詭異慕爬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)屏积,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)医窿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人炊林,你說(shuō)我怎么就攤上這事姥卢。” “怎么了渣聚?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵独榴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我奕枝,道長(zhǎng)棺榔,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任隘道,我火速辦了婚禮症歇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谭梗。我一直安慰自己当船,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布默辨。 她就那樣靜靜地躺著,像睡著了一般苍息。 火紅的嫁衣襯著肌膚如雪缩幸。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天竞思,我揣著相機(jī)與錄音表谊,去河邊找鬼。 笑死盖喷,一個(gè)胖子當(dāng)著我的面吹牛爆办,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播课梳,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼距辆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼余佃!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起跨算,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤爆土,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后诸蚕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體步势,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年背犯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坏瘩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡漠魏,死狀恐怖倔矾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蛉幸,我是刑警寧澤破讨,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站奕纫,受9級(jí)特大地震影響提陶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜匹层,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一隙笆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧升筏,春花似錦撑柔、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至灵汪,卻和暖如春檀训,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背享言。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工峻凫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人览露。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓荧琼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子命锄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

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