2012-12-06 37 views
0

在我web.xml我有這樣的servlet的URL模式:麻煩與web.xml中的URL模式

<url-pattern>/*/myservice</url-pattern>

所以我想用blablabla/myservice也作爲anyWord/myservice調用它。

但它不起作用。它只有在我使用以下URL調用它時纔有效:/*/myservice(在URL中帶有星號)。

回答

2

你不能那樣做。 根據servlet 2.5規範(和東西都不在本說明書的其他層次,不同的),章節SRV.11.2:

  • 的字符串開始與/字符,並用/*後綴 結束用於用於路徑映射。
  • *.前綴開頭的字符串用作擴展名映射。
  • 只包含/字符的字符串表示應用程序的「默認」servlet。在這種情況下,servlet路徑是請求URI減去上下文路徑,並且路徑信息爲空。
  • 所有其他字符串僅用於精確匹配。

您的情況屬於第4個項目符號,因此使用精確映射。

爲了規避這種情況,請使用/(第三種情況)的映射。將所有請求映射到特定的servlet,並讓該servlet將請求重新路由到某種類型的處理程序(其他servlet或某些自定義類)。

例如:

<url-pattern>/</url-pattern> 
<servlet-name>MyServlet</servlet-name> 

然後,MyServlet的代碼內,檢查(使用request.getPathInfo()),您在請求中接收的URL,並使用值將所述請求轉發至其他處理程序。

+1

嗯,好的,謝謝。但是你可以在我的案例中提出什麼建議? – MyTitle

+1

我寫了我的建議,在編輯。嘗試刷新頁面。 – Isaac

1

您可以使用過濾器,而您的網址格式爲/ *,並且在過濾器內部決定您需要的重定向。

<filter> 
<display-name>MyFilter</display-name> 
<filter-name>MyFilter</filter-name> 
<filter-class>com.MyfilterClass</filter-class> 

<filter-mapping> 
<filter-name>MyFilter</filter-name> 
<url-pattern>/*</url-pattern> 
</filter-mapping> 

</filter> 
0

什麼約兩ULR映射部分?

<servlet-mapping> 
    <servlet-name>ModifyMemberSVL</servlet-name> 
    <url-pattern>/ModifyMember</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
    <servlet-name>ModifyMemberSVL</servlet-name> 
    <url-pattern>/Administration/Add_Member/ModifyMember</url-pattern> 
    </servlet-mapping> 
+0

這將需要OP在每次將新限定符添加到其URL模式時更改其「web.xml」。 – Isaac