多个错误代码配置web.xml

时间:2010-02-10 14:23:50

标签: java servlets error-handling

我想将所有错误都指向我的Errorsevlet而不明确指定所有代码。有没有办法这样做?

<error-page>
   <error-code>400</error-code>
   <location>/servlet/com.abc.servlet.ErrorServlet</location>
</error-page>

**在到达ErrorServlet之后,我怎样才能获得servlet中错误的堆栈跟踪。这样我就可以在发生错误时通过电子邮件发送详细信息**

4 个答案:

答案 0 :(得分:11)

如果你可以升级,因为Servlet 3.0可以为所有错误提供一般错误页面,即使是那些不是由异常引起的错误页面(例如404,401等)。只需省略<error-code><exception-type>,这样您就只有<location>

<error-page>
   <location>/errorServlet</location>
</error-page>

请注意,我更换了网址以避免使用Tomcat的内置并弃用InvokerServlet

答案 1 :(得分:2)

您需要明确指定所有需要的代码,不支持通配符机制。没有那么多代码,这里是完整的list

要打印堆栈跟踪(例如,在注释中,出于调试目的),您可以执行以下操作:

<%@ page isErrorPage="true" import="java.io.*"%>
<body>
<p>Sorry, there was an error.</p>
<!-- The full stacktrace follows:-->
<!-- 
<%
if (exception != null) {
    exception.printStackTrace(new PrintWriter(out));
}
%> 
-->
</body>

答案 2 :(得分:0)

<error-page>
    <exception-type>java.lang.Throwable</exception-type> 
    <location>/servlet/com.ibm.eisa.servlet.ErrorServlet</location> 
</error-page>

尝试这个,你的所有错误都会被捕获(500's)而不是404等

答案 3 :(得分:0)

我有同样的担忧,经过一些研究后我发现很遗憾没有明确的要求支持Servlet 3.0规范中的默认错误页面。

“错误代码”或“异常类型”是XSD中的可选标记,这是误导性的,因此我们倾向于认为默认错误页面将是没有“错误代码”且没有“异常类型”标记的页面。

某些应用程序服务器(例如GlassFish)按照我们的意愿行事,采用默认错误页面,然后按照特定错误页面的顺序覆盖默认错误页面。

我还在WebLogic 12c上对此进行了测试,但我无法像在GlassFish上那样运行它。下面的文章提供了更多关于Tomcat的线索。

请参阅:bz.apache.org/bugzilla/show_bug.cgi?id=52135