Tomcat之web.xml中的標籤

關於web.xml配置中的<url-pattern>

標籤<url-pattern>

<url-pattern>是咱們用Servlet作Web項目時須要常常配置的標籤,例:css

<servlet>
<servlet-name>index</servlet-name>
<servlet-class>com.we.servlet.IndexServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>html

當咱們在瀏覽器的地址欄裏輸入http://localhost:8080/we/index時[假設我部署在webapps目錄下的項目名爲we]web

就會匹配到咱們指定的<url-pattern>中,即/index而後一步一步找到對應的<servlet-class>瀏覽器

那咱們輸入的URL:http://localhost:8080/we/index又是如何與<url-pattern>中的/index匹配的呢?服務器

首先咱們要知道URL的組成app

http://localhost:8080    咱們能夠理解爲是咱們的服務器地址,而該地址以後的部分咱們統稱爲:RequestURIwebapp

RequestURI是咱們須要重點注意的部分,其又能夠分解爲幾部分jsp

/we  是咱們的ServletConext的上下文地址,咱們稱爲ServletContext Path,能夠簡單理解爲部署項目時的webapps目錄下的項目名url

/index  是咱們的Servlet的地址,咱們稱爲Servlet Path,這裏就是須要與咱們的<url-pattern>匹配的內容spa

注:在/index後邊咱們還能夠跟其餘的信息,例如:/index?name=admin&pass=admin  這是其中一種明文表示的方式

 

標籤<url-pattern>中*的使用

咱們知道在寫<url-pattern>時有一種通配符的使用寫法,即*

1.當我使用<url-pattern>/*</url-pattern>時,咱們能夠匹配全部的請求,即全部的請求都會通過該標籤對應的Servlet

此時就須要注意靜態資源的請求,由於當咱們使用http://localhost:8080/we/login.html時,依然會匹配該Servlet,

而不少靜態資源實際上是不須要通過Servlet的,例如:js,css,html,jsp,img等靜態資源文件,此時就須要在該Servlet中對靜態資源作特殊處理

2.若是配有以下兩個<url-pattern>標籤時,URL地址爲http://localhost:8080/we/index時又是如何匹配的呢?

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

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

上邊咱們已經說過,/*能夠匹配全部的請求,而/index也能夠匹配咱們的URL地址,此時URL地址會自動且優先的進行精確匹配,即/index,

且只匹配一次,也就是說一旦匹配到一個Servlet即執行該Servlet再也不對其餘Servlet進行匹配,

當咱們輸入一個http://localhost:8080/we/login時,因爲此時匹配不到/login因此只能匹配/*了

3.在Servlet Path部分咱們還可使用更精確的匹配,例如:

<url-pattern>/index/login</url-pattern>匹配http://localhost:8080/we/index/login

<url-pattern>/index/logout</url-pattern>匹配http://localhost:8080/we/index/logout

此時/index/login和/index/logout纔是咱們的Servlet Path

 4.咱們能夠經過使用<url-pattern>*.do</url-pattern>來過濾請求,

這樣若是咱們在頁面中的請求中添加後綴名.do就能夠避免對靜態資源的過濾了,也就不須要對靜態資源作特殊處理了

 

注:<url-pattern>/</url-pattern>和<url-pattern>/*</url-pattern>效果是同樣的 

相關文章
相關標籤/搜索