使用简单正则表达式映射 java servlet 的任何方式?
Any way of mapping java servlet using simple regex?
我需要将 /Test
映射到一个 servlet Test.java 并将 /anything/Test
映射到同一个 servlet。我读到 /*/Test
在 web.xml 中不起作用,因为它不接受正则表达式。
是否有使用过滤器的替代方法?由于某些阻塞问题,我无法使用 Tuckey URL 过滤器。另外,我的 servlet 中也需要 "anything"。如果我能够映射,我计划为此处理 url 字符串。
例如
/ProjectName/Test
应该打开测试 servlet
还有/ProjectName/xyz/Test
还应该打开测试 servlet
现在 xyz 可以是任何东西。而且我还想在我的测试 servlet 中获取 xyz。我计划在 request.getRequestURI()
之前获取 xyz 并从 url.
获取它
你需要一个过滤器。
这个是基本的,应该可以用。
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。
我需要将 /Test
映射到一个 servlet Test.java 并将 /anything/Test
映射到同一个 servlet。我读到 /*/Test
在 web.xml 中不起作用,因为它不接受正则表达式。
是否有使用过滤器的替代方法?由于某些阻塞问题,我无法使用 Tuckey URL 过滤器。另外,我的 servlet 中也需要 "anything"。如果我能够映射,我计划为此处理 url 字符串。
例如
/ProjectName/Test
应该打开测试 servlet
还有/ProjectName/xyz/Test
还应该打开测试 servlet
现在 xyz 可以是任何东西。而且我还想在我的测试 servlet 中获取 xyz。我计划在 request.getRequestURI()
之前获取 xyz 并从 url.
你需要一个过滤器。
这个是基本的,应该可以用。
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。