2012-12-06 39 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