在 Resin 3.0.9 及舊版本中,以下寫法皆可運作,但部署到 Tomcat 5.0 會拋出異常:
嚴重: Parse error in application web.xml
java.lang.IllegalArgumentException: Invalid * in filter mapping
at org.apache.commons.digester.Digester.createSAXException(Digester.java:2540)
...
Servlet 規範規定 <url-pattern> 必須符合特定語法:
/ 開頭的路徑對應(如 /admin/*、/servlet/*)*.jsp、*.do)/login)/* 單獨使用不合法,必須是 /*(匹配所有路徑)或 *.副檔名。Resin 較寬鬆容錯,Tomcat 5.0 嚴格遵循 Servlet 2.4/2.5 規範進行驗證。
| 錯誤寫法 | 正確寫法 | 說明 |
|---|---|---|
<url-pattern>*</url-pattern> | <url-pattern>/*</url-pattern> | 匹配所有請求路徑 |
<url-pattern>*.action</url-pattern> | <url-pattern>*.action</url-pattern> | 副檔名匹配(正確) |
<url-pattern>/user/*</url-pattern> | <url-pattern>/user/*</url-pattern> | 路徑前綴匹配(正確) |
web.xml 所有 <filter-mapping> 與 <servlet-mapping> 中的 <url-pattern>。* 改為 /*。 * )。遷移應用至 Tomcat 5.0+ 時,必須修正所有不符合 Servlet 規範的 URL 模式,否則啟動失敗。