目錄結構:
contents structure
[+]
一.url-pattern的三種寫法
- 精確匹配。以"/"開頭,加上servlet名稱。
- /ad
- 路徑匹配。以"/"開頭,加上通配符"*"。
- /*
- 擴展名匹配。以通配符"*"開頭,加上擴展名。
- *.action
二.servlet匹配規則
- 先精確匹配,再路徑匹配。servlet-mapping1:<url-pattern>/ad</url-pattern>,servlet-mapping2:<url-pattern>/*</url-pattern>。當一個請求http://localhost:8080/ad來的時候,servlet-mapping1匹配到,不再用servlet-mapping2匹配。
- 路徑匹配的時候,先最長路徑匹配,再最短路徑匹配。servlet-mapping1:<url-pattern>/ad/uplaod.jsp</url-pattern>,servlet-mapping2:<url-pattern>/ad/*</url-pattern>。當一個請求http://localhost:8080/ad/upload.jsp來的時候,servlet-mapping1匹配到,不再用servlet-mapping2匹配。
- 至於擴展名匹配,就是單獨於精確匹配和匹配的一類了。struts2的擴展名就是.action,所以http://localhost:8080/ad.action會被servlet-mapping:<url-pattern>*.action</url-pattern>匹配到。
- 以上都找不到servlet,就用默認的servlet,配置為<url-pattern>/</url-pattern>。
三. filter匹配規則
- 順着web.xml定義的filter順序匹配,匹配到了就開始filter。
- 有幾個就匹配幾次filter幾次。
<filter> <filter-name>encodeFilter</filter-name> <filter-class>com.skylark.common.util.EncodeFilter</filter-class> </filter> <filter-mapping> <filter-name>encodeFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>initSessionFilter</filter-name> <filter-class>com.skylark.service.servlet.InitSessionFilter</filter-class> </filter> <filter-mapping> <filter-name>initSessionFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
任何請求過來的時候,都會先encode,然后initSession。
四,語法錯誤的后果
如果匹配符出現語法錯誤,那么項目是不能夠發布的。筆者的服務器報錯了如下的錯誤:
Server Tomcat v8.5 Server at localhost failed to start.
五,原文鏈接