包含jsp页面,其中包含来自servlet的错误重定向

时间:2011-01-06 22:37:39

标签: java jsp servlets

我正在尝试从servlet中包含一个jsp页面:

  RequestDispatcher rd = ctx.getRequestDispatcher( jspPage );
  rd.include( req, wrapper );   

但我得到以下例外:

java.lang.IllegalStateException: Cannot forward after response has been committed

问题在于JSP页面通过JSP错误标记指定了自己的默认错误页面。 JSP错误页面也可以抛出一个异常,该异常将涓流到web.xml中指定的应用程序级别错误页面。因此,当我尝试包含的jsp页面抛出异常,并且错误页面也抛出异常时,包含失败。

我必须优雅地处理这个案例,因为我在页面上包含用户编写的模块,而错误的模块应该向用户显示异常,而不是使用IllegalStateException进行炸弹。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试将用户的浏览器重定向到错误页面吗?您可能需要在会话中保存要显示给用户的任何错误信息,因此错误页面可以显示它。

唯一的问题是编写重定向消息可能会失败,因为内容已经从错误的“页面”传递出来。不确定它是非常防弹的:)

可能增加缓冲区大小可能会使其在更多页面上起作用。

答案 1 :(得分:0)

正如您在previous question中的评论中暗示的那样,更改响应只是太晚。在响应中有X个字节后,响应头将被提交给客户端,这是一个不归路的点。你需要重写你的JSP。它们应该只包含标记和表示逻辑,而不是任何可以抛出异常的业务逻辑。

如果您真的无法将JSP中的错误业务代码重构为完全可靠的servlet /业务类,那么它们属于哪里,那么最好的办法就是增加服务器配置中的HTTP响应缓冲区大小并祈祷无处可去在发生异常之前,{em}已调用,并且当您的webapp忙碌时,您不会遇到flush()失败。

相关问题: