WEB.XML里的主要配置及其代表的含義

大家好,我是IT修真院上海分院第6期學(xué)員,一枚正直善良的JAVA程序員。

今天給大家分享一下,修真院官網(wǎng)JAVA任務(wù)1中,jdbc數(shù)據(jù)庫連接池的原理及分析。

一、背景介紹

web.xml是web項(xiàng)目的配置文件,可以很方便的開發(fā)web工程。web.xml文件是用來初始化配置信息:比如Welcome頁面、servlet、servlet-mapping、filter、listener、啟動(dòng)加載級(jí)別等。

二、知識(shí)剖析

下面列出web.xml我們常用的一些標(biāo)簽元素及其功能:?

1、指定歡迎頁面,例如:?

description:描述項(xiàng)目,可以不配

display-name:定義項(xiàng)目的名稱,可以不配

welcome-file-list:用來定義首頁的列表,包含一個(gè)子元素list,可以不配

訪問一個(gè)網(wǎng)站時(shí),默認(rèn)看到的第一個(gè)頁面就叫歡迎頁,一般情況下是由首頁來充當(dāng)歡迎頁的。一般情況下,我們會(huì)在web.xml中指定歡迎頁

如果指定了多個(gè)歡迎頁面,顯示時(shí)按順序從第一個(gè)找起,如果第一個(gè)存在,就顯示第一個(gè),后面的不起作用。如果第一個(gè)不存在,就找第二個(gè),以此類推。?

訪問一個(gè)網(wǎng)站時(shí),默認(rèn)看到的第一個(gè)頁面就叫歡迎頁,一般情況下是由首頁來充當(dāng)歡迎頁的。一般情況下,我們會(huì)在web.xml中指定歡迎頁。但 web.xml并不是一個(gè)Web的必要文件,沒有web.xml,網(wǎng)站仍然是可以正常工作的。只不過網(wǎng)站的功能復(fù)雜起來后,web.xml的確有非常大用處,所以,默認(rèn)創(chuàng)建的動(dòng)態(tài)web工程在WEB-INF文件夾下面都有一個(gè)web.xml文件。

2、應(yīng)用上下文和監(jiān)聽器

context-param:元素含有一對參數(shù)名和參數(shù)值,用作配置web項(xiàng)目環(huán)境參數(shù)。參數(shù)名在整個(gè)Web應(yīng)用中必須是惟一的。

listener, filter等在初始化時(shí)會(huì)用到這些上下文中的信息。

listener元素用于指定web容器中的監(jiān)聽器。

listener就是application、session、request三個(gè)對象創(chuàng)建、銷毀或者往其中添加修改刪除屬性時(shí)自動(dòng)執(zhí)行代碼的功能組件。

listener隨web應(yīng)用的啟動(dòng)而啟動(dòng),只初始化一次,隨web應(yīng)用的停止而銷毀

3、filter

filter元素用于指定Web容器中的過濾器。過濾器的主要的用途是過濾字符編碼、做一些業(yè)務(wù)邏輯判斷等。它是隨你的web應(yīng)用啟動(dòng)而啟動(dòng)的,只初始化一次,以后就可以攔截相關(guān)請求,只有當(dāng)你的web應(yīng)用停止或重新部署的時(shí)候才銷毀。

filter-mapping元素用來聲明Web應(yīng)用中的過濾器映射。過濾器可被映射到一個(gè)servlet或一個(gè)URL模式上面。將過濾器映射到一個(gè) servlet中會(huì)造成過濾器作用于servlet上。將過濾器映射到一個(gè)URL模式中則可以將過濾器應(yīng)用于任何資源,只要該資源的URL與URL模式匹配。過濾是按照部署描述符的filter-mapping元素出現(xiàn)的順序執(zhí)行的。

4、servlet

servlet:用來聲明一個(gè)servlet。servlet有以下幾個(gè)子元素:servlet-name、servlet-class、init-param、load-on-startup等。

init-param:用來定義參數(shù),可有多個(gè)init-param。在servlet類中通過getInitParamenter(String name)方法訪問初始化參數(shù)。

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所對應(yīng)的URL,包含兩個(gè)子元素servlet-name和url-pattern

5、錯(cuò)誤頁面

error-page:錯(cuò)誤頁面顯示,有兩種配置方法。

error-code:根據(jù)錯(cuò)誤碼來配置錯(cuò)誤頁面,當(dāng)發(fā)生xxx錯(cuò)誤時(shí),跳轉(zhuǎn)到錯(cuò)誤處理頁面

exception-type:通過異常的類型配置error-page。當(dāng)系統(tǒng)發(fā)生指定的異常時(shí),跳轉(zhuǎn)到錯(cuò)誤處理頁面。

6、設(shè)置會(huì)話(Session)過期時(shí)間,其中時(shí)間以分鐘為單位。

三、常見問題及解決方案

Mapping映射規(guī)則是什么?

Mapping映射有三種規(guī)則:

1、精確匹配

url-pattern中配置的項(xiàng)必須與url完全精確匹配。優(yōu)先級(jí)最高。

2、路徑匹配

舉個(gè)例子:(沒有項(xiàng)目名)/test/aaa,/test/bbb等類似的url都會(huì)匹配到/test/*上面

路徑匹配中最長路徑優(yōu)先級(jí)最高。例如:當(dāng)瀏覽器訪問/test/aaa時(shí),雖然/test/*,/test/aaa/*都匹配,但是根據(jù)路徑最長的原則,就會(huì)去找/test/aaa/*對應(yīng)的servlet

3、擴(kuò)展匹配

舉個(gè)例子:url-pattern為*.jsp的servlet會(huì)接受所有的擴(kuò)展名為.jsp的請求

注意:不要這么寫。/*.action,因?yàn)檫@個(gè)url-pattern中既有路徑匹配,又有擴(kuò)展匹配,web容器無法去判斷匹配哪個(gè)

/和/*有什么區(qū)別呢?

/:會(huì)匹配到/login這樣的路徑型url,不會(huì)匹配到模式為*.jsp這樣的后綴型url

/*:會(huì)匹配所有url:路徑型的和后綴型的url(包括/login,*.jsp,*.js和*.html等)

四、編碼實(shí)戰(zhàn)

五、拓展思考

web.xml的加載順序是什么?

首先可以肯定的是,加載順序與它們在 web.xml 文件中的先后順序無關(guān)。即不會(huì)因?yàn)?filter 寫在 listener 的前面而會(huì)先加載 filter。最終得出的結(jié)論是:ServletContext ->?listener -> filter -> servlet

????????同時(shí)還存在著這樣一種配置節(jié):context-param,它用于向 ServletContext 提供鍵值對,即應(yīng)用程序上下文信息。我們的 listener, filter 等在初始化時(shí)會(huì)用到這些上下文中的信息,那么 context-param 配置節(jié)是不是應(yīng)該寫在 listener 配置節(jié)前呢?實(shí)際上 context-param 配置節(jié)可寫在任意位置,因此真正的加載順序?yàn)椋篶ontext-param -> listener -> filter -> servlet

????????對于某類配置節(jié)而言,與它們出現(xiàn)的順序是有關(guān)的。以 filter 為例,web.xml 中當(dāng)然可以定義多個(gè) filter,與 filter 相關(guān)的一個(gè)配置節(jié)是 filter-mapping,這里一定要注意,對于擁有相同 filter-name 的 filter 和 filter-mapping 配置節(jié)而言,filter-mapping 必須出現(xiàn)在 filter 之后,否則當(dāng)解析到 filter-mapping 時(shí),它所對應(yīng)的 filter-name 還未定義。web 容器啟動(dòng)時(shí)初始化每個(gè) filter 時(shí),是按照 filter 配置節(jié)出現(xiàn)的順序來初始化的,當(dāng)請求資源匹配多個(gè) filter-mapping 時(shí),filter 攔截資源是按照 filter-mapping 配置節(jié)出現(xiàn)的順序來依次調(diào)用 doFilter() 方法的。

六、參考文獻(xiàn)

https://blog.csdn.net/m751075306/article/details/9452893

http://zhxing.iteye.com/blog/399668

七、更多討論

可以使用,參考百度首頁。

、

我們自己配置的404頁面可以提供返回首頁等作用。

需要在web.xml里面配置rest風(fēng)格過濾器。

只要你配置了歡迎頁,路徑正確。tomcat會(huì)跳轉(zhuǎn)到首頁,jetty插件不會(huì)。

差別很大,不可以替代

可以。上面有提到監(jiān)聽器是做什么的。

加載順序也在前面說過了。靜態(tài)資源可以再mvc的配置文件中添加訪問靜態(tài)資源的配置

監(jiān)聽器、過濾器、攔截器。

我沒有碰到過不配置web.xml的項(xiàng)目。


以上就是我對web.xml簡單理解及分析。

PTT連接:PTT

視頻連接:視頻

今天的分享就到這里啦,歡迎大家點(diǎn)贊、轉(zhuǎn)發(fā)、留言、拍磚~

技能樹.IT修真院

“我們相信人人都可以成為一個(gè)工程師,現(xiàn)在開始,找個(gè)師兄,帶你入門,掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷?!?。

這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學(xué)習(xí)路線,學(xué)習(xí)透明化,成長可見化,師兄1對1免費(fèi)指導(dǎo)??靵砼c我一起學(xué)習(xí)吧~

直接點(diǎn)擊此連接:http://www.jnshu.com/login/1/10985551

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.背景介紹 2.知識(shí)剖析 3.常見問題 4.解決方案 5.編碼實(shí)戰(zhàn) 6.擴(kuò)展思考 7.參考文獻(xiàn) 8.更多討論 1...
    七里花海閱讀 660評(píng)論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,551評(píng)論 19 139
  • 大家好,我是IT修真院上海分院第02期學(xué)員,一枚正直善良的java程序員。 今天給大家分享一下,修真院官網(wǎng)task...
    idiot丶偉偉閱讀 3,176評(píng)論 0 7
  • 1. 已經(jīng)三周歲半的兒子,說話當(dāng)然不成問題,可是有一個(gè)奇怪的現(xiàn)象,就是跟他打電話他從來都不肯說半個(gè)字,只是搶著手機(jī)...
    貝妮閱讀 249評(píng)論 2 1
  • 春光媚人眼,春景惹人戀。 假日得空閑,回鄉(xiāng)走一圈。 一為探親人,二為賞田園。 此時(shí)春意濃,此季醉云天。 遠(yuǎn)望村莊路...
    相逢萍水閱讀 227評(píng)論 1 3

友情鏈接更多精彩內(nèi)容