大家访问你的网站的时候并不想看到栈跟踪记录,而且他们也不想得到一个“404 NOT Found” 的标准错误。当然错误是在所难免的,你无法保证一个错误也没有,不过,至少你可以给用户一种更友好的错误响应页面。可以设计一个定制页面来处理,然后使用page指令配置错误页面。我们在tomcat的安装目录里webapps目录下创建一个testerror文件夹
指定的错误页面(errorPage.jsp)
代码如下:
<%@ page contentType="text/html;charset=GB2312" %>
<%@page isErrorPage=”true” % >
<html>
<head><title>百家拳软件教程网</title></head>
<body>
这是错误页面
</body>
</html>
抛出异常的坏页面(badPage.jsp)
<%@ page contentType="text/html;charset=GB2312" %>
<%@page errorPage =”errorPage.jsp”%>
<html>
<head><title>百家拳软件教程网</title></head>
<body>
<%int i=10/0;%>
</body>
</html>
当你请求badPage.jsp页面的时候,你可以在地址栏里敲入http://localhost:8080/tests/badPage.jsp .这是你就可以看到一个错误页面。
上面的方法是用page指令来制定要使用的错误,如果我想根据不同的错误使用不同的错误页面,那该怎么办呢?我们可以在web-xml中为web应用声明错误页面,甚至可以为不同的异常类型或http错误代码类型(404,500)配置不同的错误页面,容器使用<error-page>在web-xml配置作为默认的错误页面,但是如果jsp有一个明确的errorPage page指令,容器就会优先使用该指令。这样就可以根据产生的错误的问题类型向客户显示不同的错误页面了。我们举3个声明方式,这些都是写在web-xml里的
第一个,声明一个普通的错误类型,它应用于所有web的应用,不只是jsp。你可以在单个jsp中加入一个包括errorPage属性的page指令来覆盖这个设置。
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/errorPage.jsp</location>
</error-page>
我们可以将badPage.jsp中的<%@ page errorPage%>去掉在从新调试。建一个jsp叫badPage1.jsp 代码如下
<%@ page contentType="text/html;charset=GB2312" %>
<html>
<head><title>百家拳软件教程网</title></head>
<body>
<%int i=10/0;%>
</body>
</html>
因为他和badPage.jsp都指向同一个错误页面,所以你可能看到的页面提示都是“这是错误页面”,这样你就可以当测试badPage1.jsp时 将“这是错误页面”改成“此页面以错误“或者是别的。
我们在浏览器的地址栏里敲入http://localhost:8080/tests/badPage1.jsp可以看到运行后的结果
第二个,声明一个明确异常的错误页面,比如说是只要存在Exception异常时才调用自己的页面Exception.jsp。如果既有这个声明,又有上面的声明,那么只要不是Exception异常,其他异常都会导致调用“errorPage.jsp”
<error-page>
<exception-type>java.lang.THrowable</exception-type>
<location>/ExceptionPage.jsp</location>
</error-page>
错误页面实际上就是一个处理异常的jsp,所以容器为这个页面提供了一个额外的exception对象。你可能不想向用户显示异常,但这个异常你可以明确得到。你可以这样做我们可以将上面的错误页面(errorPage.jsp)修改一下,建一个新的errorPage1.jsp代码如下:
<%@page isErrorPage=”true”% >
<%@ page contentType="text/html;charset=GB2312" %>
<html>
<head><title>百家拳软件教程网</title></head>
<body>
我能抓到这个异常,这个异常是:${pageContext.exception}
</body>
</html>
他相应的badPage2.jsp代码如下:
<%@ page contentType="text/html;charset=GB2312" %>
<%@page errorPage ="errorPage1.jsp"%>
<html>
<head><title>百家拳软件教程网</title></head>
<body>
<%int i=10/0;%>
</body>
</html>
我们可以用EL隐式对象${pageContext.exception}来获得具体的异常。
我们在浏览器的地址栏里敲入http://localhost:8080/tests/badPage2.jsp可以看到运行后的结果
Jsp的页面错误处理,我就给大家讲这么多,更多的知识还得大家自己去研究学习。
例子下载
下一节,我们将讲一讲jsp中权限设置的问题。