3

我需要映射/Test到一个 servlet Test.java 和/anything/Test同一个 servlet。我读到这/*/Test在 web.xml 中不起作用,因为它不接受正则表达式。

有没有使用过滤器的替代方法?由于某些阻塞问题,我无法使用 Tuckey URL 过滤器。另外,我的 servlet 中也需要那个“任何东西”。如果我能够映射,我计划为此处理 url 字符串。

例如

/ProjectName/Test 应该打开 Test servlet

并且还/ProjectName/xyz/Test 应该打开Test servlet

现在 xyz 可以是任何东西。而且我还想在我的测试 servlet 中获取 xyz。我计划通过获取 xyzrequest.getRequestURI()并从 url 获取它。

4

1 回答 1

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。

于 2016-03-10T05:40:23.320 回答