欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

tomcat關(guān)于配置servlet的url-pattern的問題思路詳解

 更新時間:2020年05月24日 14:01:30   作者:sogeisetsu  
這篇文章主要介紹了tomcat關(guān)于配置servlet的url-pattern的問題詳解,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

tomcat在配置web.xml的時候,servlet是一個比較重要的問題,在這里討論一下servlet中的幾個痛點

  1.  servlet url-pattern的匹配問題
  2. url-pattern中 //* 的區(qū)別
  3. url-pattern的優(yōu)先級問題
  4. 根路徑 / 的匹配問題

1 servlet url-pattern 的匹配問題

url-pattern 有三種匹配模式,分別是路徑匹配、精確匹配、后綴匹配

1.1 精確匹配

<url-pattern> 中配置的項必須與url完全精確匹配。

代碼舉例:point_down:

<servlet-mapping>
 <servlet-name>MyServlet</servlet-name>
 <url-pattern>/kata/detail.html</url-pattern>
 <url-pattern>/demo.html</url-pattern>
 <url-pattern>/table</url-pattern>
</servlet-mapping>

當(dāng)在瀏覽器中輸入如下幾種url時,都會被匹配到該servlet

http://10.43.11.143/myapp/kata/detail.html
http://10.43.11.143/myapp/demo.html

http://10.43.11.143/myapp/table

注意:

http://10.43.11.143/myapp/table/ 是非法的url,不會被當(dāng)作 http://10.43.11.143/myapp/table 識別

另外上述url后面可以跟任意的查詢條件,都會被匹配,如

http://10.43.11.143/myapp/table?hello 這個請求就會被匹配到MyServlet。

1.2 路徑匹配

以“/”字符開頭,并以“/*”結(jié)尾的字符串用于路徑匹配

代碼舉例:point_down:

<servlet-mapping>
 <servlet-name>MyServlet</servlet-name>
 <url-pattern>*.jsp</url-pattern>
 <url-pattern>*.action</url-pattern>
</servlet-mapping>

路徑以/user/開始,后面的路徑可以任意。比如下面的url都會被匹配。

http://localhost:8080/appDemo/user/users.html

http://localhost:8080/appDemo/user/addUser.action

http://localhost:8080/appDemo/user/updateUser.actionl

1.3 后綴匹配

以“*.”開頭的字符串被用于后綴匹配

代碼舉例:point_down:

<servlet-mapping>
 <servlet-name>MyServlet</servlet-name>
 <url-pattern>*.jsp</url-pattern>
 <url-pattern>*.action</url-pattern>
</servlet-mapping>

則任何擴展名為jsp或action的url請求都會匹配,比如下面的url都會被匹配

http://localhost:8080/appDemo/user/users.jsp

http://localhost:8080/appDemo/toHome.action

注意:路徑和后綴匹配無法同時設(shè)置

注意:路徑和擴展名匹配無法同時設(shè)置,比如下面的三個 都是非法的,如果設(shè)置,啟動tomcat服務(wù)器會報錯。

<url-pattern>/kata/*.jsp</url-pattern>

<url-pattern>/*.jsp</url-pattern>

<url-pattern>he*.jsp</url-pattern>

幾個實例:point_down:,不明白請看本文第三章

2 url-pattern中 //* 的區(qū)別

<url-pattern>/</url-pattern>

<url-pattern>/*</url-pattern>

先說 /* , /* 相對來講比較好理解,它是路徑匹配的一種,從范圍上來講,它是范圍最廣的路徑匹配,所有的請求都符合它的要求,從精度上來講,它是精度最低的路徑匹配( 注意!我說的是路徑匹配 ),路徑匹配的優(yōu)先級是從長到短的( 具體請看本文第三章 ),所以說它是精度最低的路徑匹配。很多博客中說它的特點是匹配 *.jsp ,這不是廢話嗎? /* 本身就是路徑匹配,它當(dāng)然可以匹配 *.jsp

再說 / , / 是匹配優(yōu)先級最低的匹配 ,當(dāng)一個url和所有的 url-pattern 匹配都不合適的時候,這個url就會走 / 匹配,根本就沒有什么 *.jsp 的限制,大家之所以產(chǎn)生了(客觀上也確實是這樣) / 不會匹配 *.jsp 但是 /* 會匹配 *.jsp 的原因是在tomcat/conf/web.xml里面單獨配置了 *.jsp 的配置, 具體請看本文第三章

3 url-pattern的優(yōu)先級問題

當(dāng)一個url與多個servlet的匹配規(guī)則可以匹配時,則按照 “ 精確路徑 > 最長路徑>后綴匹配”這樣的優(yōu)先級匹配到對應(yīng)的servlet。

例1:比如servletA 的url-pattern為 /test,servletB的url-pattern為 /* ,這個時候,如果我訪問的url為http://localhost/test ,這個時候容器就會先進(jìn)行精確路徑匹配,發(fā)現(xiàn)/test正好被servletA精確匹配,那么就去調(diào)用servletA,不會去管servletB。

例2:比如servletA的url-pattern為/test/ ,而servletB的url-pattern為/test/a/ ,此時訪問http://localhost/test/a時,容器會選擇路徑最長的servlet來匹配,也就是這里的servletB。

例3: 比如servletA的url-pattern:*.action ,servletB的url-pattern為 / * ,這個時候,如果我訪問的url為http://localhost/test.action,這個時候容器就會優(yōu)先進(jìn)行路徑匹配,而不是去匹配擴展名,這樣就去調(diào)用servletB。

那么就產(chǎn)生了一個疑問。為什么 /* 會匹配到 *.jsp ,但是/匹配不到 *.jsp

原因很簡單,在tomcat/conf/web.xml里面會有如下配置

<servlet-mapping>
 <servlet-name>default</servlet-name>
 <url-pattern>/</url-pattern>
</servlet-mapping>

<!-- The mappings for the JSP servlet -->
<servlet-mapping>
 <servlet-name>jsp</servlet-name>
 <url-pattern>*.jsp</url-pattern>
 <url-pattern>*.jspx</url-pattern>
</servlet-mapping>

:point_up_2:可以清楚地看到 *.jsp 作為名為jsp的servlet的后綴匹配,/*是路徑匹配,其優(yōu)先級高于后綴匹配,所以能匹配到后綴為jsp的文件。而 / 是級別最低的匹配,其級別低于后綴匹配,所以jsp文件不會被 url-pattern 為/的匹配到。

4 根路徑 / 的匹配問題

大家應(yīng)該會注意到一個問題,就是當(dāng)url-pattern為/*的時候訪問http://localhost:8080/會404,但是訪問http://localhost:8080/index.html卻沒有問題(當(dāng)然前提是在spring容器里面配置了 <mvc:default-servlet-handler/> )。當(dāng)url-pattern為/時, http://localhost:8080/ 會自動轉(zhuǎn)發(fā)到 http://localhost:8080/index.html 而不會404。原因是什么呢?

首先,我們必須要明確,一個網(wǎng)址的根目錄即/(比如http://localhost:8080/)到底意味著什么?經(jīng)過實驗發(fā)現(xiàn)/是很特殊的,它會被url-pattern為/*的匹配,但他不會被url-pattern為/匹配。

在tomcat中,/默認(rèn)是屬于會被defaultservlet匹配,但是其優(yōu)先級低于路徑匹配,所以當(dāng)某一個servlet的url-pattern為/*時,/就會被這個servlet匹配,從而不被defaultservlet匹配。

在tomcat源代碼中找到如下片段可以佐證我的看法:point_down:

<!-- ==================== Default Welcome File List ===================== -->
<!-- When a request URI refers to a directory, the default servlet looks  -->
<!-- for a "welcome file" within that directory and, if present, to the   -->
<!-- corresponding resource URI for display.                              -->
<!-- If no welcome files are present, the default servlet either serves a -->
<!-- directory listing (see default servlet configuration on how to       -->
<!-- customize) or returns a 404 status, depending on the value of the    -->
<!-- listings setting.                                                    -->
<!--                                                                      -->
<!-- If you define welcome files in your own application's web.xml        -->
<!-- deployment descriptor, that list *replaces* the list configured      -->
<!-- here, so be sure to include any of the default values that you wish  -->
<!-- to use within your application.   

:point_up_2:上面是講 Welcome File List 的,即 / 路徑會被默認(rèn)轉(zhuǎn)發(fā)到 Welcome File List 中規(guī)定的網(wǎng)頁,即初始頁。我翻譯一下上面的一部分,具體的可以谷歌翻譯,翻譯:point_right:

翻譯:point_down:

當(dāng)請求URI指向目錄時,默認(rèn)servlet在該目錄中查找“歡迎文件”,如果存在,則在相應(yīng)的資源URI中查找以進(jìn)行顯示。如果不存在歡迎文件,則默認(rèn)servlet會提供目錄列表(請參閱默認(rèn)servlet配置中的有關(guān)如何自定義的內(nèi)容)或返回404狀態(tài),具體取決于列表設(shè)置的值

/會重定向到歡迎頁面的原因是 Welcome File List 的存在, Welcome File List 發(fā)揮效果的前提是/必須被defaultservlet匹配。當(dāng)某一個servlet的url-pattern為/*時,/就會被這個servlet匹配,從而不被defaultservlet匹配。所以只有在自己定義的servlet的url-pattern為/時, http://localhost:8080/ 會自動轉(zhuǎn)發(fā)到 http://localhost:8080/index.html 而不會404

總結(jié)

到此這篇關(guān)于tomcat關(guān)于配置servlet的url-pattern的問題詳解的文章就介紹到這了,更多相關(guān)tomcat配置servlet問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • tomcat相關(guān)配置與eclipse集成_動力節(jié)點Java學(xué)院整理

    tomcat相關(guān)配置與eclipse集成_動力節(jié)點Java學(xué)院整理

    這篇文章主要介紹了tomcat相關(guān)配置與eclipse集成_動力節(jié)點Java學(xué)院整理的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Unable?to?start?embedded?Tomcat?Nacos啟動報錯的解決方案

    Unable?to?start?embedded?Tomcat?Nacos啟動報錯的解決方案

    Windows?本地啟動?Nacos(2.2.0)?服務(wù),控制臺報錯?Unable?to?start?embedded?Tomcat,報錯信息:Unable?to?start?embedded?Tomcat,無法加載內(nèi)置的tomcat,本文介紹了Unable?to?start?embedded?Tomcat?Nacos啟動報錯解決方案,需要的朋友可以參考下
    2024-08-08
  • Tomcat9使用免費的Https證書加密網(wǎng)站的方法

    Tomcat9使用免費的Https證書加密網(wǎng)站的方法

    這篇文章主要介紹了Tomcat9使用免費的Https證書加密網(wǎng)站的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • IDEA和Tomcat服務(wù)器的整合過程

    IDEA和Tomcat服務(wù)器的整合過程

    這篇文章主要介紹了IDEA和Tomcat服務(wù)器的整合,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • Nginx+Tomcat關(guān)于Session的管理的實現(xiàn)

    Nginx+Tomcat關(guān)于Session的管理的實現(xiàn)

    本篇文章主要介紹了Nginx+Tomcat關(guān)于Session的管理,通過實例的方式循序漸進(jìn)的介紹了幾種管理session的方式。具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 基于IDEA部署Tomcat服務(wù)器的步驟詳解

    基于IDEA部署Tomcat服務(wù)器的步驟詳解

    這篇文章主要介紹了基于IDEA部署Tomcat服務(wù)器,并在上面創(chuàng)建第一個servlet程序,實現(xiàn)前后端交互,然后做一個簡單的四則運算計算器,需要的朋友可以參考下
    2021-04-04
  • tomcat服務(wù)安裝步驟及詳細(xì)配置實戰(zhàn)教程

    tomcat服務(wù)安裝步驟及詳細(xì)配置實戰(zhàn)教程

    Tomcat是由Apache開發(fā)的一個開源Java WEB應(yīng)用服務(wù)器,下面這篇文章主要給大家介紹了關(guān)于tomcat服務(wù)安裝步驟及詳細(xì)配置實戰(zhàn)教程,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • tomcat設(shè)置開機自啟的幾種方法(包含無service.bat文件設(shè)置)

    tomcat設(shè)置開機自啟的幾種方法(包含無service.bat文件設(shè)置)

    工作中需要設(shè)置windows系統(tǒng)下的tomcat開機自啟,本文主要介紹了tomcat設(shè)置開機自啟的幾種方法,包含正常安裝版本tomcat和免安裝tomcat(無service.bat)兩種情況,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • Tomcat日志文件詳解及catalina.out日志清理方法小結(jié)

    Tomcat日志文件詳解及catalina.out日志清理方法小結(jié)

    Tomcat作為常用Java應(yīng)用服務(wù)器,會生成多種日志文件輔助排查問題與優(yōu)化系統(tǒng),其中catalina.out文件記錄重要輸出信息,但長期累積會占用大量磁盤空間,影響性能,本文介紹Tomcat日志文件種類及其作用,并重點討論如何安全有效地清理catalina.out文件
    2024-10-10
  • 解決tomcat的中文問題

    解決tomcat的中文問題

    今天給大家分享的是解決tomcat中由于字符集不直接支持中文問題的方法,非常的簡單實用,推薦給大家,有需要的小伙伴可以參考下。
    2015-03-03

最新評論