JSP插入的errorpage而不是转发?

时间:2014-03-17 14:23:48

标签: html jsp jsp-tags html-form input-field

在JSP上尝试一些错误处理时,我发现了一些奇怪的行为。

  • 我创建了一个Myobject,但是没有在其中添加任何内容来导致测试的空指针。

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

实际错误将出现在表单的输入中:

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

我看到了我的错误内容,所以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的第一次双重输出用于关闭插入它的地方的value-attribute ..

在errorpage的顶部我添加了一个html-comment,其中包含双引号+解释..现在使用引号并且页面的其余部分呈现正常。

但我真的不喜欢我的解决方案,感觉不太稳固

1 个答案:

答案 0 :(得分:0)

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

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

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

  • 增加页面缓冲区的大小,以便稍后提交响应
  • 重构页面,以便更早地执行触发错误的代码