【问题标题】:Who ate my exception? (jsp dispatcher.include)谁吃了我的例外? (jsp dispatcher.include)
【发布时间】:2011-10-28 01:18:31
【问题描述】:

我正在使用 Websphere 作为应用程序服务器来实现第 3 方 J2EE 应用程序。我在其中一个 JSP(callingPage)中有以下代码

try {
  RequestDispatcher dispatcher = request.getRequestDispatcher(includePage);
  dispatcher.include(request,response);
} catch (Exception Ex) {
  // process the excpetion 
  // and create appropriate response object with body as XML string
}

includePage 也是一个 JSP 页面,在没有异常的情况下,响应应该有 XML 正文。在特定场景中,includePage 会抛出一个有效的(自定义)异常。但是控件不会去catch 中的callingPage 块。

在检查响应时,我发现响应正文包含一个字符串<HTTP ResponseCode><CustomExceptionType><CustomException.getMessage()>,响应代码为 500。由于响应正文不是 XML 字符串,因此我们在下游得到了解析异常。

我检查了应用程序 web.xml,没有为代码 500 指定自定义错误页面。我与 Websphere 管理员讨论过,他帮不上什么忙(他声称他没有对实例做任何具体的事情)。应用程序供应商的支持团队在他们的 Websphere 实例中对其进行了测试,并确认它可以工作。根据他们的说法,它应该是一个 Websphere 配置。

我对 J2EE 框架或 Websphere 的了解有限。我试图搜索现有的查询,但无法找出可能的原因。

【问题讨论】:

    标签: jsp websphere


    【解决方案1】:

    您可能已经解决了这个问题,但以防万一:

    根据http://docs.oracle.com/javaee/6/api/javax/servlet/RequestDispatcher.html

    包含的 servlet 不能更改响应状态码或设置标头;任何进行更改的尝试都会被忽略。

    我怀疑(但我不确定)这就是您的异常丢失的原因。

    【讨论】:

    【解决方案2】:

    通过为 Websphere Web 容器 com.ibm.ws.webcontainer.dispatcherRethrowSER 设置定制属性解决了该问题。详情在这里http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Frweb_custom_props.html

    【讨论】:

      【解决方案3】:

      通常为了处理异常,我们在 JSP 中包含一个错误页面指令。如果发生异常,该错误 JSP 是将转发控制的地方。不确定它是否适用于您的情况,但可以尝试一下:http://www.roseindia.net/jsp/simple-jsp-example/exception-handling-in-jsp.shtml

      让我们知道它是否有效。

      -NG

      【讨论】:

        猜你喜欢
        • 2014-05-03
        • 2012-12-20
        • 2011-04-12
        • 1970-01-01
        • 2011-07-16
        • 1970-01-01
        • 1970-01-01
        • 2017-10-09
        • 2011-12-22
        相关资源
        最近更新 更多