關於web.xml配置中的


標簽<url-pattern>

<url-pattern>是我們用Servlet做Web項目時需要經常配置的標簽,例:

<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>

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

就會匹配到我們指定的<url-pattern>中,即/index然后一步一步找到對應的<servlet-class>

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

首先我們要知道URL的組成

http://localhost:8080    我們可以理解為是我們的服務器地址,而該地址之后的部分我們統稱為:RequestURI

RequestURI是我們需要重點注意的部分,其又可以分解為幾部分

/we  是我們的ServletConext的上下文地址,我們稱為ServletContext Path,可以簡單理解為部署項目時的webapps目錄下的項目名

/index  是我們的Servlet的地址,我們稱為Servlet Path,這里就是需要與我們的<url-pattern>匹配的內容

注:在/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>效果是一樣的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM