对于处理请求时抛出的异常,Spring有许多不同的方法来注册异常处理程序。有没有办法在渲染视图时抛出异常时应用类似的异常处理?至少我希望能够执行一些日志记录。
答案 0 :(得分:1)
问题是在View渲染期间抛出的异常不能做很多事情。特别是,它们通常无法呈现包含错误报告的HTML页面......甚至发送5xx响应...因为响应通常会在抛出异常之前“已提交”。
所以你可以做的最好的(可能)是:
但可能的是,Web容器可以配置为记录未捕获的异常。
<强>更新强>
我刚注意到spring的HandlerInterceptor类公开了一个'afterCompletion'方法,该方法将在抛出异常时调用。有关使用此过滤器与过滤器的好处的想法吗?
试一试,看看。 :-)但鉴于以下情况,我怀疑它会起作用。
使用过滤器或拦截器对渲染jsp时抛出的异常不起作用。它确实打印错误:
Dec 16, 2012 12:18:03 PM org.apache.catalina.core.ApplicationDispatcher
invoke SEVERE: Servlet.service() for servlet jsp threw exception
javax.el.PropertyNotFoundException: Property 'fooo' not found on
type java.lang.String"
不幸的是,异常不会向上传播到过滤器。我想添加自己的日志记录,它会发送错误通知并记录有关失败请求的其他信息。密切关注日志文件以发现错误不是一个好的选择。
使用日志记录子系统实际生成日志消息的可能性很大。如果是,您可以使用日志记录配置为JSP引擎记录事件添加自己的处理程序并发送特殊通知。
异常是1)在JSP视图呈现期间抛出,以及2)JSP引擎没有传播它们这一事实意味着(IMO)不太可能有一种方法可以捕获它们。 / p>
另一种选择是为日志文件设置扫描程序......作为一般系统监控的一部分。