web.xml中url-pattern匹配規則

最基本的servlet中,jsp頁面向對應Servlet對象請求時,會根據web.xml中匹配規則,匹配對應的Servlet。

匹配規則有三種:

  • 精確匹配 —— 如/findAll.htm,只會匹配foo.htm這個URL
  • 路徑匹配 —— 如/service/*,會匹配以service爲前綴的URL
  • 後綴匹配 —— 如*.htm,會匹配所有以.htm爲後綴的URL

<url-pattern>的其他寫法,如/findAll/ ,/*.htm ,*/foo 都是不對的。

Servlet的匹配原則

Servlet的匹配規則在prg.apache.tomcat.util.http.mapper.Mapper.internalMapWrapper中定義。

對Servlet的匹配來說,如果同時定義了多個<url-pattern>,那麼到底匹配哪個Servlet?這個匹配順序是:

  1. 首先精確匹配,如定義了兩個Servlet,Servlet1爲/foo.htm,Servlet2是/*,請求URL爲http://localhost/foo.htm,那麼只有Servlet1匹配成功;
  2. 如果精確匹配不成功,那麼會使用第二個原則“最長路徑匹配”,如Servlet1爲/foo/*,Servlet2爲/*,這時請求的URL爲http://localhost/foo/foo.htm,那麼Servlet1匹配成功;
  3. 最後根據後綴進行匹配;
  4. 但是一次請求只會成功匹配到一個Servlet



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章