有没有使用简单正则表达式映射java servlet的方法?

时间:2016-03-10 05:02:57

标签: servlets servlet-filters servlet-mapping

我需要将/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并从网址中获取它。

1 个答案:

答案 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。