web.xml中的错误页面

时间:2011-05-25 19:27:56

标签: jsp tomcat servlets

我遇到了这样的问题:我在java.lang.Exception类型的web.xml中设置了dafault错误页面,因此必须在servlet和jsp中的所有异常中显示。但是当我想测试这个页面时(我关闭了连接)它在浏览器中没有出现。在测试的servlet中我使用数据库,所以如果没有连接,它将抛出异常。在servlet中,我捕获了这个异常和throw new ServletException()。也是在catch块中我首先记录消息然后抛出异常。那么为什么我的tomcat没有显示这个错误页面?而不是它显示空白页面,在服务器输出中我可以看到这些错误消息

修改

 <error-page>
        <exception-type>java.lang.Exception</exception-type>
        <location>/errorPages/InternalError.jsp</location>
    </error-page>

我在/ errorPages中保存错误页面 以及必须显示的页面名为InternalError.jsp

此页面必须在移动到jsp页面后显示,该页面使用El显示数据库中的数据,该数据位于会话中的jsp fall throw对象中

1 个答案:

答案 0 :(得分:2)

当servlet或导致异常的JSP已经提交响应时,您将在这种情况下获得空白页。换句话说,当HTTP响应头已经被发送到webbrowser时。这是不归的要点。

为了防止这种情况,您需要确保只有在所有业务代码完成其工作时才开始写入响应(更好的是,不要在servlet中执行此操作,而只是转发对于JSP)以及您的JSP 包含任何单行业务代码(通常由 scriptlets <% %>表示)。

因此,如果您在servlet中执行此操作

response.getWriter().write("blah");
throw new ServletException("epic fail");

或者当JSP“中途”抛出异常时

<p>Some HTML</p>
<% throw new ServletException("epic fail"); %>
<p>Some more HTML</p>

然后风险很大,你得到一个空白页面。