关于JSP的错误页面处理

 

关于JSP中的错误页面处理

 

通常JSP 在执行时,在两个阶段下会发生错误。
JSP
网页 → Servlet
Servlet
类处理每一个请求时
   
在第一阶段时,产生的错误我们称为Translation Time Processing Errors;在第二阶段时,产生的错误我们称为Client Request Time Processing Errors。接下来我们针对这两个阶段产生错误的原因和处理方法,进行介绍。

    1
Translation Time Processing Errors
    Translation Time Processing Errors
产生的主要原因:我们在撰写JSP时的语法有错误,导致JSP Container 无法将JSP 网页编译成Servlet 类文件( .class),例如:
500 Internal Server
Error
500 是指HTTP 的错误状态码,因此是Server Error

   
通常产生这种错误时,可能是JSP 的语法有错误,或是JSP Container 在一开始安装、设定时,有不适当的情形发生。解决的方法就是再一次检查程序是否有写错的,不然也有可能是JSPContainer bug

 

    2 Client Request Time Processing Errors
    Client Request Time Processing Errors
错误的发生,往往不是语法错误,而可能是逻辑上的错误,简单地说,你写一个计算除法的程序,当用户输入的分母为零时,程序会发生错误并抛出异常(Exception),交由异常处理(Exception Handling)机制做适当的处理。对于这种错误的处理,我们通常会交给errorPage 去处理。下面举个例子
:
使用errorPage 的范例程序
ErrorPage.jsp

<%@ page contentType="text/html;charset=GB2312" errorPage="Error.jsp" %> //
设置Error.jsp页为本页的错误处理页

<html>
<head>
<title>CH4 - ErrorPage.jsp</title>
</head>
<body>
<h2>errorPage
的范例程序</h2>
<%!
private double toDouble(String value)
{
return(Double.valueOf(value).doubleValue());
}
%>
<%
double num1 = toDouble(request.getParameter("num1"));
double num2 = toDouble(request.getParameter("num2"));
%>
您传入的两个数字为:<%= num1 %>
<%= num2 %><br>
两数相加为
<%= (num1+num2) %>
</body>
</html>
    ErrorPage.jsp
程序中,我们使用page 指令中的errorPage 属性,告诉JSP Container,如果在程序中有错误产生时(指的是servlet运行时产生的错误或显示用throw抛出的异常),会自动交给Error.jsp 处理。


Error.jsp
<%@ page contentType="text/html;charset=GB2312" isErrorPage="true" %>   //
设置该页为错误处理页
<%@ page import="java.io.PrintWriter" %>
<html>
<head>
<title>CH4 - Error.jsp</title>
</head>
<body>
<h2>errorPage
的范例程序</h2>
<p>ErrorPage.jsp
错误产生:
<I><%= exception %></I></p><br>
<pre>
问题如下:<% exception.printStackTrace(new PrintWriter(out)); %> //输出错误的原因

</pre>
</body>
</html>

    Error.jsp
主要处理ErrorPage.jsp 所产生的错误,所以在ErrorPage.jsp page 指令的属性errorPage设为Error.jsp,因此,若ErrorPage.jsp有错误发生时,会自动转到Error.jsp来处理。Error.jsp 必须设定page 指令的属性isErrorPagetrue,因为Error.jsp是专门用来处理错误的网页。设定page 指令的属性isErrorPagetrue后,在Error.jsp里就可以使用exception异常类了。

   
由于在这个程序中并没有做一个窗体来输入两个数字,所以必须手动在URL后输入num1num2的值,如http://localhost:8080/ErrorPage.jsp?num1=100&num2=245。当ErrorPage.jsp 产生错误时(如加数为字符串型),就会交由Error.jsp 去处理,所以我们看到的结果,不

再是原始的服务器提示的乱七把糟的错误提示,将是执行Error.jsp 后的结果。

 

jsp中显式地抛出异常时,系统也会转到错误处理页面:

<%@page language="java" contentType="text/html;charset=GBK" import= "java.util.* " errorPage="exception.jsp"

%>

<jsp:useBean id="user" scope="session" class="S_userObj"/>

<% 

       if(user= =null)

throw new Exception("您没有登陆或者登陆超时,请重新登陆"); 

。。。 。。。

user为空时系统会自动转到错误处理页面。

总之,以下情况jsp会转到错误处理页面:

前提:jsp成功的转换到了servlet,转换过程中没有发生错误。

servlet运行时,程序中碰到异常。

servlet运行时,程序控制转到了显式抛出的异常。例如:if(…) throw new exception();

 

posted on 2008-07-24 10:21 chenkai 阅读(3942) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(2)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜