本章主要学习EL表达式与JSTL标签库,用于简化JSP数据操作。收录JavaWeb基础系列,该系列主要学习JavaWeb开发原生框架、Servlet、JSP、request请求对象、response响应对象、Session会话对象、Filter过滤器、EL表达式、JSTL标签库、三层开发模型等知识点,欢迎童鞋们互相交流。觉得不错可以三连订阅喔。
一、EL表达式
1. 概念
2. 语法
3. 示例
4. EL表达式查找顺序
5. EL变量
二、JSTL标签库
1. 概念
2. JSTL标签库
3. 核心标签(Core)
4. 用法
4.1 首先引入核心标签库
4.2 使用标签
EL表达式是一种在JSP页面中获取数据的表达式语言,用于简化JSP页面的代码编写。主要目的是替代JSP页面中的脚本和表达式,从而减少代码的复杂性和维护难度。
EL表达式的语法格式为:${表达式内容}。
EL表达式是以 ${ 起始,以 } 结束。
括号中填写指定域对象中存储的key值。
//获取session域中name参数值
${sessionScope.name};
//获取session域中user对象的name属性值
${sessionScope.user.name};
// Java脚本读取数据:
<% User user = (user)seesion.getAttrbute(“user”);
String sex = user.getSex(); %>
//相较之下,EL表达式比Java脚本方便、简洁
EL表达式可以直接使用${key}查找域对象中的value值,省去域对象。
如果使用类似于${name}的时候,没有指定在哪一个域对象范围查找name,那么它会以:
1. Page
2. Request
3. Session
4. Application
根据作用域大小,从小到大依次查找。假若全部的范围都没找到时,就回传null,EL优化,页面上显示空白,不会直接打印null。
域对象(jstl名称) |
EL中的名称 |
描述 |
---|---|---|
Page |
PageScope |
JSP页面本身,代表page域中可以保存K V键值对 的对象 |
Request |
RequestScope |
请求,代表request域中可以保存K V对象 |
Session |
SessionScope |
请求,代表session域中可以保存K V对象 |
Application |
ApplicationScope |
请求,代表Appliction域中可以村吃K V对象 |
cookie |
表示一个保存了所有cookie的K V对象 |
|
Param |
表示一个保存了所有请求参数的K V对象 |
|
ParamValues |
表示一个保存了所有请求参数的K V对象,它对于某个请求参数,返回的是String[] |
|
pageContext |
对应JSP页面中的pageContext对象 取的是pageContext对象。 |
|
header |
表示一个保存了所有http请求头字段的K V对象, 例:header[“Accept-Encoding”] |
|
headerValues |
表示一个保存了所有http请求头字段的K V对象, 对于某个请求参数,返回的是String[]数组。 |
|
InitParam |
表示一个保存了所有web应用初始化参数的K V 对象 |
e
- pageContext对象:获取页面中的pageContext对象
- pageScope对象:从page域中查找数据
- requestScope对象:从request域中获取数据
- 未指定获取范围时,默认从page开始找
- sessionScope对象,从session域中获取数据
- applicationScope对象:从application中获取数据
- param对象:获得用于保存请求参数map,并从map中获取数据
JSTL是Java EE提供的一套标签库,用于简化JSP页面的开发。JSTL封装了常见的Java功能,如迭代、条件判断、XML操作、国际化等,减少了JSP页面中Java脚本的使用,使得页面更加清晰。
JSTL支持结构化,比如迭代、条件判断、XML文档操作、国际化标签、SQL标签、自定义标签等。
在JSTL中分为五个标签库,分别为:
核心标签
格式化标签
SQL标签
XML标签
JSTL函数
使用不同的标签时需要导入不同的jar包、引入不同的库。
核心标签库中包含多种标签,这些标签封装了Java功能代码,功能上分为4类:
表达式控制标签: out、set、remove 、catch
流程控制标签: if、when、otherwise
循环标签:forEach、forTokens
URL操作标签:import、url、redirect
标签 |
描述 |
|
用于保存数据 |
|
用于显示数据 <%= ….%> |
|
用于删除数据 |
|
处理产生错误的异常状况,并将错误信息存储 |
|
控制语句,与之前编程中的用法一样 |
|
用来作为 |
|
|
|
时候执行 |
|
基础迭代标签,接受多种集合类型 |
|
检索一个绝对或相对的URL,然后将其内容展示给页面 |
|
根据指定的分隔符来分隔内容并迭代输出 |
|
用来给重定向的页面传递参数 |
|
重定向到一个新的URL |
|
使用 可选的查询参数来创造一个URL |
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
// 用来显示数据(字符串、表达式)的内容或结果
// Java脚本方式: <%out.println(“hello”)%> 或 <%=表达式%>
// JSTL标签方式:
// 用来从指定范围内移除指定变量
// 用来处理JSP页面中产生的异常,并存储异常信息
// 可能产生异常的代码
//如果抛出异常,异常信息保存在变量err中。
属性 |
描述 |
是否必要 |
默认值 |
items |
要被循环的数据 |
否 |
|
begin |
开始元素(0=第一个元素) |
否 |
0 |
end |
最后一个元素(0=第一个元素) |
否 |
|
step |
每一次迭代的步长 |
否 |
1 |
var |
当前条目的变量名称( i ) |
否 |
|
VarStatus |
代表循环状态的变量名称 |
否 |
// Java脚本遍历
<% int num[]={1,2,3,4,5,6,7,8,9};
session.setAttribute("num", num);
forEach(num : n){}
%>
//c:forEach标签遍历
${r} //配合EL表达式读取
${i}
${name}
<% List a = new ArrayList();
a.add("张三");
a.add("李逵");
a.add("张飞");
a.add("大草原");
a.add("自行车");
request.setAttribute("a", a);
%>
// 不指定begin和end的迭代
// 指定begin和end的迭代:
表示URL标签,用来把其他静态或动态文件引入到JSP页面。
可以引用其他web应用的资源文件和网络上的资源
import实例
引用绝对路径的实例
相对路径引用的实例,引用本应用中的文件
使用字符串输出、相对路径引用的实例,并保存在session范围内
用来引入同一个web应用下的资源文件。
可以引入web应用中的资源。
用来实现请求重定向。
例如,对用户名密码进行验证,不成功就重定向到登录页面,或实现web应用中不同模块的链接。
语法:
或:
007
007
用于生成一个String类型的URL
语法:
使用url标签生成一个动态的url,并保存在session中
MI首页
用来判断。
//
// 比如有一个对象A name=赵五
用于设置参数。
李四
从Bean中得到的值:${sessionScope.name1}
从Bean中得到的值:${sessionScope.name2}