溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

WelcomeFile實(shí)現(xiàn)分析是怎樣的

發(fā)布時(shí)間:2021-11-15 16:12:28 來(lái)源:億速云 閱讀:139 作者:柒染 欄目:大數(shù)據(jù)

這期內(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ī)范中的描述:

WelcomeFile實(shí)現(xiàn)分析是怎樣的

假設(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中

WelcomeFile實(shí)現(xiàn)分析是怎樣的

在部署的時(shí)候,添加到StandardContext中

WelcomeFile實(shí)現(xiàn)分析是怎樣的

后續(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)是這里:

WelcomeFile實(shí)現(xià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è)資訊頻道。

向AI問一下細(xì)節(jié)

免責(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)容。

AI