Java 使用筛选器捕获404(和其他服务器错误?)
我不确定这个问题是否已经在这里被问过,我能找到的最好的副本是 但这并不能解决我的问题 我使用的是Jetty 9,我有一个类似这样的过滤器-Java 使用筛选器捕获404(和其他服务器错误?),java,servlets,jetty,servlet-filters,Java,Servlets,Jetty,Servlet Filters,我不确定这个问题是否已经在这里被问过,我能找到的最好的副本是 但这并不能解决我的问题 我使用的是Jetty 9,我有一个类似这样的过滤器- @WebFilter(dispatcherTypes = { DispatcherType.REQUEST, DispatcherType.ERROR }, urlPatterns = { "/*" }) public class ErrorHandler implements Filter { public void destroy() {
@WebFilter(dispatcherTypes = { DispatcherType.REQUEST, DispatcherType.ERROR }, urlPatterns = { "/*" })
public class ErrorHandler implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
int errorcode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
String message = "";
boolean error = false;
StringWriter sw_stacktrace = new StringWriter();
PrintWriter pw_stacktrace = new PrintWriter(sw_stacktrace);
try {
chain.doFilter(request, response);
} catch (AppException e) {
errorcode = e.getCode();
error = true;
message = e.getMessage();
e.printStackTrace(pw_stacktrace);
} catch (Throwable t) {
error = true;
message = "Unknown Error";
t.printStackTrace(pw_stacktrace);
}
if (!response.isCommitted()) {
if (error) {
if (errorcode == HttpServletResponse.SC_INTERNAL_SERVER_ERROR) {
String log = String.format("Error %d Occurred - \n %s \n Stack Trace - \n %s", errorcode, message, sw_stacktrace.toString());
request.getServletContext().log(log);
}
HttpServletResponse resp = (HttpServletResponse) response;
resp.setStatus(errorcode);
request.setAttribute("errorMessage", message);
} else {
request.setAttribute("errorMessage", request.getAttribute("javax.servlet.error.message"));
}
request.getRequestDispatcher("/WEB-INF/templates/error/" + errorcode + ".jsp").forward(request, response);
}
pw_stacktrace.close();
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
我使用它捕获ServletException的自定义异常类型子类,以及在运行时null指针等期间发生的任何其他异常,以显示错误页面—它工作得非常好
但是由于某些原因,我的过滤器没有被404调用。
正如我链接的问题中提到的那样,我也尝试了web.xml方法,但这也不起作用
我对Java和所有这些东西都是新手。。我可能在这里尝试了错误的东西,但是如果筛选器不应该捕获所有类型的错误,那么DispatcherType.ERROR的具体用途是什么?我知道可以按照中所述配置自定义错误页
只是好奇而已。所以,问题是,404并不是一个例外。在web.xml中设置时,将调用标记为DispatcherType.ERROR的筛选器