jsp进阶

本文回顾了JSP的工作原理,详细介绍了九大内置对象,如application、session和request等,以及它们的创建和作用。讨论了四大作用域对象的范围和使用,包括EL表达式的查找规则。此外,还讲解了JSTL标准标签库的核心标签,如set、out和foreach等,强调了JSTL在提升代码可读性和维护性上的优势。
摘要由CSDN通过智能技术生成


jsp进阶

内容回顾

jsp 创建
jsp 的工作原理:翻译 --> 编译 --> 运行
翻译:第一次访问 jsp 页面时,服务器进行 jsp 页面的翻译,将 jsp 翻译为一个 java
类,该类被称为是一个 servlet 类;
jsp 组成:
① 脚本:<% java 代码>
② java 表达式:<%= java 代码>
③ 声明: <%! 变量>
④ jsp 指令:三大指令:page/include/taglib
⑤ el 表达式(${}):是 java 表达式的替代品,可以更简单进行数据的获取
⑥ jsp 动作:
jsp:useBean -- 创建实体类对象
jsp:setProperty -- 指定实体属性的设置
jsp:getProperty -- 获取指定实体类的属性
jsp:forward -- 进行页面的转发
jsp:param -- 页面转发时携带参数的设置
jsp:include -- 动态页面包含,所有涉及到的 jsp 页面,都会翻译成对应的
java 类;

JSP 的九大内置对象

内置对象简介

内置对象也称为隐式对象,不需要人为的创建,在 jsp 页面已经初始化好并且封装好了的,
可以直接使用;九大内置对象分别为:
① application -- 服务器对象
② session -- 会话对象
③ page -- 当前页面,类似与 java 程序中的 this 对象
④ request -- 请求对象
⑤ response -- 响应对象
⑥ out -- 页面输出对象
⑦ config -- 配置对象
⑧ pageContext -- 页面全局对象
⑨ exception -- 异常处理对象

在这里插入图片描述

在 jsp 页面中,使用 <% 快捷键补全 %>,就可以看到 8 个内置对象,exception 对象
没有,exception 是关于页面异常处理的内置对象,需要将 page 指令中 isErrorPage
= "true" 才会显示异常处理对象;
或者使用 pageContext 对象进行获取,pageContext.getException();

内置对象的创建

内置对象不用编程人员创建,系统会自动创建好,那系统什么时候?在哪?进行内置对象的创
建?
通过查看 jsp 页面翻译后的 java 类文件可以查询到,在 翻译后的类文件中会有一个
jspService 方法,在该方法的内部进行了内置对象的创建;

在这里插入图片描述

九大内置对象详解

application

是一个作用域对象,可以将信息保存在服务器中,直到服务器关闭;否则在任意时候我们都可 以从服务器中获取 application域对象中储存的数据;该对象生命周期为服务启动到服务 器关闭;其作用域为整个 web 应用;

request

请求作用域对象,可以将信息保存在一次请求中,主要用于 http 协议传送到服务器的请求数 据。该对象代表了客户端的请求信息,其作用域为一次请求;

response

该对象代表客户端响应信息,主要是将需要的数据发送给客户端,一般返回的是经过容易处理 的或者是有数据渲染的 jsp 页面

config

用于服务器的配置信息描述,可以通过 pageContext 提供的 getServletConfig 方法 进行获取;当一个 servlet 被初始化时,容器会把某些信息通过该对象传递给 servlet; 一般在 web.xml 中进行基本配置;

page

当前页面对象,就跟 this 对象一个意思;

session 对象

域对象,会话对象,服务器启动时会自动为每一个用户创建一个会话对象,用来保存当前用户 的信息;只要浏览器不关闭,在设定的时间内这个用户的信息会保存在session对象中;其作 用域为一次会话

out 对象

请求作用域对象,可以将信息保存在一次请求中,主要用于 http 协议传送到服务器的请求数据。该对象代表了客户端的请求信息,其作用域为一次请求; 该对象代表客户端响应信息,主要是将需要的数据发送给客户端,一般返回的是经过容易处理 的或者是有数据渲染的 jsp 页面;

exception 对象

该对象用于展示页面异常信息,只有在 page 指令设置 isErrorPage = true 后才会创建该对象;该对象几乎继承了所有的异常类,可以描述几乎所有的异常状态;

pageContext 对象

该对象的作用是获取任何范围的参数,因为通过该对象可以获取其他任意的内置对象,该提对 象提供了 getXX() 的方法进行其他内置对象的获取;该对象还可以获取项目的根路径; 获取项目根路径的方法:pageContext.getServletContext.contextPath

四大作用域对象

application:只要服务器不关闭,值永远保存;
session:面对浏览器,只要不主动退出,会话存在,值就存在;
request:面向求情,一次请求;
pageContext:面向页面,某一个页面的作用域;
作用域的范围大小:
application > session > request > pageContext
所有的域对象都有用户参数设置和获取的方法:
setAttribute(key,value);
getAttribute(key)

四大作用域范围总结

该对象用于展示页面异常信息,只有在 page 指令设置 isErrorPage = true 后才会创
建该对象;该对象几乎继承了所有的异常类,可以描述几乎所有的异常状态;
该对象的作用是获取任何范围的参数,因为通过该对象可以获取其他任意的内置对象,该提对
象提供了 getXX() 的方法进行其他内置对象的获取;该对象还可以获取项目的根路径;
获取项目根路径的方法:pageContext.getServletContext.contextPath

EL 进阶

当使用多个域对象设置参数时,使用 el 表达式进行数据获取时,默认是按照最小范围的作用
域开始进行参数的匹配,如果最小的范围中没有该参数,接着往上一个作用域中进行查找,一
直到 application 作用域;
如果所有的作用域中都没有 el 表达式中获取的参数,结果显示为空;
任意一个作用域或者多个作用域中有 el 表示中获取的参数,显示结果为较小的作用域设置的
值;
如果要获取指定作用域中设置的值,是使用 el 表达式进行数据时,可以在获取的参数前面加
上指定的域对象;如果不加会从最小的作用域开始查找;

el 获取数据时无域对象指定

在这里插入图片描述
在这里插入图片描述

el 获取指定域对象中的数据

在这里插入图片描述

在这里插入图片描述

JSTL 标准标签库

简介

JSTL 全称为 JavaServer Pages Standard Tag Labrary --- jsp 标准标签库;
主要提供了供 JavaWeb 开发人员使用的一个标准的标签库,该标签库功能比 html 提供的
标签更强大;可以使用 jstl 提供的标签取代传统的 java 代码;提高的程序的可读性、体
验感、维护性;
JSTL 通常和 el 表达式配合使用,使用 el 表达式来获取数据,用 JSTL 提供的标签来操
作数据;
JSTL 除了有标准的标签库以外,还提供了 JSTL 函数,也可以使用函数进行数据的操作;

JSTL 的使用

① 下载 jar 包,建议使用 1.2 版本,1.1 版本为过时的版本;
② 在 jsp 页面中使用 taglib 指令进行 jstl 的引入;
引入的格式:<% taglib uri="jstl资源路径" prefix="c" %>

在这里插入图片描述
在这里插入图片描述

JSTL 核心标签

通用标签

① 设置参数标签 set
<c:set var="参数名称" value="值" scope="域对象"></c:set>
② 输出标签 out -- 相当于 <jsp:getProperty> 或者是 <%= %>
<c:out value="参数名称"></c:out>
③ 删除标签 remove -- 删除指定参数
<c:remove var="参数名称"></c:remove>

在这里插入图片描述
在这里插入图片描述

分支标签

分支标签类似于 java 中的分支结构;
① 单分支标签 if
<c:if test="条件表达式">标签内容</c:if>
当条件表达式成立,标签内容被执行,条件表达式不成立,标签内容不执行
② 多分支标签 choose - when - otherwise
<choose>
<when test="条件表达式">内部代码</when>
<when test="条件表达式">内部代码</when>
········
<otherwise>内部代码</otherwise>
</choose>
从上往下依次运算 when 标签的条件表达式,如果某个表达式成立,执行对应 when
标签中的内容,一旦某一 when 标签的条件表达式成立,后面所有的 when 标签条件表达式
都不再继续运算;
换句话说,一个 when 标签表达式成立,执行内部的代码,分支结构结束;
只有所有的 when 标签条件表达式都不成立,才会执行 otherwise 标签内部的代
码

单分支结构
在这里插入图片描述
多分支结构

在这里插入图片描述
循环标签

可以对容器进行遍历;
<c:foreach items="需要遍历的容器" var="变量" varStatus="count">
</c:foreach>
items 属性用来指明遍历的容器,容器通常是集合或者数组,使用 el 表达式进行获取;
var 属性用来声明变量,每一次针对容器的遍历结果会储存到 var 声明的变量中
varStatus 属性用来描述当前遍历出来的对象状态,该状态有个属性:
count -- 用来实现对象的计数,序号从 1 开始
index -- 用来表示遍历对象的索引,序号从 0 开始
first -- 获取第一个遍历对象
last -- 获取最后一个遍历对象

在这里插入图片描述
在这里插入图片描述
导入标签

导入标签类似于 include 指令或者动作标签,用来实现其他页面的引入操作;
<c:import url="资源路径"></c:import>
资源路径:一般使用相对路径,也就是项目中存在的其他页面;

JSTL 函数

JSTL 函数大部分是针对字符串的操作;
使用函数之前需要进行函数的引用,就跟使用核心标签库一样,需要通过 page 指定进行指定
uri 访问,和别名的命名;
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"
%>
在引入后就可以使用 jstl 提供的函数;所有的函数如下图:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

划水的阿瞒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值