在我web.xml
的 servlet 中有这样的 URL 模式:
<url-pattern>/*/myservice</url-pattern>
所以我想用blablabla/myservice
as来调用它anyWord/myservice
。
但它不起作用。仅当我使用此 URL 调用它时它才有效:(/*/myservice
在 URL 中带有星号)。
你不能那样做。根据 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()
)并使用该值将请求转发给其他处理程序。
您可以在您的 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>
那么两个 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>