2011-10-25 164 views
9

我遇到了其他人編寫的J2EE項目。當我來到web.xml時,有兩個不同的servlet映射到相同的URL模式。我不知道這種方法的目的。究竟該如何工作以及什麼是主要目的?將兩個不同的servlet映射到相同的URL模式

這裏是web.xml的相關部分:

<servlet> 
    <servlet-name>fileDownload</servlet-name> 
    <servlet-class>com.htsoft.core.web.servlet.FileDownloadServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>fileDownload</servlet-name> 
    <url-pattern>/file-download</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>fileDownLoad</servlet-name> 
    <servlet-class>com.kaiwii.oa.action.system.FileDownloadServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>fileDownLoad</servlet-name> 
    <url-pattern>/file-downLoad</url-pattern> 
</servlet-mapping> 
+0

要粘貼xml的部分會很好。 – hellectronic

+0

我已經發布了web.xml內容。 –

+3

這些不一樣:servlet規範指出模式匹配區分大小寫。 –

回答

11

只有一個servlet將被調用;我沒有意識到使用兩個servlet處理單個請求的機制(我也不確定這意味着什麼)。

Servlet的URL模式可能會重疊,但有兩個使用完全相同的URL是沒有意義的。我不記得servlet規範是否明確地不允許它,但匹配停止在第一次匹配。規範中定義了匹配方法。

Servlet 2.4 spec PDF參見p。 85+

+0

規範很清楚,url-patterns必須按照它們的出現順序進行測試,所以第一個最長的匹配成立。 SRV 2.5。 – EJP

+0

@EJP我認爲這是映射規範部分的作用? –

+0

我修改了我的評論,但討論過濾器映射和安全約束的部分對於web.xml順序是明確的;討論的#11.1不是。 – EJP