代码之家  ›  专栏  ›  技术社区  ›  Josh Hinman

JSP:即使我不能显示错误页上的代码,我怎么还能让它运行呢?

  •  3
  • Josh Hinman  · 技术社区  · 16 年前

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

    如果在错误发生时输出已经开始发送到客户机,那么它的效果就不好了。在这种情况下,我们得到:

    SEVERE: Exception Processing ErrorPage[exceptionType=java.lang.Exception, location=/error.jsp]
     java.lang.IllegalStateException
    

    我相信发生这个错误是因为我们不能在输出已经开始之后将请求重定向到错误页。我使用的解决方法是在特别大的JSP页面上增加缓冲区大小。但是我正在尝试编写一个可以应用于现有应用程序的通用错误处理程序,我不确定遍历数百个JSP页面以确保它们的缓冲区足够大是否可行。

    3 回复  |  直到 16 年前
        1
  •  2
  •   David Smiley    15 年前

    如果您已经开始向客户端发送数据,则不会使用errorPage。 我所做的是使用JavaScript回调来检查不完整的页面,然后重定向到错误页面。在includes标题或其他内容的页面开头,将布尔javascript变量初始化为false,并注册onload处理程序以检查状态并重定向到错误页面。

    <script type="text/javascript">
            var pageLoadSuccessful = false;//set to true in footer.jsp
            dojo.addOnLoad(function(){
                if (!pageLoadSuccessful) window.location = "<c:url value="/error.do" />";
            });
    </script>
    

    <script type="text/javascript">
        pageLoadSuccessful = true;//declared in header.jsp
    </script>
    
        2
  •  1
  •   Eric Wendelin    16 年前

    您是否尝试过使用<%@page errorPage=“/myerrorpage.jsp”%>指令?

    我想那可以解决你的问题。唯一的问题是,您需要以某种方式将它包含在每个JSP中。

        3
  •  1
  •   Community c0D3l0g1c    7 年前

    事实上,这个问题表明您在JSP中使用了scriptlet。这是一个 bad practice 真实的 java类,以便在JSP中只使用taglibs/EL。在servlet/过滤器中,您可以在将请求转发到JSP之前完美地处理异常。