天天看點

Servlet url-pattern /與/*差別

以前在使用servlet的時候,配置url-pattern基本上都是指定的路徑,也沒有仔細的研究,最近突然發現了一個問題,我們将url-pattern配制成/*,那麼servlet會處理與其比對的路徑,那麼我們配制成/是不是效果一樣呢?下面我們将通過實際示例來驗證一下。

首先我們建立一個web程式,建立過程這裡就不再叙述了。然後我們再建立一個servlet用于測試

這個servlet很簡單,隻是向頁面輸出一句話,我們需要在web.xml中進行配置,讓其生效。首先我們先将<code>url-pattern</code>配制成<code>/*</code>看一下效果。

運作程式,通過浏覽器通路一下:

我們在浏覽器位址欄輸入:<code>http://127.0.0.1/servlet/</code>,檢視頁面顯示結果:

Servlet url-pattern /與/*差別

tomcat會把這個請求交給我們剛才建立的servlet去處理,再輸入一些其他的位址也會交給這個servlet來處理,那麼我們是不是可以推斷,當<code>url-pattern</code>配置成<code>/*</code>的時候,tomcat會将所有的請求全部交由對應的servlet進行處理。當通路的位址正好有對應的檔案存在時,依然如此嗎?我們來驗證一下。

我們繼續建立兩個檔案:test.jsp和test.html

test.html

test.jsp

然後我們通過浏覽器通路<code>http://127.0.0.1/servlet/test.html</code>和<code>http://127.0.0.1/servlet/test.jsp</code>,我們發現請求依然是交給了我們的servlet去處理。

下面,修改<code>url-pattern</code>為<code>/</code>,我們來驗證一下與<code>/*</code>是否相同

web.xml

修改完成後,我們先來通路<code>http://127.0.0.1/servlet/</code>,結果好像與原來一樣,再通路<code>http://127.0.0.1/servlet/test.html</code>,結果還是一樣,我們現在可能會想這兩者會不會就沒差別呢?别急,我們還有一個位址,好吧,我們最後再通路<code>http://127.0.0.1/servlet/test.jsp</code>,神奇的事情出現了,結果與原來不一樣了。

Servlet url-pattern /與/*差別

這個時候通路到了真正的jsp頁面,而不是由我們的servlet來處理請求。

最後,我們來總結一下:當<code>url-pattern</code>配置成<code>/*</code>的時候,tomcat會将所有的請求交給對應的servlet進行處理,當<code>url-pattern</code>配置成<code>/</code>的時候,多數情況下與<code>/*</code>效果一緻,但是,當通路的路徑正好對應jsp檔案時,tomcat會通路真實的jsp檔案而不是把請求交給對應的servlet處理。

以上為個人的疑問以及驗證的過程,有不對的地方,歡迎指正。