使用简单的正则表达式映射Java Servlet的任何方式? [复制]
Posted
技术标签:
【中文标题】使用简单的正则表达式映射Java Servlet的任何方式? [复制]【英文标题】:Any way of mapping java servlet using simple regex? [duplicate] 【发布时间】: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能帮到你。 【参考方案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。
【讨论】:
正是我想要的。谢谢以上是关于使用简单的正则表达式映射Java Servlet的任何方式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章