只需实现javax.servlet.Filter。
如果您将其映射到 /* 的 URL 模式上,它将在 每个 请求上执行。
<url-pattern>/*</url-pattern>
或者当您已经在使用 Servlet 3.0 时
@WebFilter(urlPatterns = { "/*" })
可以通过filter的doFilter()方法中的HttpServletRequest#getRequestURI()获取请求URI,如下:
HttpServletRequest httpRequest = (HttpServletRequest) request;
String uri = httpRequest.getRequestURI();
// ...
您可以使用java.lang.String 类提供的任何方法来比较/操作它。
boolean matches = uri.startsWith("/something");
您可以使用Java语言提供的if/else关键字来控制代码中的流程。
if (matches) {
// It matches.
} else {
// It doesn't match.
}
您可以使用HttpServletResponse#sendRedirect() 发送重定向。
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect(newURL);
您可以使用FilterChain#doFilter() 让请求继续。
chain.doFilter(request, response);
算一下。当然,您也可以使用第 3 方,例如 Tuckey 的 URL 重写过滤器,即 Apache HTTPD 的 mod_rewrite 的 Java 变体。
另见: