2012-08-08 43 views
10

如果我在web.xml中有兩個匹配請求的servlet映射,會發生什麼?它選擇最具體?如果我在web.xml中有兩個匹配請求的servlet映射,會發生什麼?

例如,如果我有以下xml和一個請求來.... .... /東西,而它去somethingservlet或everything_else servlet?

<servlet-mapping> 
     <servlet-name>something</servlet-name> 
     <url-pattern>/something</url-pattern> 
    </servlet-mapping>  

    <servlet-mapping> 
    <servlet-name>everything_else</servlet-name> 
    <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
+0

在'/ *'上有一個servlet是一種奇怪的設計。也許它應該是一個過濾器? – BalusC 2012-08-09 00:32:45

回答

11

首先成功的比賽將被使用。

有一些映射規則,後面跟着servlet容器。讀的Servlet 2.5規範章SRV.11:

用於映射到一個servlet的路徑是從請求 對象減去上下文路徑和路徑參數請求URL。下面的URL路徑映射 規則按順序使用。第一個成功匹配在使用時沒有進一步 比賽嘗試:

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