[英]Catching 404s (and other server errors?) using Filter
我不確定是否已經在這里問過這個問題,我能找到的最好的重復項是Servlet過濾器url映射/ *無法處理404錯誤
但這不能解決我的問題。
我正在使用Jetty 9,並且有一個類似這樣的過濾器-
@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
子類)和運行時發生的任何其他異常(空指針等)以顯示錯誤頁面-效果很好。
但是由於某種原因,我的過濾器沒有被404調用。 正如我鏈接的問題中所述,我也嘗試過web.xml
方法,但這也不起作用。
我是Java和所有這些東西的新手。.我可能在這里嘗試了錯誤的事情,但是如果過濾器不應該捕獲所有類型的錯誤,那么DispatcherType.ERROR
的用途到底是什么? 我知道可以按照http://www.eclipse.org/jetty/documentation/current/custom-error-pages.html所述配置自定義錯誤頁面
只是對這個東西感到好奇。
所以,事實是404並不是真正的例外。 當我在web.xml
設置<error-page>
時,將調用標記有DispatcherType.ERROR
過濾器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.