注意: 下述所說的 URL 都未包含 ContextPath
Servlet 映射的 URL 規范
1. 以 / 開始並以 /* 結束的表示路徑映射, 即 /Test/* 表示請求路徑以 /Test/ 開始的 URL 映射到該 Servlet 處理
2. 以 *. 開始的表示擴展名映射, 即 *.abc 表示所有以擴展名為 abc 的請求映射到該 Servlet 處理
3. 以 / 開始的表示完全映射, 即 /Test 表示請求 URL 為 /Test 映射到該 Servlet 處理
4. URL Pattern 為 / 表示映射成默認的 Servlet, 當其他 URL 映射未匹配時, 使用默認的 Servlet
路徑匹配順序
1. 先匹配完全映射的 URL
2. 再次匹配路徑映射的 URL, 並且最長的路徑的匹配優先
3. 再次匹配擴展名映射
4. 最後使用默認的 Servlet
以下為示例
Servlet 映射
path pattern servlet
/foo/bar/* servlet1
/baz/* servlet2
/catalog servlet3
*.bop servlet4
incoming path servlet handling request
/foo/bar/index.html servlet1
/foo/bar/index.bop servlet1
/baz servlet2
/baz/index.html servlet2
/catalog servlet3
/catalog/index.html “default” servlet
/catalog/racecar.bop servlet4
/index.bop servlet4
各種匹配模式下的 ServletPath 和 PathInfo
1. 完全匹配 ServletPath = 匹配模式 PathInfo = null
2. 擴展名匹配 ServletPath = 請求的URL PathInfo = null
3. 路徑匹配 ServletPath = 匹配模式剪去 "/*" PathInfo = 請求URL 剪去 ServletPath
4. 默認 Servlet 匹配 ServletPath = 請求的URL PathInfo = null
如果同樣的 URL 被映射到多個 Servlet 時, Serlvet 規范未做說明, tomcat(一個很好用的JSP運行平台) 使用最後一個映射的 Servlet
如果覆蓋了容器內設的 Servlet 映射, 使用新的映射