1.背景介紹
2.知識剖析
3.常見問題
4.解決方案
5.編碼實戰(zhàn)
6.擴(kuò)展思考
7.參考文獻(xiàn)
8.更多討論
1.背景介紹
web.xml作用:
當(dāng)我們用IDEA創(chuàng)建一個webapp項目時,往往在WEB-INF文件夾下槽地,會生成一個web.xml文件迁沫,這個配置文件的作用,就是初始化配置信息的捌蚊。
比如:Welcome頁面集畅、servlet、servlet-mapping缅糟、filter挺智、listener、啟動加載級別等窗宦。如果工程不需要上述配置時赦颇,則web.xml就不是必需的了二鳄。
2.知識剖析
web.xml配置元素:
web.xml配置元素
1.根元素
web.xml的模式文件是由Sun公司定義的,每個web.xml文件的根元素中媒怯, 都必須標(biāo)明這個web.xml使用的是哪個模式文檔订讼。其它的元素都放在之中,也是根節(jié)點(diǎn)扇苞。
2.上下文參數(shù)
含有一對或多對參數(shù)名和參數(shù)值欺殿,用作應(yīng)用的Servlet上下文初始化參數(shù),參數(shù)名在整個Web應(yīng)用中必須是惟一的鳖敷, 在web應(yīng)用的整個生命周期中上下文初始化參數(shù)都存在脖苏,Servlet和jsp任何時候可以對其進(jìn)行訪問。
3.監(jiān)聽器
Listener是Servlet的監(jiān)聽器定踱,可以監(jiān)聽客戶端的請求棍潘,服務(wù)端的操作等。
在application,session,request三個對象創(chuàng)建屋吨、銷毀或者屬性變動時自動執(zhí)行代碼的功能組件蜒谤。
常見的listener有:ServletContextListener、ServletRequestListener至扰、HttpSessionListener等鳍徽。
4.過濾器
過濾器對web服務(wù)器管理的所有web資源:例如Jsp, Servlet, 靜態(tài)圖片文件或靜態(tài) html 文件等進(jìn)行攔截,從而實現(xiàn)一些特殊的功能敢课。例如實現(xiàn)URL級別的權(quán)限訪問控制阶祭、過濾敏感詞匯、壓縮響應(yīng)信息等一些高級功能直秆。 它主要用于對用戶請求進(jìn)行預(yù)處理濒募,也可以對HttpServletResponse進(jìn)行后處理。
5.servlet
servlet是一種運(yùn)行服務(wù)器端的java應(yīng)用程序圾结,具有獨(dú)立于平臺和協(xié)議的特性瑰剃,并且可以動態(tài)的生成web頁面,它工作在客戶端請求與服務(wù)器響應(yīng)的中間層筝野。 Servlet 的主要功能在于交互式地瀏覽和修改數(shù)據(jù)晌姚,生成動態(tài) Web 內(nèi)容。
servlet后常跟servlet-mapping歇竟,該元素在Servlet和URL樣式之間定義一個映射挥唠,即servlet類提供一個url,在地址欄輸入對應(yīng)的映射路徑就可以訪問servlet焕议。
3.常見問題
web.xml的加載過程宝磨,元素的加載順序
4.解決方案
WEB容器啟動時,加載過程如下:
1.啟動一個WEB項目的時候,WEB容器會去讀取它的配置文件web.xml唤锉,讀取和兩個結(jié)點(diǎn)世囊。
2.然后,容器創(chuàng)建一個ServletContext窿祥,這個web項目的所有部分都將共享這個上下文茸习。
3.容器將轉(zhuǎn)換為鍵值對,并交給servletContext壁肋。
4.容器創(chuàng)建&lft;listener>中的類實例,創(chuàng)建監(jiān)聽器籽慢。
首先可以肯定的是浸遗,加載順序與它們在web.xml文件中的先后順序無關(guān)。即不會因為filter寫在listener的前面而會先加載filter箱亿。 同時還存在著這樣一種配置節(jié):context-param跛锌,它用于向ServletContext提供鍵值對,即應(yīng)用程序上下文信息届惋。
web.xml的加載順序是:context-param->listener->filter->servlet而同個類型之間的實際程序調(diào)用的時候的順序是根據(jù)對應(yīng)的mapping的順序進(jìn)行調(diào)用的髓帽。
load-on-startup元素標(biāo)記容器是否在啟動的時候就加載這個servlet,當(dāng)配置了多個servelet的時候脑豹,容器就需要讀取它的值來決定加載順序郑藏。
當(dāng)值小于0或者沒有指定時,則表示容器在該servlet被選擇時才會去加載瘩欺。當(dāng)值為0或者大于0時必盖,表示容器在應(yīng)用啟動時就加載并初始化這個servlet。
正數(shù)的值越小俱饿,該servlet的優(yōu)先級越高歌粥,應(yīng)用啟動時就越先加載。所以拍埠,x失驶,中x的取值1,2枣购,3嬉探,4,5代表的是優(yōu)先級坷虑,而非啟動延遲時間甲馋。
5.編碼實戰(zhàn)
6.擴(kuò)展思考
filter、listener迄损、interceptor之間的區(qū)別
filter能夠在一個請求到達(dá)servlet之前預(yù)處理用戶請求定躏,也可以在離開servlet時處理http響應(yīng): 在執(zhí)行servlet之前,首先執(zhí)行filter程序,并為之做一些預(yù)處理工作痊远; 根據(jù)程序需要修改請求和響應(yīng)垮抗; 在servlet被調(diào)用之后截獲servlet的執(zhí)行
listener的作用則與接口類型有關(guān),監(jiān)聽器是在發(fā)生關(guān)注的事件后回調(diào)開發(fā)者提供的方法碧聪。
interceptor 攔截器冒版,類似于filter,不過它不在web.xml中配置,跟使用的框架有關(guān)逞姿,如果使用Spring框架則在spring容器指定的配置文件中配置辞嗡;并且不是針對URL的,而是針對action,當(dāng)頁面提交 action時滞造,進(jìn)行過濾操作续室。
7.參考文獻(xiàn)
https://www.cnblogs.com/shangxiaofei/p/5328377.html
http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html
8.更多討論
web.xml可選元素和出現(xiàn)次數(shù)?
web-app (icon?, display-name?, description?,?distributable?, context-param*, filter*, filter-mapping*,?listener*, servlet*, servlet-mapping*, session-config?,?mime-mapping*, welcome-file-list?,?error-page*, taglib*, resource-env-ref*, resource-ref*,?security-constraint*, login-config?, security-role*,env-entry*,?ejb-ref*, ejb-local-ref*
問號(谒养?)表示子元素是可選的挺狰,而且只能出現(xiàn)一次。星號(*)表示子元素可在部署描述符中出現(xiàn)零次或多次买窟。
url-pattern有哪些匹配規(guī)則丰泊?
精確匹配 路徑匹配 匹配任意的url
ptteng.github.io/PPT/PPT-java/JAVA-task2-web.xml.html#/