【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域
👍如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️
👀专栏介绍
【JavaWeb】 目前主要更新JavaWeb,一起学习一起进步。
👀本期介绍
本期主要介绍JSP基本语法、指令、九大内置对象、四大作用域
文章目录
1.5、JSP 基本语法【重点】
1.5.1、JSP 脚本元素
JSP
脚本元素是指嵌套在
<%
和
%>
之中的一条或多条
Java
程序代码。通过
JSP
脚本元素可以将
Java
代
码嵌入
HTML
页面中,所有可执行的
Java
代码,都可以通过
JSP
脚本来执行。
JSP Scriptlets
是一段代码段。当需要使用
Java
实现一些复杂操作或控制时,可以使用它。
JSP
Scriptlets
的语法格式如下所示:
在
JSP Scriptlets
中声明的变量是
JSP
页面的局部变量,调用
JSP Scriptlets
时,会为局部变量分
配内存空间,调用结束后,释放局部变量占有的内存空间。
1.5.2、JSP 注释
JSP
有其独有的注释
JSP
注释、
Java
注释、HTML 注释对比:
建议 JSP 文件上尽量使用 JSP 注释
1.6、JSP 指令
为了设置
JSP
页面中的一些信息,
Sun
公司提供了
JSP
指令。
JSP 2.0
中共定义了
page
、
include
和
taglib
三种指令,每种指令都定义了各自的属性。接下来,本节将针对
page
和
include
指令进行详细的
讲解。
1.6.1、page 指令
在
JSP
页面中,经常需要对页面的某些特性进行描述,例如,页面的编码方式,
JSP
页面采用的
语言等,这时,可以通过 page
指令来实现。page 指令的具体语法格式如下所示:
在上面的语法格式中,
page
用于声明指令名称,属性用来指定
JSP
页面的某些特性。
page
指令
提供了一系列与 JSP
页面相关的属性,如表
1-1
所示。
表
1-1
中列举了
page
指令的常见属性,其中,除了
import
属性外,其他的属性都只能出现一次,
否则会编译失败。需要注意的是,page
指令的属性名称都是区分大小写的。
下面列举两个使用
page
指令的示例:
上面代码中使用了
page
指令的
language
、
contentType
、
pageEncoding
和
import
属性。
需要注意的是,
page
指令对整个页面都有效,而与其书写的位置无关,但是习惯上把
page
指令
写在JSP 页面的最前面。
建议:
page
指令写在
JSP
最前面
1.6.2、include 指令
实际开发中,经常涉及到一个
JSP
引入另一个
JSP
的代码。
这时我们就需要使用 include 指令
地址:
/xx.jsp
即:
WebContent
下的
xx.jsp
1.6.3、taglib 指令
该指令 用于引入标签库
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
项目共享,多次会话共享数据。