2012-12-16 35 views
0

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

回答

1

问题是,在视图渲染过程中引发的异常不能做很多事情。特别是,它们通常不能呈现包含错误报告的HTML页面......或者甚至发送5xx响应......因为响应通常在抛出异常之前已经“提交”。

所以,你可以做(​​也许)最好的是:

  • 创建,捕捉和记录异常的查看对象的包装,或
  • 做记录在一个Servlet过滤,

但是有可能是web容器可以配置为记录未捕获的异常。

最新通报

我只注意到春天的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. 在JSP视图呈现过程中引发异常的事实是2)JSP引擎不传播它们意味着(IMO)不太可能有办法让你捕捉它们。

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

+0

使用Servlet过滤器做记录的声音有前途的。它将允许记录关于导致异常的请求的其他信息。我将在星期一拍摄一张照片,并在我开始工作时发布样本。 – Kyle

+0

我刚刚注意到spring的HandlerInterceptor类公开了一个'afterCompletion'方法,当抛出异常时会调用它。有没有想过使用这个与过滤器的好处? – Kyle

+0

使用过滤器或拦截器对渲染jsp时抛出的异常不起作用。它确实打印出错:2012年12月16日12:18:03 org.apache.catalina.core.ApplicationDispatcher调用 SEVERE:servlet jsp的Servlet.service()抛出异常 javax.el.PropertyNotFoundException:Property'fooo 'not found on type java.lang.String“不幸的是,这个异常没有向上传播到过滤器,我想添加自己的日志记录来发送错误通知并记录关于失败请求的附加信息。发现错误的文件不是一个好的选择 – Kyle

相关问题