我想将所有错误都指向我的Errorsevlet而不明确指定所有代码。有没有办法这样做?
<error-page>
<error-code>400</error-code>
<location>/servlet/com.abc.servlet.ErrorServlet</location>
</error-page>
**在到达ErrorServlet之后,我怎样才能获得servlet中错误的堆栈跟踪。这样我就可以在发生错误时通过电子邮件发送详细信息**
答案 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