大家好,我是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