1.7、JSP 九大内置对象
1.7.1、简述
在
JSP
页面中,有一些对象需要频繁使用,如果每次都重新创建这些对象则会非常麻烦。为了简
化Web 应用程序的开发,
JSP2.0
规范中提供了
9
个隐式(内置)对象,它们是
JSP
默认创建
的,可以直接在
JSP
页面中使用。这
9
个隐式对象的名称、类型和描述如表 1-2 所示。
在表
1-2
中,列举了
JSP
的
9
个隐式对象及它们各自对应的类型。其中,由于
request
、
response
、
config
、
session
和
application
所属的类及其用法在前面的章节都已经讲解过,而
page
对象在
JSP
页面
中很少被用
到。因此,在下面几个小节中,将针对
out
和
pageContext
对象进行详细的讲解。
1.7.2、pageContext 对象
在
JSP
页面中,使用
pageContext
对象可以获取
JSP
的其他
8
个隐式对象。
pageContext
对象是
javax.servlet.jsp.PageContext
类的实例对象,它代表当前
JSP
页面的运行环境,并提供了一系列
用于获取其
他隐式对象的方法。
pageContext
对象获取隐式对象的方法如表 1-3 所示。
表
1-3
中列举了
pageContext
获取其他隐式对象的方法,这样,当传递一个
pageContext
对象
后,就可以通
过这些方法轻松地获取到其他
8
个隐式对象了。
pageContext
对象不仅提供了获取隐式对象的方法,还提供了存储数据的功能。
pageContext
对象
存储数据
是通过操作属性来实现的,表
1-4
列举了
pageContext
操作属性的一系列方法,具体如下:
表
1-4
列举了
pageContext
对象操作属性的相关方法,其中,参数
name
指定的是属性名称,参
数
scope
指
定的是属性的作用范围。
pageContext
对象的作用范围有
4
个值,具体如下:
PageContext.PAGE_SCOPE
:表示页面范围
PageContext.REQUEST_SCOPE
:表示请求范围
PageContext.SESSION_SCOPE
:表示会话范围
PageContext.APPLICATION_SCOPE
:表示
Web
应用程序范围
需要注意的是,当使用
findAttribute()
方法查找名称为
name
的属性时,会按照
page
、
request
、
session
和
application
的顺序依次进行查找,如果找到,则返回属性的名称,否则返回
null
。接下来,通过一
个案例
来演示
pageContext
对象的使用。
在
day12
项目的
WebContent
目录下创建一个名称为
pageContext.jsp
的页面,编辑后如文件
1-7
所示。
在上述代码中,首先使用
pageContext
获取了
request
对象,并设置
page
范围内属性;然后使用
获取的
request
对象设置了
request
范围内属性,接下来使用
pageContext
对象获得
page
和
request
范
围内的相应属
性,最后使用
JSP
表达式输出数据。
启动
Tomcat
服务器,在浏览器的地址栏中输入地址“
http://localhost:8080/day17/pageContext.jsp
”
访问
pageContext.jsp
页面,浏览器显示的结果如图
1-13
所示。
从图
1-13
的显示结果可以看出,通过
pageContext
对象可以获取到
request
对象,并且还可以获
取不同范围内的属性。
1.7.3、out 对象(了解)
在
JSP
页面中,经常需要向客户端发送文本内容,这时,可以使用
out
对象来实现。
out
对象是
javax.servlet.jsp.JspWriter
类的实例对象,它的作用与
ServletResponse.getWriter()
方法返回的
PrintWriter
对
象非常相似,都是用来向客户端发送文本形式的实体内容。不同的是,
out
对象的类型为
JspWriter
,它相
当于一种带缓存功能的
PrintWriter
。接下来,通过一张图来描述
JSP
页面的
out
对象与
Servlet
引
擎提供的
缓冲区之间的工作关系,具体如图 1-11 所示。
从图
1-11
可以看出,在
JSP
页面中,通过
out
隐式对象写入数据相当于将数据插入到
JspWriter
对象的缓冲区中,只有调用了 ServletResponse.getWriter()
方法,缓冲区中的数据才能真正写入到
Servlet
引擎所提供
的缓冲区中。为了验证上述说法是否正确,接下来,通过一个具体的案例来演示
out
对象的使用。
在
day12
项目的
WebContent
目录下创建一个名称为
out
的
JSP
页面,如文件
1-5
所示。
启动
Tomcat
服务器,在浏览器地址栏中访问“
http://localhost:8080/day12/out.jsp
”,浏览器的显示
结果如图
1-12
所示。
从图
1-12
中可以看出,尽管
out.println
语句位于
response.getWriter().println
语句之前,但它的
输出内容却
在后面。由此可以说明,
out
对象通过
print
语句写入数据后,直到整个
JSP
页面结束,
out
对象
中输入缓
冲区的数据(即:
first line
)才真正写入到
Serlvet
引擎提供的缓冲区中,而
response.getWriter().println
语句
则是直接把内容(即:
second line
)写入
Servlet
引擎提供的缓冲区中,
Servlet
引擎按照缓冲区中
的数据存
放顺序输出内容。
1.8、JSP 四大作用域总结
page:表示当前页,通常没用。jsp 标签底层使用。
request
:表示一次请求。通常一次请求就一个页面,但如果使用请求转发,可以涉及多个页面。
session
:表示一次会话。可以在多次请求之间共享数据。
application
:表示 一个
web
应用
(
项目
)
。可以整个
web
项目共享,多次会话共享数据。