JSP的异常处理
以下内容引用自http://wiki.jikexueyuan.com/project/jsp/exception-handling.html:
当写JSP代码的时候,有可能会留下一个编码错误,并且它会出现在代码的任何一个部分。在JSP代码中会有以下类型的错误:
检测异常(Checked exceptions):一个检测异常通常是一个用户错误或者是一个有程序员无法预见的错误引起的异常。例如,如果要打开一个文件,但是无法找到该文件,这时就会出现异常。这些异常在编译时不能简单的忽略掉。
运行异常(Runtime exceptions):一个运行异常可能是程序员本来可以避免的一个异常。和检测异常相反,运行异常在编译时可以被忽略。
- 错误(Errors):这原本不是异常,是超出用户或者程序员的控制而引起的问题。错误通常在代码中会被忽略,因为对一个错误能够做的很少。例如,如果一个堆栈发生溢出,那么就会出现一个错误。在编译时他们也会被忽略。
一、使用异常对象
异常对象是Throwable子类的一个实例(例如,java.lang.NullPointerException),它只能在错误页面是可用的。下面是Throwable类中可用的重要方法的列表。
| 方法 | 描述 |
|---|---|
| public String getMessage() |
返回发生异常的详细信息。这个消息是在Throwable构造函数里初始化的。 |
| public Throwable getCause() |
返回发生异常的原因,用一个Throwable对象表示。 |
| public String toString() |
返回与getMessage()相连接的类名。 |
| public void printStackTrace() |
输出toString()和堆栈跟踪的System.err的结果,错误输出流。 |
| public StackTraceElement [] getStackTrace() |
返回一个数组,其中包含堆栈跟踪的每一个元素。索引值为0的元素表示调用堆栈的顶部, 数组中最后一个元素在调用堆栈的底部代表方法。 |
| public Throwable fillInStackTrace() |
用当前的堆栈跟踪填满Throwable对象的堆栈跟踪,添加任何先前的堆栈跟踪信息。 |
JSP会给一个选项来指定每一个JSP的错误页面。不管何时页面抛出一个异常,JSP容器都会自动的调用错误页面。
下面是main.jsp中一个特定错误页面的例子。为了创建一个错误页面,使用<%@ page errorPage=”xxx”%>指令。
<%@ page errorPage="ShowError.jsp" %> <html>
<head>
<title>Error Handling Example</title>
</head>
<body>
<%
// Throw an exception to invoke the error page
int x = 1;
if (x == 1)
{
throw new RuntimeException("Error condition!!!");
}
%>
</body>
</html>
现在需要写一个错误处理的JSP:ShowError.jsp,下面给出了代码。注意,错误处理页面包括<%@ page isErrorPage=”true”%>指令。这个指令使JSP编译器生成异常实例变量。
<%@ page isErrorPage="true" %>
<html>
<head>
<title>Show Error Page</title>
</head>
<body>
<h1>Opps...</h1>
<p>Sorry, an error occurred.</p>
<p>Here is the exception stack trace: </p>
<pre>
<% exception.printStackTrace(response.getWriter()); %>
</pre>
</body>
</html>
现在试图访问main.jsp,它将会生成如下结果:

二、在错误页面使用JSTL标签
可以使用JSTL标签来编写一个错误页面ShowError.jsp。这个页面和上面的例子中几乎使用的是相同的逻辑,但是它有更好的结构,并且他提供了更多的信息:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page isErrorPage="true" %>
<html>
<head>
<title>Show Error Page</title>
</head>
<body>
<h1>Opps...</h1>
<table width="100%" border="1">
<tr valign="top">
<td width="40%"><b>Error:</b></td>
<td>${pageContext.exception}</td>
</tr>
<tr valign="top">
<td><b>URI:</b></td>
<td>${pageContext.errorData.requestURI}</td>
</tr>
<tr valign="top">
<td><b>Status code:</b></td>
<td>${pageContext.errorData.statusCode}</td>
</tr>
<tr valign="top">
<td><b>Stack trace:</b></td>
<td>
<c:forEach var="trace" items="${pageContext.exception.stackTrace}">
<p>${trace}</p>
</c:forEach>
</td>
</tr>
</table>
</body>
</html>
现在试图访问main.jsp,它将会生成如下结果:

三、使用Try...Catch块
如果想要在同一个页面中处理错误,使用一些动作而不是释放一个错误页面,那么可以利用Try...catch块。
下面显示的是如何使用try...catch块的一个简单的例子。将下面的代码放到main.jsp中:
<html>
<head>
<title>Try...Catch Example</title>
</head>
<body>
<%
try{
int i = 1;
i = i / 0;
out.println("The answer is " + i);
}
catch (Exception e){
out.println("An exception occurred: " + e.getMessage());
}
%>
</body>
</html>
现在试图访问main.jsp,它将会生成如下结果:

测试工程:https://github.com/easonjim/5_java_example/tree/master/jspbasics/test22
JSP的异常处理的更多相关文章
- JSP的执行过程及其异常处理机制
1.JSP的执行过程 虽然JSP感觉上很像一般的HTML网页,但事实上它是以Servlet的形式被运行的.因为JSP文件在第一次运行的时候会先解释成Servlet源文件,然后编译成Servle ...
- SpringMVC09异常处理和类型转化器
public class User { private String name; private Integer age; public String getName() { return name; ...
- JavaWeb从0开始学(二)-----JSP基本语法与编译指令
在上一节中我们学习了如何搭建一个简单的Web应用,并且已经知晓了一个JSP页面主要由静态的HTML内容和动态的Java脚本共同组成.JSP的基本语法共有JSP注释.JSP声明.输出JSP表达式与JSP ...
- JSP和JavaBean总结
JSP JSP全名为Java Server Pages,即java服务器页面,其根本是一个简化的Servlet设计.它是在传统的网页HTML文件中插入Java代码,从而形成JSP文件. JSP注释分为 ...
- 【SpringMVC学习07】SpringMVC中的统一异常处理
我们知道,系统中异常包括:编译时异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发.测试通过手段减少运行时异常的发生.在开发中,不管是dao层 ...
- Java基础——JSP(一)
一.JSP的由来 在很多动态网页中,绝大多部分内容是不变的,只有局部内容需要动态产生和改变.例如, 一个新闻的浏览次数,只有这个次数是动态改变的,而Servlet程序返回客户端的代码全是java程序动 ...
- jsp的九大内置对象(查询资料,搬砖所得)
此笔记大部分摘自大神https://www.cnblogs.com/SimonHu1993/,部分通过网上搜寻补充. 1.Request内置对象(类型:HttpServletRequest 表示 ...
- jsp 的 3 个编译指令
JSP 的编译指令是通知 JSP 引擎的消息,它不直接生成输出. 常见的编译指令有如下三个: 1.page:该指令是针对当前页面的指令 2.include:用于指定包含另一个页面 3.taglib:用 ...
- JSP/Servlet Web 学习笔记 DayThree
JSP内置对象 使用JSP语法可以存取这些内置对象来执行JSP网页的Servlet环境相互作用.内置对象其实是由特定的Java类所产生的.每一种内置对象都映射到一个特定的Java类或者端口,在服务器运 ...
随机推荐
- Objective -C Memory Management 内存管理 第一部分
Objective -C Memory Management 内存管理 第一部分 Memory management is part of a more general problem in pr ...
- Farseer.net轻量级开源框架 中级篇:BasePage、BaseController、BaseHandler、BaseMasterPage、BaseControls基类使用
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: UrlRewriter 地址重写 下一篇:Farseer.net轻量级开源框架 中 ...
- jQuery 价格显示 前面位数与后面两位显示不同样式(一大一小)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- OpenMP入门教程(三)
承接前面两篇,这里直接逐一介绍和使用有关OpenMP的指令和函数 Directives 1.for 作用:for指令指定紧随其后的程序的循环的迭代必须由团队并行执行,只是假设已经建立了并行区域,否则它 ...
- PHP 之pthreads多线程模块在windows下的安装
一.查看phpinfo 二.下载pthreads扩展 下载地址:http://windows.php.net/downloads/pecl/releases/pthreads/ 三.复制文件 复制ph ...
- 流行-Manifold【0】-维基百科中文版本解释
- eclipse修改xml文件默认的打开方式为XML Editor
1.菜单:Window -> Preferences -> General -> Editors -> File Associations ...
- Linux中CentOS网络配置以及与Xshell建立远程连接
为centos配置网络 (1)第一步 点开虚拟机的设置,如下图做相关的设置: 网络连接要选择桥接模式,其他的勾选就按照上图的即可,勾选完成点击确定. (2)第二步 点击VMware的编辑选项,找到“虚 ...
- U盘启动盘制作工具(安装Linux)
2018-09-15 17:36:42 1. Etcher 官网:https://etcher.io/ 资料来源:https://linuxmint-installation-guide.readt ...
- PDO、PDOStatement、PDOException
最近在学PDO 比较详细的资料 出处:http://blog.csdn.net/hsst027/article/details/23682003 PDO中包含三个预定义的类,它们分别是PDO.PDO ...