【jsp exception】如何处理jsp页面的错误

根据jsp对错误的处理方式不同可以将其分为局部异常处理和全局异常处理。局部异常处理适用于个别jsp页面,当这些页面发生错误后,采取特殊的处理方式;全局异常处理适用于所有jsp页面,当所有页面发生某些指定错误后,采取同一方式处理。

 

 

(1)局部异常处理

局部异常处理主要涉及jsp页面page指令的 errorPage 和 isErrorPage 属性

errorPage 属性用于设置错误处理的jsp页面,如果当前jsp页面内产生了未被捕获的异常,则跳转到errorPage指定的jsp页面进行处理。

isErrorPage 属性用于错误处理页面,只有将jsp页面中的 isErrorPage 属性设置为true,此jsp页面才能被用作错误处理页面,在该jsp的代码中才可以使用exception饮食对象(!不设isErrorPage 会报错!)

 

 

错误处理页面dealError.jsp

<%@ page contentType="text/html;charset=gb2312" import="java.util.*" %>
<%@ page import="java.io.PrintWriter"%>
<%@ page isErrorPage="true" %>

<html>
  <body>
    <% 
        out.println("out of deal error!\r\n");
          exception.printStackTrace(new PrintWriter(out));
    %>
  </body>
</html>

 

 

业务处理页面divide.jsp

<%@ page contentType="text/html;charset=gb2312" import="java.util.*" %>
<%@ page errorPage="dealError.jsp" %>

<html>
  <body>
    <% 
        out.println("before exception!");
        int x= 1/0;
        out.println("after execption!");
    %>
  </body>
</html>

 

 

运行结果:

out of deal error! 
java.lang.ArithmeticException: / by zero at org.apache.jsp.divide_jsp._jspService(divide_jsp.java:71) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at 

...

...

 

 

 

 

(2) 全局异常处理

通过在web.xml 文件中添加<error-page>配置,可以为整个web应用程序设置异常处理页面。每个<error-page>元素用于设置一种异常或者一个HTTP错误状态码的处理页面。

 

web.xml 中的示例代码如下:

<!--   依据HTTP错误状态码设置错误处理页面 -->
  <error-page>
      <error-code>404</error-code>
      <location>/errorhandler.jsp</location>
  </error-page>

<!--     依据异常类型设置错误处理页面 -->
    <error-page>
        <exception-type>javax.servlet.ServletException</exception-type>
        <location>/errorhandler.jsp</location>
    </error-page>

 

在上述代码中,<error-page>元素中的子元素<exception-type> 和<error-code>,两者是二选一的关系

 

错误处理页面errorhandler.jsp

<%@ page contentType="text/html;charset=gb2312" import="java.util.*" %>
<%@ page isErrorPage="true" %>

<html>
  <body>
     错误码: <%=request.getAttribute("javax.servlet.error.status_code") %><br/>
     讯息:     <%=request.getAttribute("javax.servlet.error,message") %> <br/>
     例外:     <%=request.getAttribute("javax.servlet.error.exception_type") %><br/>
  </body>
</html>

 

 

运行结果(如servlet 中某一句前加一个~ 使其编译失败):

错误码: 500
讯息: null 
例外: class java.lang.Error

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。