【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_web


👀专栏介绍

【JavaWeb】 目前主要更新JavaWeb,一起学习一起进步。

👀本期介绍

本期主要介绍JSP基本语法、指令、九大内置对象、四大作用域

文章目录

​1.5、JSP 基本语法【重点】​

​1.5.1、JSP 脚本元素​

​1.5.2、JSP 注释​

​1.6、JSP 指令​

​1.6.1、page 指令​

​1.6.2、include 指令​

​1.6.3、taglib 指令​

​1.7、JSP 九大内置对象​

​1.7.1、简述​

​1.7.2、pageContext 对象​

​1.7.3、out 对象(了解)​

​1.8、JSP 四大作用域总结​

1.5、JSP 基本语法【重点】

1.5.1、JSP 脚本元素


JSP 脚本元素是指嵌套在 <% 和 %> 之中的一条或多条 Java 程序代码。通过 JSP 脚本元素可以将



Java 代



码嵌入 HTML 页面中,所有可执行的 Java 代码,都可以通过 JSP 脚本来执行。



JSP Scriptlets 是一段代码段。当需要使用 Java 实现一些复杂操作或控制时,可以使用它。 JSP



Scriptlets



的语法格式如下所示:


【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_java_02


在 JSP Scriptlets 中声明的变量是 JSP 页面的局部变量,调用 JSP Scriptlets 时,会为局部变量分



配内存空间,调用结束后,释放局部变量占有的内存空间。


 

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_web_03

1.5.2、JSP 注释


JSP 有其独有的注释



JSP 注释、

Java 注释、HTML 注释对比:

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_web_04


【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_javaweb_05

 

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_前端_06

建议 JSP 文件上尽量使用 JSP 注释


1.6、JSP 指令


为了设置 JSP 页面中的一些信息, Sun 公司提供了 JSP 指令。 JSP 2.0 中共定义了 page 、


include 和 taglib


三种指令,每种指令都定义了各自的属性。接下来,本节将针对 page 和 include 指令进行详细的


讲解。


1.6.1、page 指令


在 JSP 页面中,经常需要对页面的某些特性进行描述,例如,页面的编码方式, JSP 页面采用的

语言等,这时,可以通过 page 指令来实现。page 指令的具体语法格式如下所示:

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_前端_07


在上面的语法格式中, page 用于声明指令名称,属性用来指定 JSP 页面的某些特性。 page 指令


提供了一系列与 JSP 页面相关的属性,如表 1-1 所示。

 

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_前端_08

 

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_前端_09


表 1-1 中列举了 page 指令的常见属性,其中,除了 import 属性外,其他的属性都只能出现一次,


否则会编译失败。需要注意的是,page 指令的属性名称都是区分大小写的。


下面列举两个使用 page 指令的示例:

 

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_servlet_10


上面代码中使用了 page 指令的 language 、 contentType 、 pageEncoding 和 import 属性。


需要注意的是, page 指令对整个页面都有效,而与其书写的位置无关,但是习惯上把 page 指令


写在JSP 页面的最前面。


建议: page 指令写在 JSP 最前面


1.6.2、include 指令


实际开发中,经常涉及到一个 JSP 引入另一个 JSP 的代码。

这时我们就需要使用 include 指令

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_javaweb_11


地址: /xx.jsp


即: WebContent 下的 xx.jsp


【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_java_12

 

1.6.3、taglib 指令


该指令 用于引入标签库



【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_javaweb_13


1.7、JSP 九大内置对象

1.7.1、简述


在 JSP 页面中,有一些对象需要频繁使用,如果每次都重新创建这些对象则会非常麻烦。为了简


化Web 应用程序的开发, JSP2.0 规范中提供了 9 个隐式(内置)对象,它们是 JSP 默认创建


的,可以直接在

JSP 页面中使用。这 9 个隐式对象的名称、类型和描述如表 1-2 所示。

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_javaweb_14


在表 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 所示。

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_javaweb_15


表 1-3 中列举了 pageContext 获取其他隐式对象的方法,这样,当传递一个 pageContext 对象


后,就可以通


过这些方法轻松地获取到其他 8 个隐式对象了。


pageContext 对象不仅提供了获取隐式对象的方法,还提供了存储数据的功能。 pageContext 对象


存储数据


是通过操作属性来实现的,表 1-4 列举了 pageContext 操作属性的一系列方法,具体如下:

 

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_前端_16

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_web_17


表 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

所示。

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_javaweb_18


【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_前端_19

 

在上述代码中,首先使用 pageContext 获取了 request 对象,并设置 page 范围内属性;然后使用


获取的


request 对象设置了 request 范围内属性,接下来使用 pageContext 对象获得 page 和 request 范


围内的相应属


性,最后使用 JSP 表达式输出数据。


启动 Tomcat 服务器,在浏览器的地址栏中输入地址“​​ http://localhost:8080/day17/pageContext.jsp​​ ”


访问


pageContext.jsp 页面,浏览器显示的结果如图 1-13 所示。

 

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_web_20


从图 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 所示。

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_前端_21


从图 1-11 可以看出,在 JSP 页面中,通过 out 隐式对象写入数据相当于将数据插入到 JspWriter


对象的缓冲区中,只有调用了 ServletResponse.getWriter() 方法,缓冲区中的数据才能真正写入到


Servlet 引擎所提供


的缓冲区中。为了验证上述说法是否正确,接下来,通过一个具体的案例来演示 out 对象的使用。


在 day12 项目的 WebContent 目录下创建一个名称为 out 的 JSP 页面,如文件 1-5 所示。

 

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_web_22

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_web_23

 

启动 Tomcat 服务器,在浏览器地址栏中访问“​​ http://localhost:8080/day12/out.jsp​​ ”,浏览器的显示


结果如图


1-12 所示。

 

【JavaWeb】JSP基本语法、指令、九大内置对象、四大作用域_java_24


从图 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 项目共享,多次会话共享数据。