您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)WelcomeFile實(shí)現(xiàn)分析是怎樣的,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
在Web應(yīng)用中,我們經(jīng)常會(huì)發(fā)送類似如下格式的請(qǐng)求:
host:port/context/dir/
當(dāng)然,上面到dir這一層的有時(shí)候會(huì)帶,有時(shí)候則是直接請(qǐng)求根應(yīng)用。這個(gè)時(shí)候,應(yīng)用服務(wù)器就需要判斷對(duì)應(yīng)的請(qǐng)求以哪種形式 進(jìn)行展現(xiàn),例如對(duì)于一個(gè)目錄的請(qǐng)求,這個(gè)時(shí)候,如果目錄下包含特定的某個(gè)頁(yè)面,那這個(gè)時(shí)候可能是要請(qǐng)求頁(yè)面,也可能是 想進(jìn)行目錄的list操作。
這個(gè)時(shí)候,就需要用到Web應(yīng)用中的 Welcome File
關(guān)于 Welcome File , Servlet規(guī)范中指明,它是在web描述文件中指定部分請(qǐng)求路徑的一個(gè)有序的列表。主要用于 在請(qǐng)求指向一個(gè)directory entry
,且沒和任何的Web組件有關(guān)聯(lián)的時(shí)候,進(jìn)行append,從而決定具體請(qǐng)求的地址。
例如我們上面的請(qǐng)求形式,如果此時(shí)dir并沒有對(duì)應(yīng)到任何一個(gè)Servlet或Jsp上,此時(shí)有類似index.html這種welcomeFile的配置, 就會(huì)幫助請(qǐng)求進(jìn)行定向。
如果上面的請(qǐng)求沒有對(duì)應(yīng)到的WelcomeFile,此時(shí)會(huì)根據(jù)應(yīng)用服務(wù)器的配置,進(jìn)行請(qǐng)求目錄的列表(如果該操作是設(shè)為允許的話,可以查看之前關(guān)于List的文章Tomcat是如何響應(yīng)靜態(tài)資源的?),或者直接 返回404.
在應(yīng)用中配置WelcomeFile也很簡(jiǎn)單,只需要在web.xml中直接指定即可,格式如下,來(lái)自規(guī)范中的描述:
假設(shè)我們?cè)趹?yīng)用中指定了如下形式的welcomeFile
<welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>default.jsp</welcome-file></welcome-file-list>
如果應(yīng)用目錄結(jié)構(gòu)包含如下dir /test/index.html /test/a.jsp /hello/x.jsp /hello/default.jsp
此時(shí),我們請(qǐng)求到應(yīng)用的test目錄時(shí),就會(huì)被指向index.html。請(qǐng)求hello會(huì)被指向default.jsp
再來(lái)看下,在Tomcat中對(duì)應(yīng)WelcomeFile的實(shí)現(xiàn)方式。
我們?cè)趙eb.xml這個(gè)描述文件中配置的內(nèi)容,都會(huì)在應(yīng)用部署時(shí)進(jìn)行解析,配置應(yīng)用。welcome-file-list也不例外。 在應(yīng)用內(nèi)指定的會(huì)是第一優(yōu)先級(jí)。應(yīng)用中沒有顯式的指定,就會(huì)使用應(yīng)用服務(wù)器默認(rèn)提供的conf/web.xml中的配置。
web.xml中的配置,會(huì)被保存到一個(gè)Set中
在部署的時(shí)候,添加到StandardContext中
后續(xù),在接收到請(qǐng)求的時(shí)候,就需要判斷具體的請(qǐng)求路徑和welcomeFile的配置。
我們前面的文章里寫過幾次請(qǐng)求,也寫過虛擬主機(jī)
如何不配置應(yīng)用名訪問應(yīng)用?
Facade模式與請(qǐng)求處理
Tomcat多虛擬主機(jī)配置及原理
這其中都提到了一個(gè)叫Mapper的組件。人如其名,它就是為我們做指引的。在請(qǐng)求過程中,基本是按照這樣一個(gè)流程:
EndPoint -> Processor -> CoyoteAdapter -> Mapper -> Pipeline -> Valve ...
這里Mapper在我們前面的文章中寫過,會(huì)根據(jù)已經(jīng)注冊(cè)的虛擬主機(jī),應(yīng)用進(jìn)行請(qǐng)求判斷。對(duì)于本次文章提到的welcome,則是在判斷后的流程中處理
判斷中按照不同的匹配規(guī)則從前到后進(jìn)行:
Exact Match
Prefix Match
Extension Match
Welcome resources processing for servlets
Welcome resources processing for exact macth
Welcome resources processing for prefix match
Welcome resources processing for physical folder
Default servlet
以上我邏輯,基本都是根據(jù)請(qǐng)求的路徑,進(jìn)行不同的match,比較重要的一點(diǎn)是這里:
如我們前面提到的,會(huì)在使用welcomeFile進(jìn)行請(qǐng)求判斷的時(shí)候,把它append到當(dāng)前請(qǐng)求路徑之后進(jìn)行。
上述就是小編為大家分享的WelcomeFile實(shí)現(xiàn)分析是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。