【发布时间】:2013-09-21 20:47:04
【问题描述】:
我编写了一个 servlet 来处理我的 web 应用程序中发生的异常并将它们映射到 web.xml 中
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/exceptionHandler</location>
</error-page>
这是我在异常处理 servlet service 方法中所做的:
@Override
protected void service(HttpServletRequest req, HttpServletResponse arg1)
throws ServletException, IOException {
Object attribute = req.getAttribute("javax.servlet.error.exception");
if(attribute instanceof SocketException){
// don't do anything
}else{
super.service(req, arg1);
}
}.
问题:
上述方法不起作用,堆栈跟踪正在打印到控制台。当用户请求某些内容然后关闭浏览器时,就会发生这种情况。
问题:
每当出现SocketException 时,如何停止将堆栈跟踪打印到 JBoss 控制台?
这样做的原因:
我想避免在一天结束时看到所有日志的SocketExceptions,因为我对这些信息无能为力。
【问题讨论】:
-
如果您知道异常发生的原因,那么您不应该根据您的要求处理该异常何时它发生吗?像您建议的过滤器将过滤所有出现的异常,即使它们的发生是出于您预期之外的原因。
-
@Daemon 没有办法处理它。我给出了原因:)。我想做的只是逃避服务器日志中的堆栈跟踪。
-
啊,我明白了。异常作为
ServletRequest的一个属性被保存,直到请求被处理后才会被捕获。 -
我不确定您为什么必须覆盖
service()。我认为这可以在doGet和doPost方法中完成。此外,您的doGet和doPost方法看起来如何。还有一件事,你为什么不在你的服务方法中调用这两个方法? -
你确定使用'java.lang.Exception'来指定异常类型有效吗?尝试使用 java.lang.Throwable,它应该用于指定通用错误处理程序。
java.lang.Throwable 因为你想处理 SocketException,你可能想使用这样的东西:java.net.SocketException 跨度>
标签: java tomcat servlets web.xml socketexception