jsp的exception技术整理

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的运行效果

你可能感兴趣的:(jsp的exception技术整理)