我在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

10-05 18:41