【问题标题】:Any way of mapping java servlet using simple regex? [duplicate]使用简单的正则表达式映射Java Servlet的任何方式? [复制]
【发布时间】:2016-06-24 19:04:40
【问题描述】:

我需要将/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。我计划通过request.getRequestURI() 获取 xyz 并从 url 获取它。

【问题讨论】:

  • 改进你的问题,不清楚你在问什么!
  • 我做到了。举个例子
  • 希望this能帮到你。

标签: servlets servlet-filters servlet-mapping


【解决方案1】:

你需要一个过滤器。

这是一个基本的,应该可以工作。

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。

【讨论】:

  • 正是我想要的。谢谢
猜你喜欢
  • 1970-01-01
  • 2011-06-15
  • 2014-03-29
  • 1970-01-01
  • 2010-09-16
  • 2023-02-01
  • 2015-02-19
  • 2015-06-19
  • 2020-09-07
相关资源
最近更新 更多