1. 程式人生 > >servlet配置url-pattern的匹配規則

servlet配置url-pattern的匹配規則

... 調用 mapping 最長路 true 進行 brush 匹配規則 name

<servlet>
  	<servlet-name>hello</servlet-name>
  	<servlet-class>com.qf.servlet.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>hello</servlet-name>
  	<url-pattern>/hello</url-pattern>
  </servlet-mapping>

擴展名匹配

url-pattern配置的內容是*.aa、*.bb、*.jsp這種類型的

  <servlet>
  	<servlet-name>hello</servlet-name>
  	<servlet-class>com.qf.servlet.HelloServlet3</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>hello</servlet-name>
  	<url-pattern>*.hello</url-pattern>
  </servlet-mapping>

路徑匹配

1.全路徑匹配:請求訪問的url的地址必須與url-pattern配置的內容完全一致

  <servlet>
  	<servlet-name>hello</servlet-name>
  	<servlet-class>com.qf.servlet.HelloServlet3</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>hello</servlet-name>
  	<url-pattern>/aa/bb/hello</url-pattern>
  </servlet-mapping>

2.路徑匹配:前半段完全匹配,後半段存在*(*是通配符,可以代表任何字符串);以/開始,以*結束;/aa/*可以是/aa/bb,也可以是/aa/cc..............

  <servlet>
  	<servlet-name>hello</servlet-name>
  	<servlet-class>com.qf.servlet.HelloServlet3</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>hello</servlet-name>
  	<url-pattern>/aa/*</url-pattern>
  </servlet-mapping>

  註意:/aa/*/*這種url-pattern配置,url訪問時必須是/aa/*/aa,/aa/*/bb這種才可以訪問,也就是中間這個*並不是通配符,只是一個普通字符

路徑匹配和擴展名匹配不可以同時使用,下面幾個配置全是不合法的

<url-pattern>/aa/*.hello</url-pattern>
<url-pattern>/*.hello</url-pattern>
<url-pattern>a*.hello</url-pattern>

註意:

< url-pattern>/</url-pattern> 會匹配到/login這樣的路徑型url,不會匹配到模式為*.jsp這樣的後綴型url
< url-pattern>/*</url-pattern> 會匹配所有url:路徑型的和後綴型的url(包括/login,*.jsp,*.js和*.html等)

當一個url與多個servlet的匹配規則可以匹配時,則按照 “ 完全匹配路徑 > 最長路徑>擴展名”這樣的優先級匹配到對應的servlet

  • servlet1 的url-pattern是 /test,servlet2的url-pattern是 /* ,訪問的url為http://localhost:8080/test ,容器就會先進行完全路徑匹配,發現/test正好被servlet1精確匹配,那麽就去調用servlet1,不會去管servlet2
  • servlet1的url-pattern為/test/*,servlet2的url-pattern為/test/a/*,訪問的url是http://localhost:8080/test/a時,容器會選擇路徑最長的servlet來匹配,也就是這裏的servlet2
  • servlet1的url-pattern是*.action ,servlet2的url-pattern為 /* ,訪問的url為http://localhost:8080/test.action,這個時候容器就會優先進行路徑匹配,而不是去匹配擴展名,這樣就去調用servlet2

servlet配置url-pattern的匹配規則