2011-01-25 97 views
7

我有這樣的一個映射Jetty的servlet映射是否可以使用正則表達式?

<servlet-mapping> 
<servlet-name>service</servlet-name> 
<url-pattern>/service/*</url-pattern> 
</servlet-mapping> 

,但我也想 /服務/主 映射到主要的Servlet。

<servlet-mapping> 
<servlet-name>master</servlet-name> 
<url-pattern>/service/master</url-pattern> 
</servlet-mapping> 

我相信這裏有衝突,因爲調用/ service/*會立即觸發服務servlet。有沒有一種方法可以讓我在servlet映射中使用某種排除或者可以用正則表達式來執行我想要做的事情?

回答

6

Servlet映射始終​​使用最具體的匹配,因此路徑將始終映射到master

這是映射從Servlet 3.0 spec的第1章:

  1. 容器將嘗試找到所求 到servlet的路徑的路徑的精確匹配。 A 成功匹配選擇該servlet。
  2. 容器將遞歸地嘗試匹配最長的路徑前綴。這個 是通過一次刪除路徑樹 一個目錄來完成的,使用'/' 字符作爲路徑分隔符。最長匹配確定選擇的servlet 。
  3. 如果URL路徑中的最後一個段包含擴展名(例如 .jsp),那麼servlet容器將嘗試 以匹配處理 擴展請求的servlet。一個 擴展名被定義爲 最後一個段後面的'。' 字符的一部分。
  4. 如果前三條規則都不導致servlet匹配,那麼 容器將嘗試服務 適合請求的資源 的內容。如果爲應用程序定義的「默認」小服務程序爲 ,則將使用 。許多容器提供了一個隱含的默認servlet來提供 內容。
+0

所以你說我映射是正確的?好吧,我已經嘗試過了,並且/ service/master沒有映射到master servlet – denniss 2011-01-25 20:12:48

相關問題