Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何处理呈现视图时引发的异常_Java_Spring_Jsp_Exception Handling - Fatal编程技术网

Java 如何处理呈现视图时引发的异常

Java 如何处理呈现视图时引发的异常,java,spring,jsp,exception-handling,Java,Spring,Jsp,Exception Handling,对于处理请求时抛出的异常,Spring有许多不同的方法来注册异常处理程序。在呈现视图时引发异常时,是否有方法应用类似的异常处理?至少,我希望能够执行一些日志记录。问题是,视图渲染期间抛出的异常不能做很多事情。特别是,它们通常无法呈现包含错误报告的HTML页面。。。甚至发送5xx响应。。。因为响应通常会在引发异常之前“提交” 因此,您(可能)能做的最好的事情是: 为捕获并记录异常的视图对象创建包装器,或 在servlet过滤器中进行日志记录 但很可能web容器可以配置为记录未捕获的异常 更新

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

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

因此,您(可能)能做的最好的事情是:

  • 为捕获并记录异常的视图对象创建包装器,或
  • 在servlet过滤器中进行日志记录
但很可能web容器可以配置为记录未捕获的异常

更新


我刚刚注意到spring的HandlerInterceptor类公开了一个“afterCompletion”方法,当抛出异常时将调用该方法。关于使用此过滤器与使用过滤器的好处,您有什么想法吗

试试看。:-)但鉴于以下情况,我怀疑它是否会起作用


对于呈现jsp时引发的异常,使用筛选器或拦截器不起作用。它会打印出错误:

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

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

  • 异常是1)在JSP视图呈现期间抛出的,2)JSP引擎没有传播它们,这意味着(IMO)不太可能有方法捕获它们

  • 另一个选项是为日志文件设置扫描程序。。。作为一般系统监控的一部分


  • 使用servlet过滤器进行日志记录听起来很有希望。它将允许记录有关导致异常的请求的其他信息。我将在周一试一试,并在它运行时发布一个示例。我刚刚注意到spring的HandlerInterceptor类公开了一个“afterCompletion”方法,当抛出异常时将调用该方法。关于使用过滤器的好处有什么想法吗?对于呈现jsp时抛出的异常,使用过滤器或拦截器不起作用。它确实打印出错误:2012年12月16日12:18:03 PM org.apache.catalina.core.ApplicationDispatcher调用Servlet jsp抛出异常javax.el.PropertyNotFoundException:在java.lang.String类型上找不到属性“fooo”“不幸的是,异常没有向上传播到筛选器。我想添加我自己的日志,它发送错误通知并记录有关失败请求的其他信息。监视日志文件以发现错误不是一个好的选择
    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"