(转)关于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 指令的属性isErrorPage为true,因为Error.jsp是专门用来处理错误的网页。设定page 指令的属性isErrorPage为true后,在Error.jsp里就可以使用exception异常类了。

由于在这个程序中并没有做一个窗体来输入两个数字,所以必须手动在URL后输入num1和num2的值,如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为空时系统会自动转到错误处理页面。

[color=red]总之,以下情况jsp会转到错误处理页面:

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

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

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

转自:[url]http://www.blogjava.net/kingace/archive/2008/07/24/217110.html[/url]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值