亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

JAVA Web.xml加載順序過(guò)程詳解

瀏覽:3日期:2022-08-19 14:50:03

web.xml加載過(guò)程(步驟):

1.啟動(dòng)WEB項(xiàng)目的時(shí)候,容器(如:Tomcat)會(huì)去讀它的配置文件web.xml.讀兩個(gè)節(jié)點(diǎn):

<listener></listener> 和 <context-param></context-param>

2.緊接著,容器創(chuàng)建一個(gè)ServletContext(上下文),這個(gè)WEB項(xiàng)目所有部分都將共享這個(gè)上下文.

3.容器將<context-param></context-param>轉(zhuǎn)化為鍵值對(duì),并交給ServletContext.

4.容器創(chuàng)建<listener></listener>中的類實(shí)例,即創(chuàng)建監(jiān)聽(tīng).

5.在監(jiān)聽(tīng)中會(huì)有contextInitialized(ServletContextEvent args)初始化方法,在這個(gè)方法中獲得:

ServletContext = ServletContextEvent.getServletContext();context-param的值 = ServletContext.getInitParameter('context-param的鍵');

6.得到這個(gè)context-param的值之后,你就可以做一些操作了.注意,這個(gè)時(shí)候你的WEB項(xiàng)目還沒(méi)有完全啟動(dòng)完成.這個(gè)動(dòng)作會(huì)比 所 有的Servlet都要早.

換句話說(shuō),這個(gè)時(shí)候,你對(duì)<context-param>中的鍵值做的操作,將在你的WEB項(xiàng)目完全啟動(dòng)之前被執(zhí)行.

7.舉例.你可能想在項(xiàng)目啟動(dòng)之前就打開(kāi)數(shù)據(jù)庫(kù).那么這里就可以在<context-param>中設(shè)置數(shù)據(jù)庫(kù)的連接方式,在監(jiān)聽(tīng)類中初始化數(shù)據(jù)庫(kù)的連接.

8.這個(gè)監(jiān)聽(tīng)是自己寫的一個(gè)類,除了初始化方法,它還有銷毀方法.用于關(guān)閉應(yīng)用前釋放資源.比如說(shuō)數(shù)據(jù)庫(kù)連接的關(guān)閉.

web.xml節(jié)點(diǎn)加載順序:

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

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

context-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)的順序來(lái)初始化的,當(dāng)請(qǐng)求資源匹配多個(gè) filter-mapping 時(shí),filter 攔截資源是按照 filter-mapping 配置節(jié)出現(xiàn)的順序來(lái)依次調(diào)用 doFilter() 方法的。

servlet 同 filter 類似,此處不再贅述。

【加載Spring】

比如filter 需要用到 bean ,但加載順序是: 先加載filter 后加載spring,則filter中初始化操作中的bean為null;

所以,如果過(guò)濾器中要使用到 bean,可以將spring 的加載 改成 Listener的方式 :

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

最終結(jié)論:

web.xml 的加載順序是:[context-param -> listener -> filter -> servlet -> spring] ,而同類型節(jié)點(diǎn)之間的實(shí)際程序調(diào)用的時(shí)候的順序是根據(jù)對(duì)應(yīng)的 mapping 的順序進(jìn)行調(diào)用的。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 日本wwwxxxx| 97色伦图片97综合影院久久 | 日韩中文字幕视频在线观看 | 欧美精品一区在线看 | 国产精品久久精品牛牛影视 | 午夜三级在线 | 国产成人精品福利色多多 | 中国一级特黄的片子免费 | 日韩欧美中文 | 高清欧美日韩一区二区三区在线观看 | 777欧美| 免费在线看黄 | 欧美三级在线观看播放 | 国产成人99精品免费观看 | 毛片毛片毛片毛片毛片毛片 | 1024黄| 伊人伊成久久人综合网777 | 看一级毛片国产一级毛片 | 国产三级精品最新在线 | 免费看一级a一片毛片 | 一级一毛片a级毛片欧美 | 亚洲七七久久精品中文国产 | 国产精品久久久久久久午夜片 | 国产精品久久精品牛牛影视 | 日韩精品一区二区三区中文 | 男女性黄色 | 在线精品福利视频你懂的 | 国产成人精品久久亚洲高清不卡 | 久久久久久久久a免费 | 可以免费在线看黄的网站 | a级毛片在线免费观看 | 国产精品黄色 | 萌白酱福利视频在线网站 | 国产成人精品日本亚洲11 | 亚洲你懂得 | 手机看片日韩高清国产欧美 | 青草国产精品久久久久久 | 日韩大尺度无遮挡理论片 | 日毛片| 国产成人a一在线观看 | 成人日韩视频 |