【servlet】路徑匹配 url-pattern
阿新 • • 發佈:2019-01-28
servlet有自己的一套匹配規則。大致分三種,精確,路徑和字尾。
先說路徑:
以/開頭且以/*結尾的是路徑匹配,該路徑下的所有url都會被匹配。如果可以匹配多個路徑,那麼以最長的為結果。
字尾:
*.xxx。固定寫法,*前面不能有東西,不能和路徑匹配一起用,比如/abc/*.txt是不允許的。有一種特殊的字尾匹配是“/*”,這個在所有的字尾匹配中優先順序最高,可以匹配任何url。但是如果已經有精確匹配或者路徑匹配,那麼以精確匹配或者路徑匹配為準。
其餘的大部分都是精確匹配(除了“/”)。
那麼匹配的邏輯是,先精確匹配,找不到再最長路徑匹配,找不到再字尾匹配,還找不到交給default servlet,pattetn是“/”,定義在tomcat的web.xml配置檔案裡,預設會尋找歡迎頁,如果沒有定義歡迎頁那麼404。
<!-- ==================== Default Welcome File List ===================== --> <!-- When a request URI refers to a directory, the default servlet looks --> <!-- for a "welcome file" within that directory and, if present, to the --> <!-- corresponding resource URI for display. --> <!-- If no welcome files are present, the default servlet either serves a --> <!-- directory listing (see default servlet configuration on how to --> <!-- customize) or returns a 404 status, depending on the value of the --> <!-- listings setting. --> <!-- --> <!-- If you define welcome files in your own application's web.xml --> <!-- deployment descriptor, that list *replaces* the list configured --> <!-- here, so be sure to include any of the default values that you wish --> <!-- to use within your application. --> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
<!-- The mapping for the default servlet -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
所以這裡一共有四個優先順序:
精確》路徑》字尾》default。字尾內部又分為兩個優先順序。其次搞清楚各自的格式。
只要搞清楚了優先順序,那麼/*和/的區別不是很簡單嗎。