我有一个未经检查的异常,指定的 web.xml 错误页面未处理该异常。我的目录设置如下:
/index.jsp
/error.jsp
/WEB-INF/web.xml
/此处的其他页面和目录
我在 web.xml 中指定了以下内容:
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
但是,当我通过错误的对象创建故意在 Sign In Servlet 中抛出 IllegalArgumentException 时,应用程序只会处理该错误并将其记录在 Tomcat 6.0 日志中。该页面没有被重定向到 error.jsp 页面。
我做错了什么?如果您需要更多信息来帮助,请告诉我。以下是 Tomcat 6.0 日志中的错误信息:
SEVERE: Servlet.service() for servlet AccountSignIn threw exception java.lang.IllegalArgumentException: int id invalid in FindMeInfo.getInstance(), id: -1 at com.blank.groupandpal.FindMeInfo.getInstance(FindMeInfo.java:15) at com.blank.accounts.servs.AccountSignInServlet.processRequest(AccountSignInServlet.java:107) at com.blank.accounts.servs.AccountSignInServlet.doPost(AccountSignInServlet.java:164) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.blank.filters.SessionAuthFilter.doFilter(SessionAuthFilter.java:79) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.blank.filters.IPControlFilter.doFilter(IPControlFilter.java:97) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at ch.qos.logback.access.tomcat.LogbackValve.invoke(LogbackValve.java:158) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859) at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:574) at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1527) at java.lang.Thread.run(Thread.java:595)
谢谢。
最佳答案
我似乎记得在调用过滤器的 doFilter
方法期间错误页面机制被禁用。您可以考虑让最外层的过滤器充当您自己的错误页面处理程序。
基于评论的附加信息:
该请求的错误页面机制已禁用,因为该请求正在由一个或多个过滤器(例如 IPControlFilter
和 SessionAuthFilter
)处理。它与将过滤器应用于错误页面没有任何关系。我提到的“最外层过滤器”将映射到 /*
并简单地执行如下操作:
try {
chain.doFilter(request, response);
} catch (Throwable exc) {
// set request attributes to capture error info and then forward to error page (e.g. /error.jsp)
}
换句话说,这个过滤器本质上是错误页面机制的重新创建......
关于java - Web.xml 错误页面未捕获未经检查的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6642804/