0

在尝试对 JSP 进行一些错误处理时,我注意到一些奇怪的行为。

  • 我创建了一个 Myobject 但没有在其中放入任何内容来导致空指针进行测试。

  • 我在我的页面中包含了 errorPage 指令,因此当发生此异常时它应该转到我的错误页面。

实际的错误将发生在表单的输入中:

....
 <input type="hidden" id="INITIAL_ACTION" name="INITIAL_ACTION" value="<%=Myobject.myMethod()%>"/>
<input type="hidden" name="INITIAL_PAGE" ....

我看到了 errorpage 的内容,因此 errorpage 指令正在工作,但页面看起来不正常。现在,当我查看页面的源代码时,看起来 errorpage 实际上已插入到我上一页上的此 INITIAL_ACTION 输入的值中,而不是转发:

...
        <input id="INITIAL_ACTION" type="hidden" value=" <html> <head> <title>ErrorPage</title> <link rel = 'stylesheet' type = 'text/css' href = '../css/newstyle.css' /> </head> <body> <div id=" name="INITIAL_ACTION"></input>
        <table class="borderedtable">

            <tbody>
                <tr> … </tr>
                <tr> … </tr>
    ...

当然,这在实际错误页面上给了我一些布局/css 问题。任何人都可以解释这种行为或指出我正确的方向吗?

编辑 :

增加页面缓冲区有效。

但这对于我当前的应用程序来说很难确定哪些页面需要它来确保它们的错误处理工作正常。

问题是错误页面中第一个DIV的id-attribute的第一个double quoute被用来关闭它插入位置的value-attribute..

在错误页面的顶部,我添加了一个 html 注释,其中包含双引号 + 解释。现在使用该引号,并且页面的其余部分渲染得很好。

但我不太喜欢我的解决方案,感觉不可靠

4

1 回答 1

0

我猜您正在使用 Apache Tomcat 或其他使用 Jasper(Tomcat 的 JSP 引擎)或其衍生产品的 JSP 容器之一。

如果在发生错误时响应已经提交,Jasper 会包含错误页面而不是转发给它,因为这是它在特定情况下可以做的最好的事情。

要转发到错误页面,您需要在提交响应之前执行触发错误的操作。可能的方法包括:

  • 增加页面缓冲区的大小,以便稍后提交响应
  • 重构页面,以便更早执行触发错误的代码
于 2014-03-17T14:38:47.513 回答