Java Web开发实战—JSP详解—JSP概述、JSP脚本元素、JSP指令元素、JSP动作元素、
时间:2023-08-29 19:48:01 | 来源:网站运营
时间:2023-08-29 19:48:01 来源:网站运营
Java Web开发实战—JSP详解—JSP概述、JSP脚本元素、JSP指令元素、JSP动作元素、JSP内置对象:本文主要讲解了JSP的相关知识,包括JSP的概念、工作原理,JSP脚本元素、JSP指令元素、JSP动作元素、JSP内置对象等。通过学习,大家要能够理解JSP在Web开发中的角色,理解JSP的工作原理,掌握JSP的语法,熟练应用指令元素、动作元素、内置对象等完成JSP开发。
JSP概述²
JSP简介JSP的全称是Java Server Pages,是为了简化Servlet的工作而出现的动态网页开发技术。它在HTML代码中嵌入Java代码片段和JSP标签,构成JSP页面。其中,HTML代码用于显示静态内容,Java代码片段用于显示动态内容,这就避免了直接使用Servlet逐句响应HTML页面的烦琐,同时降低了代码冗余。
例如,现在编写一个登录程序,要求该程序能够根据用户名生成相应的欢迎信息。当登录用户为xiaoqian时,页面显示“Hello,xiaoqian”,当登录用户为xiaofeng时,页面显示“Hello,xiaofeng”,下面将通过Servlet和JSP分别实现这个功能,步骤如下。
(1)打开Eclipse,新建Web工程chapter09,在工程chapter09的WebContent目录下创建login.html,具体代码如书中例9.1所示。
2)在工程chapter09的src目录下创建com.qfedu.example包,在该包下新建一个Servlet类TestJSP01,具体代码如书中例9.2所示。
(3)在工程chapter09的WebContent目录下新建jsp目录,右击jsp目录,在弹出的菜单中选择NEW→JSP File选项,弹出New JSP File窗口,如图所示。
(4)在File name文本框中输入hello.jsp,单击Finish按钮完成创建。hello.jsp创建完成后的界面如图所示。
(5)在hello.jsp文件中的<body>元素中输入如书中例9.3所示。
代码中,“<%@ page %>”是JSP文件的一个指令,用于设置JSP文件的页面属性,其中,language属性指定所使用的语言,contentType属性指定服务器响应的内容类型,charset属性指定JSP页面的编码。JSP文件中大部分是HTML代码,在HTML代码的<body>元素中,使用<% %>声明一段Java脚本,脚本使用request对象获取表单提交的用户信息。
(6)将工程chapter09添加到Tomcat服务器中,启动Tomcat服务器,打开浏览器,访问http://localhost:8080/chapter09/login.html,浏览器显示的页面如图1所示。
(7)在“用户名”文本框中输入xiaoqian,在“密码”文本框中输入12345,单击“提交”按钮,浏览器显示的页面如图所示。
从图中可以看出,TestJSP01以HTML页面的形式将用户信息返回。通过分析发现,TestJSP01在获取表单提交的信息后,必须调用PrintWriter类的println()方法,才能把结果响应为客户端能够解析的HTML页面。
(8)打开login.html文件,将<form>元素的action属性修改为:action=“/chapter09/jsp/hello.jsp”,重启浏览器,重新访问login.html,浏览器出现如图1所示的页面,在对应的文本框中分别输入xiaoqian和12345,单击提交按钮。
浏览器显示的页面如图所示。
从图中可以看出,hello.jsp实现了和TestJSP01类同样的功能,它不仅直接兼容HTML代码,还能获取Java代码片段中传输的内容。
(9)点击浏览器菜单栏中的“查看”→“源文件”命令,这时可看到JSP页面执行结果的源代码,如图所示。
从图中可以看到,hello.jsp页面中的<% %>脚本被解释成了HTML内容。
²
JSP工作原理JSP的引入避免了Servlet编写页面的烦琐,并且降低了开发人员的编码量。为了更好地使用JSP进行Web开发,大家必须深入理解JSP的工作原理。
作为一种服务器端的页面开发技术,JSP运行在服务器中,它本质上是一种Servlet类,因此要被转换成Servlet类后才能编译运行。当客户端访问JSP页面时,服务器的处理过程如图所示。
图 JSP页面的执行过程
从图中可以看出JSP的执行过程,具体来讲,可以细分为以下几个步骤。
(1)客户端向服务器发送请求,访问JSP页面。
(2)服务器接到请求后检索对应的JSP页面,如果该JSP页面是第一次被请求,那么服务器会将此页面中的静态数据(HTML文本)和动态数据(Java元素)全部转化为Java代码,使JSP文件转换成一个Servlet类文件。在转换过程中,服务器若发现JSP文件中存在语法错误,则会中断转换过程,并向客户端返回出错信息。
(3)服务器将转换后的Servlet源代码编译成字节码文件(.class),对于Tomcat服务器而言,生成的字节码文件默认存放在Tomcat安装目录的work目录下。
(4)编译后的字节码文件被加载到内存中执行,并根据用户的请求生成HTML格式的响应内容。
(5)服务器将响应内容发送回客户端。
这里要注意的是,Tomcat服务器能够自动检测JSP页面的改动。当同一个JSP页面再次被请求时,只要该JSP页面没有被修改,服务器就会直接调用已装载的字节码文件,不会执行转换和编译的过程,如果该JSP页面被修改,那么服务器会重新执行转换、编译、执行的整个过程。
²
JSP基本结构JSP页面就是带有JSP元素的常规Web页面,它由模板文本和JSP元素组成。
模板文本主要是指HTML代码,它的内容是固定的,既不会控制程序的流程,也不影响程序运行的结果。JSP元素是指JSP中的Java部分,它能够影响程序的流程,包括JSP脚本元素、JSP指令以及JSP动作元素等。
在处理一个JSP页面请求时,模板文本和JSP元素生成的内容会合并,合并后的结果作为响应内容发送给浏览器。
JSP脚本元素脚本元素是JSP中使用最频繁的元素,它允许开发者将Java代码片段添加到JSP页面中。所有的可执行的Java代码,都可以通过JSP脚本来执行。JSP脚本元素包括表达式、脚本片段、声明和注释等。
²
JSP表达式JSP表达式可以直接把Java的表达式结果输出到JSP页面中。因为网页中显示的文字都是字符串,所以表达式的最终运算结果将被转化为字符串类型。JSP表达式的语法格式如下。
<%= 表达式 %>
其中,表达式必须能够直接求值,“<%=”是一个完整的符号,“<%” 和“=”之间不能有空格,表达式结尾处不加分号。
接下来通过一个实例来演示JSP表达式的使用,具体步骤如下。
(1)打开Eclipse,选择工程chapter09,在WebContent目录的jsp目录下新建test01.jsp。
(2)打开浏览器,访问http://localhost:8080/chapter09/jsp/test01.jsp,浏览器显示的页面如图所示。
从图中可以看出,test01.jsp成功地返回表达式的值。
²
JSP脚本片段JSP脚本片段是指用“<%”和“%>”括起来的一段Java代码。开发者需要在JSP中使用一段Java代码实现复杂操作时,就要用到JSP脚本片段。JSP脚本片段的语法格式如下。
<% Java 代码 %>
其中,Java代码可以包含变量、方法、表达式等。如果去掉“<%”和“%>”,Java代码的内容将被视为模板文本,直接返回到客户端。
接下来通过一个实例来演示JSP脚本片段的使用,具体步骤如下。
(1)在WebContent目录的jsp目录下新建test02.jsp。
(2)打开浏览器,访问http://localhost:8080/chapter09/jsp/test02.jsp,浏览器显示的页面如图所示。
从图中可以看出,test02.jsp成功地返回Java代码片段的执行结果。
²
JSP声明JSP声明用于声明变量和方法,在JSP的声明语句中定义的变量和方法将在JSP页面初始化时进行初始化。在JSP中声明语句的语法格式如下。
<%! 变量或方法的定义语句 %>
其中,“<%!”和“%>”标记之间用于放置Java变量或方法的定义语句。变量的类型可以是Java语言提供的任意类型,使用JSP声明语句定义的变量
将来会被转换成Servlet类中的成员变量,这些变量在整个JSP页面内都有效。使用JSP声明语言定义的方法将来会被转换成Servlet类中的成员方法,当方法被调用时,方法内定义的变量被分配内存,调用完毕后即释放所占的内存。
接下来通过一个实例来演示JSP声明的使用,具体步骤如下。
(1)在WebContent目录的jsp目录下新建test03.jsp。
(2)打开浏览器,访问http://localhost:8080/chapter09/jsp/test03.jsp,浏览器显示的页面如图所示。
从图中可以看出,test03.jsp成功返回变量a的值和方法getString()的执行结果。
(3)刷新浏览器,浏览器显示的页面如图所示。
从图中可以看出,变量a的值增加了1,这说明变量a被服务器转换为Servlet的成员变量,它只在创建Servlet实例时被初始化一次,此后,该变量的值一直被保存,直到该Servlet实例被销毁掉。
²
JSP注释在JSP页面中可以使用“<%-- --%>”的方式来注释, JSP注释的语法格式如下。
<%-- JSP注释 --%>
使用JSP注释之后,服务器把JSP文件转换成Servlet类时会忽略“<%-- ”和“--%>”之间的内容,不会把这些内容响应到客户端。
接下来通过一个实例来演示JSP注释的使用,具体步骤如下。
(1)在WebContent目录的jsp目录下新建test04.jsp,代码如书中例9.8所示。
(2)打开浏览器,访问http://localhost:8080/chapter09/jsp/test04.jsp,浏览器显示的页面如图所示。
从图中可以看出,test04.jsp没有返回JSP注释的内容。
(3)在浏览器的菜单栏选择“查看”→“源文件”命令,这时可看到JSP页面执行结果的源代码,如图所示。
从图中可以看出,JSP注释的内容没有在源文件中显示。
在JSP页面中,除了JSP注释之外,有时会出现HTML注释,HTML注释以“<!--”开始,以“-->”结束,中间包含的内容即为注释部分,其语法格式如下。
在JSP转换为Servlet类的过程中,服务器不会忽略HTML注释的内容,而是最终将这些内容响应给客户端。由于客户端能够“理解”HTML注释,因此HTML的内容不会被显示到浏览器页面。
接下来通过一个实例来演示HTML注释的使用,具体步骤如下。
(1)在WebContent目录的jsp目录下新建test05.jsp,代码如书中例9.9所示。
(2)打开浏览器,访问http://localhost:8080/chapter09/jsp/test05.jsp,浏览器显示的页面如图所示。
从图中可以看出,由于浏览器能够“理解”HTML注释,因此test05.jsp没有返回HTML注释的内容。
(3)在浏览器的菜单栏中选择“查看”→“源文件”命令,这时可看到JSP页面执行结果的源代码,如图所示。
从图中可以看出,HTML注释的内容显示在JSP页面执行结果的源代码中。
JSP指令元素JSP指令元素用于向服务器提供编译信息,例如编码方式、文档信息等。一般情况下,JSP指令元素在当前的整个页面范围内有效,且不向客户端产生任何输出。JSP指令元素包括page指令、include指令和taglib指令。
²
page指令page指令又被称为页面指令,用于设置和JSP页面相关的信息,如导入所需类包、指明输出内容类型等。page指令一般位于JSP页面的开头部分,其语法格式如下。
<%@ page 属性名1=”属性值1” 属性名2=”属性值2” ……%>
在page指令的属性中,除了import属性外,每种属性只能出现一次。page指令提供了一系列与JSP页面相关的属性,如表9.1所示。
表9.1 page指令的常用属性
属性名 | 说明 |
language | 指定JSP页面使用的脚本语言,默认为Java |
import | 指定导入的Java软件包或类名列表,若有多个类,中间用逗号隔开 |
extends | 指定JSP页面转换产生的servlet类继承的父类 |
session | 指定JSP页面中是否可以使用Session对象,默认为TRUE |
buffer | 指定输出缓冲区的大小,默认值为8K |
autoFlush | 指定输出缓冲区即将溢出时,是否强制输出缓冲区的内容 |
isThreadSafe | 指定JSP页面是否支持多线程 |
errorPage | 指定JSP页面发生异常时重新指向的页面URL |
isErrorPage | 指定JSP页面是否为处理异常的页面,默认值为FALSE |
isELIgnored | 指定JSP页面是否忽略El表达式,默认值为FALSE |
contentType | 指定JSP页面的编码格式和JSP页面响应的MIME类型 |
pageEncoding | 指定JSP页面编码格式 |
接下来通过一个实例演示page指令的使用,具体步骤如下。
(1)在WebContent目录的jsp目录下新建test06.jsp,为该页面指定发生异常时重新跳转的页面,具体代码如书中例9.10所示。
在代码中,page指令的errorPage属性为该页面指定了一个处理异常的页面,这个处理异常的页面为error.jsp。
(2)在WebContent目录的jsp目录下新建error.jsp,具体代码如书中例9.11所示。
(3)打开浏览器,访问http://localhost:8080/chapter09/jsp/test06.jsp,浏览器显示的页面如图所示。
从图中可以看出,当test06.jsp发生异常时,它会自动跳转到error.jsp页面。
²
include指令include指令又被称为文件加载指令,用于在JSP文件中插入一个包含文本或代码的文件。它把插入文本或代码的文件后与原来的JSP文件合并成一个新的JSP文件。
include指令的语法格式如下。
<%@ include file=”被包含文件的地址” %>
include指令只有一个file属性,该属性用来指定插入到JSP页面的文件,这个文件必须遵循JSP语法,file属性的值一般是该文件的相对路径。
接下来通过一个实例来演示include指令的使用方法,具体步骤如下。
(1)在WebContent目录的jsp目录下新建test07.jsp。
(2)在WebContent目录的jsp目录下新建test08.jsp。
在代码中,include指令为test08.jsp引入了test07.jsp文件,在执行过程中,这两个JSP文件会合成一个新的JSP文件。
(3)打开浏览器,访问http://localhost:8080/chapter09/jsp/test08.jsp,浏览器显示的页面如图所示。
从图中可以看出,当访问test08.jsp时,它所引入的test07.jsp的内容同样也被显示。
²
taglib指令taglib指令用于指定JSP页面使用的标签库,通过该指令可以在JSP页面中使用标签库中的标签。
taglib指令的语法格式如下。
<%@ taglib uri=”标签库URI” prefix=”标签前缀” %>
其中,uri指定描述这个标准库位置的URI,可以是相对路径或绝对路径;prefix指定使用标签库中标签的前缀。
JSP动作元素JSP动作元素用于控制JSP的行为,执行一些常用的JSP页面动作,利用JSP页面动作可以实现很多功能,例如动态插入文件、重用JavaBean组件、重定向页面等。
JSP中的动作元素主要包含以下几种。
l <jsp:include>;
l <jsp:forward>;
l <jsp:param>;
l <jsp:useBean>;
l <jsp:setProperty>;
l <jsp:getProperty>。
接下来将对JSP的常用动作元素作详细讲解。
²
<jsp:include>动作元素<jsp:include>动作元素提供了一种在JSP中包含页面的方式,既可以包含静态文件,也可以包含动态文件。
JSP包含页面,是指当JSP页面运行时才会载入该文件,并不是简单地将被包含文件与JSP页面合并成一个新的JSP页面。如果包含的文件是文本文件,运行时只需将该文件内容发送到客户端,由客户端负责显示;如果包含的文件是JSP文件,服务器就执行这个文件,然后将执行结果发送到客户端并显示出来。
<jsp:include>动作元素的语法格式为如下。
<jsp:include page=”relative URL” flush=”true”/>
其中,page属性指定被包含文件的URL地址,是一个相对路径;flush属性指定当缓冲区满时,是否将其清空,其默认值为false。
include指令和<jsp:include>动作元素都能包含一个文件,但它们之间有很大的区别,具体如下。
l include指令在转换阶段就引入所包含的文件,被包含的文件在逻辑和语法上依赖于当前的JSP页面。
l <jsp:include>动作元素是在JSP页面运行时才引入被包含文件产生的响应文本,被包含的文件在逻辑和语法上独立于当前JSP页面。
接下来通过一个实例来演示<jsp:include>动作元素的使用,具体步骤如下。
(1)在WebContent目录的jsp目录下新建test09.jsp。
在代码中,<jsp:include>动作元素为test09.jsp引入了test07.jsp文件。
(2)打开浏览器,访问http://localhost:8080/chapter09/jsp/test09.jsp,浏览器显示的页面如图所示。
从图中可以看出,当访问test09.jsp时,它所引入的test07.jsp的内容同样也被显示。
从前面的讲解中,大家可以看到,include指令和<jsp:include>动作元素都能包含一个文件,但它们之间有很大的区别,具体如下。
include指令在转换阶段就引入所包含的文件,被包含的文件在逻辑和语法上依赖于当前的JSP页面。
<jsp:include>动作元素是在JSP页面运行时才引入被包含的文件产生的响应文本,被包含的文件在逻辑和语法上独立于当前的JSP页面。
²
<jsp:forward>动作元素<jsp:forward>动作元素用于请求转发,它的功能类似于RequestDispatcher接口的forward()方法,是将客户端的请求转发给其他Web资源,例如,另一个JSP页面、Servlet等。
<jsp:forward>动作元素的语法格式如下。
<jsp:forward page=”relative URL”/>
其中,page属性指定请求转发到的Web资源的路径。
接下来通过一个实例来演示<jsp:forward>动作元素的使用,具体步骤如下。
(1)在WebContent目录的jsp目录下新建test10.jsp。
在代码中,通过<jsp:forward>动作元素,访问test10.jsp的请求被转发到test11.jsp。
(2)在WebContent目录的jsp目录下新建test11.jsp,具体代码如书中例9.16所示。
(3)打开浏览器,访问http://localhost:8080/chapter09/jsp/test10.jsp,浏览器显示的页面如图所示。
从图中可以看出,当访问test10.jsp时,请求被转发到test11.jsp。
²
<jsp:param>动作元素<jsp:param>是一种提供参数的动作元素,它以name/value的形式为其他元素提供附加信息,一般与<jsp:include>、<jsp:forward>动作元素联合使用。
<jsp:param>的语法格式如下。
<jsp:param name=”参数名” value=”参数值”/>
1. 与<jsp:include>动作元素一起使用当<jsp:param>与<jsp:include>动作元素一起使用时,可以将<jsp:param>中提供的参数值传递到被包含的页面中去,在被包含的页面中,通过调用request对象的getParameter()方法获取<jsp:param>指定的参数值。
2. 与<jsp:forward>动作元素一起使用当<jsp:param>与<jsp:forward>动作元素一起使用时,可以在请求转发的同时向跳转的页面传递参数。在跳转的页面中,通过调用request对象的getParameter()方法获取<jsp:param>指定的参数值。
²
与JavaBean相关的动作元素<jsp:useBean>、<jsp:setProperty>和<jsp:getProperty>三个动作元素都是与JavaBean相关的,因此下面统一对它们进行讲解。
1. <jsp:useBean>动作元素<jsp:useBean>动作元素用于装载一个将在JSP页面中使用的JavaBean,JSP通过使用JavaBean组件来扩充自身的功能。
<jsp:useBean>动作元素的语法格式如下。
<jsp:useBean id=”id” class=”className”
scope=”page|request|session|application”/>
其中,id指定该JavaBean实例的变量名,通过id可以访问这个实例,class指定JavaBean的类名,服务器根据class指定的类调用其构造方法来创建这个类的实例,scope指定JavaBean的作用范围,可以使用page、request、session、application,默认值为page。
2. <jsp:setProperty>动作元素<jsp:setProperty>动作元素用于设置或修改JavaBean的属性值。
<jsp:setProperty>动作元素的语法格式如下:
<jsp:setProperty name=”beanName” property=”propertyName”
value=”propertyValue” param=”parameterName”/>
其中,name指定JavaBean的对象名,与<jsp:useBean>动作元素的id属性对应,property指定JavaBean中需要获取的赋值的属性名,value指定要为属性设置的值,其值可以是一个字符串,也可以是一个JSP表达式。param指定请求中的参数名。
3. <jsp:getProperty>动作元素<jsp:getProperty>动作元素用于获取JavaBean的属性值,并将其转换成字符串,然后输出。
<jsp:getProperty>动作元素的语法格式如下。
<jsp:getProperty name=”beanName” property=”propertyName”/>
其中,name指定JavaBean的对象名,与<jsp:useBean>动作元素的id属性对应,property指定JavaBean中需要获取的属性名。这里需要注意的是,在使用<jsp:getProperty>动作元素时,它的name属性和property属性都必须设置,不能省略。
接下来通过一个实例来演示以上三个动作元素的使用,具体步骤如下。
(1)在工程chapter09的com.qfedu.example包下新建一个JavaBean类User。
(2)在WebContent目录的jsp目录下新建test16.jsp。
(3)打开浏览器,访问http://localhost:8080/chapter09/jsp/test16.jsp,浏览器显示的页面如图所示。
从图中可以看出,在test16.jsp页面中,<jsp:useBean>动作元素创建一个User类的对象,<jsp:setProperty>动作元素为该对象设置属性,<jsp:getProperty>动作元素获取该对象的属性值并输出。
JSP内置对象²
概述为了简化开发,JSP内置了一些可以直接在脚本和表达式中使用的对象,这些对象由JSP自动创建,开发者可直接调用,而无须对它们进行实例化。所有JSP的内置对象,具体如表所示。
表 JSP内置对象
内置对象名称 | 类型 | 说明 |
request | javax.servlet.HttpServletRequest | 用于获取客户端请求信息 |
response | javax.servlet.HttpServletResponse | 用于向客户端响应信息 |
config | javax.servlet.ServletConfig | 页面配置对象 |
session | javax.servlet.http.HttpSession | 用于保存会话信息 |
application | javax.servlet.ServletContext | 用于保存整个Web应用的信息 |
pageContext | javax.servlet.jsp.PageContext | 用于存储当前JSP页面的信息 |
out | javax.servlet.jsp.JspWriter | 用于页面输出 |
page | java.lang.Object | 当前JSP页面对象 |
exception | java.lang.Throwable | 用于处理JSP页面中的异常 |
表中列举了JSP的9个内置对象及其对应的类型。其中,request、response、config、session和application对象对应的类是Servlet的相关API,这些在前面的章节已有详细介绍,此处不再赘述。接下来,本书将对out、pageContext、exception对象做重点讲解。
²
out对象out对象是一个缓冲输出流对象,它与HttpServletResponse类的getWriter()方法返回的PrintWriter对象非常相似,不同的是,当向out对象的输出流中写入数据时,数据会先被存储在缓冲区中,在JSP默认配置下,缓冲区满时数据才会被自动刷新输出。
out对象提供了一系列的输出数据和处理缓冲区的方法,具体如表9.3所示。
表9.3 out对象的常用方法
属性名 | 说明 |
void clear() | 清除缓冲区中的内容,不把数据输出到客户端 |
void clearBuffer() | 清除缓冲区中的内容,同时将数据输出到客户端 |
void close() | 关闭输出流 |
void flush() | 输出缓冲区里的数据 |
int getBufferSize() | 获取缓冲区的大小 |
int getRemainning() | 获取缓冲区剩余空间的大小 |
isAutoFlush() | 返回TRUE表示缓冲区满时会自动刷新输出,返回FALSE表示缓冲区满时不会自动清除并产生异常处理 |
void newLine() | 输出一个换行符 |
void print() | 向客户端输出数据 |
void println() | 向客户端输出数据并换行 |
²
pageContext对象pageContext对象即页面上下文对象,它代表当前JSP页面的运行环境,用于获取当前JSP页面的其他内置对象。另外,pageContext对象提供了容器功能,作用范围是当前JSP页面。
pageContext对象提供了一系列获取其他内置对象的方法,具体如表9.4所示。
表9.4 pageContext对象获取其他内置对象的方法
属性名 | 说明 |
ServletRequest getRequest() | 获取当前JSP页面的request对象 |
ServletResponse getResponse() | 获取当前JSP页面的response对象 |
HttpSession getSession() | 获取当前JSP页面关联的session对象 |
ServletConfig getServletConfig() | 获取当前JSP页面的config对象 |
ServletContext getServletContext() | 获取当前JSP页面的application对象 |
JspWriter getOut() | 获取当前JSP页面的out对象 |
Object getPage() | 获取当前JSP页面的page对象 |
Exception getException | 获取当前JSP页面的exception对象 |
为实现容器功能,pageContext对象提供了一系列存取域属性的方法,具体如表9.5所示。
表9.5 pageContext对象存取域属性的方法
属性名 | 说明 |
void setAttribute(String name,Object value,int scope) | 设置指定范围内的name属性 |
void setAttribute(String name,Object value) | 设置name属性 |
Object getAttribute(String name ,int scope) | 获取指定范围内的名称为name的属性 |
Object getAttribute(String name) | 获取名称为name的属性 |
void removeAttribute(String name, int scope) | 删除指定范围内名称为name的属性 |
void removeAttribute(String name) | 删除名称为name的属性 |
Object findAttribute(String name) | 从4个域对象中查找名称为name的属性 |
Enumeration getAttributeNamesInScope(int scope) | 获取指定范围内的所有属性名 |
在以上方法中,参数scope指定的是属性的作用范围,一般通过PageContext类提供的静态变量进行定义。域属性的作用范围共有四种,其中,pageContext.PAGE_SCOPE表示页面范围,pageContext.REQUEST_SCOPE表示请求范围,pageContext.SESSION_SCOPE表示会话范围,pageContext.APPLICATION_SCOPE表示Web应用程序范围。
²
exception对象exception对象即异常对象,用于封装JSP页面抛出的异常信息。需要注意的是,如果一个JSP页面要使用exception对象,必须将此页面中page指令的isErrorPage属性设置为true。
exception对象提供了几种获取异常信息的方法,具体如表9.6所示。
表9.6 exception对象的常用方法
属性名 | 说明 |
String getMessage() | 获取异常信息 |
void printStackTrace() | 以标准形式输出一个错误和错误的堆栈 |
String toString() | 以字符串的形式返回一个对异常的描述 |
接下来通过一个实例来演示exception对象的使用方法,具体步骤如下。
(1)在WebContent目录的jsp目录下新建test19.jsp,具体代码如例9.25所示。
在代码中,page指令的errorPage属性为该页面指定了一个处理异常的页面,这个处理异常的页面为test20.jsp。
2)在WebContent目录的jsp目录下新建test20.jsp,具体代码如书中例9.26所示。
在代码中,page指令的isErrorPage属性被设置为TRUE,只有满足该条件,才可以直接在test20.jsp页面中使用exception对象。
(3)打开浏览器,点击右上角的
图标,在弹出的菜单中选择“Internet选项”命令,在”Internet选项“对话框中选择“高级”选项卡,取消勾选”显示友好的HTTP错误信息”复选框,如图所示。
IE浏览器自带有默认的错误提示页面,为保证本实例的运行结果不受影响,这里暂时取消该功能。
(4)重新打开浏览器,访问http://localhost:8080/chapter09/jsp/test19.jsp,浏览器显示的页面如图所示。
从图中可以看出,浏览器显示出test19.jsp页面的异常信息。