我需要将/Test
映射到servlet Test.java,并将/anything/Test
映射到同一个servlet。我读到/*/Test
无法在web.xml中工作,因为它不接受正则表达式。
有没有其他方法可以使用过滤器?由于一些阻塞问题,我无法使用Tuckey URL过滤器。此外,我需要"任何事情"也在我的servlet中。如果我能够映射,我计划处理url字符串。
例如
/ProjectName/Test
应该打开Test servlet
以及/ProjectName/xyz/Test
还应该打开Test servlet
现在xyz可以是任何东西。而且我也想在我的Test servlet中获取xyz。我打算通过request.getRequestURI()
获取xyz并从网址中获取它。
答案 0 :(得分:0)
你需要一个过滤器。
这是一个应该有效的基本方法。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String url = req.getRequestURI();
if (url.endsWith("test")) {
request.getServletContext().getNamedDispatcher("TestServlet").forward(request, response);
} else {
chain.doFilter(request, response);
}
}
关键点。我使用getNamedDispatcher
来获取您想要使用的命名servlet。最好不要将这个servlet实际映射到模式。
通过使用getNamedDispatcher
,它不会破坏目标servlet中的请求URL。