jsp的exception技术整理

    技术2022-05-19  17

    exception对象的一个教程

    JSP引擎在执行编译好的代码时,有可能会抛出异常。exception对象表示的就是JSP引擎在执行代码时抛出的异常。

     

    如果你希望在JSP程序中使用exception对象,那么你必须定义page编译指令的isErrorPage属性值等于true,否则不能够使用exception对象。

    exception对象可以使用的主要方法如下所示。

    l        getMessage():该方法返回错误信息。

    l        printStackTrace():该方法以标准错误的形式输出一个错误和错误的堆栈。

    l        toString():该方法以字符串的形式返回一个对异常的描述。

    exception对象可以配合后面章节将要介绍的page编译指令元素一起使用,通过指定某一个JSP程序为错误处理程序,把所有的错误/异常都集中到那个程序进行处理,这样可以使得整个程序的健壮性得到加强,也使得程序的流程更加简单明晰,这也是JSP比ASP、PHP优越的地方之一。

    如果某个JSP页面在执行的过程中出现了错误,那么JSP引擎会自动产生一个异常对象,如果这个JSP页面指定了另一个JSP页面为错误处理程序,那么JSP引擎会将这个异常对象放入到request对象中,传到错误处理程序中,在错误处理程序里,因为page编译指令的isErrorPage属性的值被设为true,那么JSP引擎会自动声明一个exception对象,这个exception对象从request对象所包含的HTTP参数中获得:

    Throwable exception=(Throwable)request.getAttribute

         ("javax.servlet.jspException");

    事实上,javax.servlet.jspException是JSP引擎为exception对象所取的名字,并不存在所谓的jspException类,exception对象实际上是java.lang.Throwable类的实例对象。

    下面的程序4-9和程序4-10分别演示了exception对象的使用方法。程序4-9中首先引发一个Java异常事件,使得当前JSP页面定向到指定的错误处理程序——程序4-10,并且在该页面中将错误信息输出。

    【程序4-9】errorthrow1.jsp

    01        <%@ page language="java" import="java.util.*"

    02             pageEncoding="ISO-8859-1" errorPage=”error.jsp”%>

    03        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    04        <html>

    05        <body>

    06        <%

    07            int result=1/0;

    08        %>

    09        </body>

    10        </html>

    程序4-9在执行时,将会引发一个除数为零的异常,并指定该异常由程序4-10进行处理。

    【程序4-10】error.jsp

    01        <%@ page language="java" import="java.util.*"

    02             pageEncoding="ISO-8859-1" isErrorPage="true"%>

    03        <%

    04        String path = request.getContextPath();

    05        String basePath = request.getScheme() + "://" + request.getServerName() + ":" +

    06             request.getServerPort()+path+"/";

    07        %>

    08        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    09        <html>

    10        <head>

    11          <title>My JSP 'error.jsp' starting page</title>

    12        </head> 

    13        <body>

    14        Error Message:getMessage() Method<br>

    15        <%

    16            out.println(exception.getMessage());

    17        %>

    18        <br><br>

    19        Error String:toString() Method<br>

    20        <%

    21            out.println(exception.toString());

    22        %>

    23        </body>

    24        </html>

    程序4-10使用exception对象的getMessage()方法和toString()方法输出错误的具体信息。程序4-9和程序4-10的运行效果如图4-9所示。

    图4-9  errorthrow1.jsp的运行效果

    如果在程序4-9中使用try、catch块捕捉异常事件的发生,那么就不会有异常对象被传递给error.jsp页面程序,也就是说错误处理程序没有被调用,修改后如程序4-11所示。

    【程序4-11】errorthrow2.jsp

    01        <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

    02        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    03        <html>

    04        <head>

    05          <title>My JSP 'error.jsp' starting page</title>

    06        </head>

    07        <body>

    08        <%

    09            try

    10            {

    11                int result=1/0;

    12            }

    13            catch(Exception e)

    14            {

    15                out.println(“errorthrow2.jsp:”+e.getMessage());

    16            }

    17        %>

    18        </body>

    19        </html>

    程序4-11的运行效果如图4-10所示,很明显,error.jsp页面并没有被调用。

    图4-10  errorthrow2.jsp的运行效果


    最新回复(0)