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类或者端口,在服务器运 ...
随机推荐
- Node.js——获取文件上传进度
https://juejin.im/post/5a77a46cf265da4e78327552?utm_medium=fe&utm_source=weixinqun
- 深入理解java虚拟机---垃圾收集器和分配策略-1
博文重点: 学习目标:哪些内存需要回收 什么时候回收 如何回收 在基于概念讨论的模型中,主要对Java堆和方法区进行讨论. why?:一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个 ...
- PHP运算符考察点
PHP运算符优先级 运算符优先级指定了两个表达式绑定得有多"紧密".例如,表达式 1 + 5 * 3 的结果是 16 而不是 18 是因为乘号(*)的优先级比加号(+)高.必要时可 ...
- CAD交互绘制多段线(com接口)
多段线又被称为多义线,表示一起画的都是连在一起的一个复合对象,可以是直线也可以是圆弧并且它们还可以加不同的宽度. 主要用到函数说明: _DMxDrawX::DrawLine 绘制一个直线.详细说明如下 ...
- 20面向对象三特征 之继承 方法重写 super
继承是:多个类有重复内容,把重复内容放到一个新类中,就可以通过extends关键词去让原来的类和新类产生继承关系,子类只能拿到父类一部分信息.通过extends关键词去指明类与类之间的关系,一个父类可 ...
- linux学习系列博客地址汇总
2018-09-28 16:03:43 CentOS7 yum命令:这是一个用来管理rpm包进行自动化安装的C/S模式的一个程序. CentOS7(无图形界面)支持中文显示的办法:系统安装好之后,有可 ...
- 在springBoot的控制台打印sql语句
在springBoot+Mybatis日志显示SQL的执行情况的最简单方法就是在properties新增: properties形式 logging.level.com.eth.wallet.mapp ...
- 每日命令:(13)more
more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会 ...
- python中的句柄操作
python中的句柄操作 制作人:全心全意 通过窗口标题获取句柄 import win32gui hld = win32gui.FindWindow(None,u"Adobe Acrobat ...
- Python Pandas库的学习(一)
今天我们来学习一下Pandas库,前面我们讲了Numpy库的学习 接下来我们学习一下比较重要的库Pandas库,这个库比Numpy库还重要 Pandas库是在Numpy库上进行了封装,相当于高级Num ...