java - Web.xml 错误页面未捕获未经检查的异常

标签 java servlets servlet-filters web.xml

我有一个未经检查的异常,指定的 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 方法期间错误页面机制被禁用。您可以考虑让最外层的过滤器充当您自己的错误页面处理程序。

基于评论的附加信息:
该请求的错误页面机制已禁用,因为该请求正在由一个或多个过滤器(例如 IPControlFilterSessionAuthFilter)处理。它与将过滤器应用于错误页面没有任何关系。我提到的“最外层过滤器”将映射到 /* 并简单地执行如下操作:

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/

相关文章:

java - 通过 servlet 上传图像出现找不到类异常

java - 在 Java Servlet 中单击链接时如何调用方法

java - 已为此响应调用 Tomcat 8.5 response.getWriter()

java - 使用 Servlet Filter 和 j_security_check 登录时死循环

Guice 请求范围 : Do I need a Provider binding for a value seeded in a servlet filter?

java - 如何使用 spring data mongorepository 对嵌入数组进行排序和限制

java - 建议 Java Swing 组件库

java - JSP 进度条

java - 隐式 super 构造函数。必须显式调用另一个构造函数

java - 是否可以在应用程序内更改手机的音量?