0

在我web.xml的 servlet 中有这样的 URL 模式:

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

所以我想用blablabla/myserviceas来调用它anyWord/myservice

但它不起作用。仅当我使用此 URL 调用它时它才有效:(/*/myservice 在 URL 中带有星号)。

4

3 回答 3

2

你不能那样做。根据 Servlet 2.5 规范(在规范的其他级别并没有什么不同),章节 SRV.11.2:

  • 以字符开头/并以后缀结尾的字符串/*用于路径映射。
  • 以前缀开头的字符串*.用作扩展映射。
  • 仅包含字符的字符串/表示应用程序的“默认”servlet。在这种情况下,servlet 路径是请求 URI 减去上下文路径,并且路径信息为空。
  • 所有其他字符串仅用于完全匹配。

您的案例属于第 4 个项目符号,因此使用了精确映射。

为了避免这种情况,请使用/(第三种情况)的映射。将所有请求映射到特定的 servlet,并让该 servlet 将请求重新路由到某种类型的处理程序(其他 servlet 或某些自定义类)。

例如:

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

然后,在MyServlet的代码中,检查您在请求中收到的 URL(使用request.getPathInfo())并使用该值将请求转发给其他处理程序。

于 2012-12-06T05:48:54.583 回答
1

您可以在您的 url 模式为 /* 时使用过滤器,并在过滤器内部决定您需要哪个重定向。

<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>
于 2012-12-06T06:01:23.453 回答
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>  
于 2012-12-06T06:03:25.457 回答