如何处理渲染视图时抛出的异常

时间:2012-12-16 04:35:24

标签: java spring jsp exception-handling

对于处理请求时抛出的异常,Spring有许多不同的方法来注册异常处理程序。有没有办法在渲染视图时抛出异常时应用类似的异常处理?至少我希望能够执行一些日志记录。

1 个答案:

答案 0 :(得分:1)

问题是在View渲染期间抛出的异常不能做很多事情。特别是,它们通常无法呈现包含错误报告的HTML页面......甚至发送5xx响应...因为响应通常会在抛出异常之前“已提交”。

所以你可以做的最好的(可能)是:

  • 为捕获并记录异常的View对象创建一个包装器,或者
  • 在servlet过滤器中进行日志记录,

但可能的是,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" 
  

不幸的是,异常不会向上传播到过滤器。我想添加自己的日志记录,它会发送错误通知并记录有关失败请求的其他信息。密切关注日志文件以发现错误不是一个好的选择。

  1. 使用日志记录子系统实际生成日志消息的可能性很大。如果是,您可以使用日志记录配置为JSP引擎记录事件添加自己的处理程序并发送特殊通知。

  2. 异常是1)在JSP视图呈现期间抛出,以及2)JSP引擎没有传播它们这一事实意味着(IMO)不太可能有一种方法可以捕获它们。 / p>

  3. 另一种选择是为日志文件设置扫描程序......作为一般系统监控的一部分。