我在tomcat的StartUp上实现了UncaughtExceptionHandler:
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
LOGGER.error("Uncaught Exception");
}
});
当我在Servlet中产生异常时,它不会被我的处理程序捕获:
protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
int i = 1/0;
控制台说:
2014年2月13日,上午8:23:58 org.apache.catalina.core.StandardWrapperValve调用
Schwerwiegend:路径为[/ infraview]的上下文中Servlet [ConnectGatewaysServlet]的Servlet.service()抛出异常
java.lang.ArithmeticException:/减零
在net.test.gateway.ConnectGatewaysServlet.doPost(ConnectGatewaysServlet.java:73)
在javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
在javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
如何为Servlet实现UncaughtExceptionHandler?
最佳答案
那很正常Tomcat具有一百多个线程,并且未捕获的异常处理程序与给定线程相关联(它来自ThreadGroups
)。
您可以做的是将doPost()
的内容包装在try-catch
块中。
另一种方法是在web.xml
中定义错误处理-您还可以创建一个servlet来处理其他servlet中的错误:-)参见example here。