9.3.4 <c:catch>标签

优质
小牛编辑
130浏览
2023-12-01

<c:catch>标签用于捕获标签体抛出的java.lang.Throwable异常。<c:catch>标签的语法格式如下:

<c:catch [var="varName"]>

    nested actions

</c:catch>

<c:catch>标签只有一个var属性,用来表示标签体抛出的异常对象。var属性是String类型,不支持动态属性值。如果指定var属性,<c:catch>标签会以var属性指定的名称将异常对象保存在page域中。如果未指定var属性,则<c:catch>标签只捕获异常,不保存异常对象。<c:catch>标签可以捕获任何标签或Java代码抛出的异常。

catch.jsp页面是一个演示<c:catch>标签的例子,代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
    java.util.Calendar cal = java.util.Calendar.getInstance();
    request.setAttribute("cal", cal);
%>

<c:catch var="myException">
    <!--  错误设置了Calendar对象的time属性值,将抛出异常  -->
    <c:set target="${cal}" property="time" value="abcd" />
</c:catch>

<!--  输出异常对象的相应信息  -->
myException:
<c:out value="${myException}" />
<br>
myException.getMessage():
<c:out value="${myException.message}" />
<br>
myException.getCause():
<c:out value="${myException.stackTrace}" />

在上面的程序中,由于使用<c:set>标签将Calendar对象的time属性值设置成了String类型的值,因此会抛出一个异常。在<c:catch>标签结束后,使用了<c:out>标签和EL输出了异常对象的相应属性值。

在浏览器地址栏中输入如下的URL:

http://localhost:8080/demo/chapter9/catch.jsp

浏览器显示的效果如图9.5所示。

05

图9.5 <c:catch>标签的演示效果