韩顺平
- 2. EL表达式
- 2.1 EL表达式快速入门
- 2.2 EL表达式输出形式
- 2.3 el运算符
- 2.4 empty运算
- 2.5 EL获取四个域数据
- 2.6 EL获取HTTP相关信息
- 3. JSTL标签库
- 3.1 jstl 快速入门
- 3.2 <c:set/>标签
- 3.3 <c:if/>标签
- 3.4 <c:choose/>标签
- 3.5 <c:forEach/>标签
- 3.6 作业布置
2. EL表达式
2.1 EL表达式快速入门
- EL表达式全称: Expression Language, 是表达式语言
- EL表达式主要是代替jsp页面的表达式脚本
- EL表达式输出数据时, 比jsp的表达式脚本简洁
- EL表达式基本语法: ${key1}
- EL表达式在输出null时, 输出的是""
- jsp表达式脚本输出null时, 输出的是"null"字符串
2.2 EL表达式输出形式
public class Book {
private String name;//书名
private String[] writer;//作者
private List<String> reader;//读者
private Map<String, Object> topics;//评讲
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String[] getWriter() {
return writer;
}
public void setWriter(String[] writer) {
this.writer = writer;
}
public List<String> getReader() {
return reader;
}
public void setReader(List<String> reader) {
this.reader = reader;
}
public Map<String, Object> getTopics() {
return topics;
}
public void setTopics(Map<String, Object> topics) {
this.topics = topics;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", writer=" + Arrays.toString(writer) +
", reader=" + reader +
", topics=" + topics +
'}';
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>el 表达式输出数据演示</title>
</head>
<body>
<h1>el 表达式输出数据演示</h1>
<%
// private String name;//书名
//private String[] writer;//作者
//private List<String> reader;//读者
//private Map<String, Object> topics;//评讲
//创建Book, 放入相关属性
Book book = new Book();
book.setName("雪国");
book.setWriter(new String[]{"川端康成","2"});
ArrayList<String> list = new ArrayList<>();
list.add("赵志伟");
list.add("赵培竹");
book.setReader(list);
Map<String, Object> hashMap = new HashMap<>();
hashMap.put("赵志伟", "讲的不错❤");
hashMap.put("赵培竹", "Love❤");
book.setTopics(hashMap);
//把book对象 放入request域对象
request.setAttribute("bookkey", book);
%>
book对象: ${bookkey}<br/>
book.name: ${bookkey.name}<br/>
book.writer: ${bookkey.writer}<br/>
book.writer[0]: ${bookkey.writer[0]}<br/>
book.readers: ${bookkey.reader}<br/>
book.readers.get(1): ${bookkey.reader.get(1)}<br/>
book.readers[0]: ${bookkey.reader[0]}<br/>
book.topics["赵志伟"]: ${bookkey.topics["赵志伟"]}<br/>
book.topics.get("赵培竹"): ${bookkey.topics.get("赵培竹")}<br/>
</body>
</html>
输出结果
2.3 el运算符
关系运算符 | 说明 | 范例 | 结果 |
---|---|---|---|
== 或 eq | 等于 | ${5 == 5} 或 ${5 eq 5} | true |
!= 或 ne | 不等于 | ${5 != 5} 或 ${5 ne 5} | false |
< 或 lt | 小于 | ${3 < 5} 或 ${3 lt 5} | true |
> 或 gt | 大于 | ${3 > 5} 或 ${3 gt 5} | false |
<= 或 le | 小于等于 | ${3 <= 5} 或 ${3 le 5} | true |
>= 或 ge | 大于等于 | ${3 >= 5} 或 ${3 ge 5} | false |
- 逻辑运算
逻辑运算符 | 说明 | 范例 | 结果 |
---|---|---|---|
&& 或 and | 与运算 | ${12 == 12 && 12 < 11} | false |
或 or | 或运算 | ${12 == 12 | |
! 或 not | 取反运算 | ${ !true } 或 ${not true} | false |
- 算术运算
算数运算符 | 说明 | 范例 | 结果 |
---|---|---|---|
+ | 加法 | ${12 + 12} | 30 |
- | 减法 | ${24 - 12} | 12 |
/ 或 div | 除法 | ${ 144 / 12 } 或 ${ 144 div 12 } | 12 |
* | 乘法 | ${ 144 * 10 } | 1440 |
% 或 mod | 取模 | ${ 144 % 10 } 或 ${ 144 mod 10 } | 4 |
2.4 empty运算
- empty运算可以判断一个数据是否为空, 如果为空, 返回true, 否则返回false
- 以下几种情况为空
- 值为null
- 值为空串
- 值是Object类型数组, 长度为零
- list集合, 元素个数为零
- map集合, 元素个数为零
- 三元运算
2.5 EL获取四个域数据
变量 | 类型 | 说明 |
---|---|---|
pageContext | PageContextImpl | 获取jsp中的九大内置对象 |
pageScope | Map<String, Object> | 获取pageContext域中的数据 |
requestScope | Map<String, Object> | 获取Request域中的数据 |
sessionScope | Map<String, Object> | 获取Session域中的数据 |
applicationScope | Map<String, Object> | 获取ServletContext域中的数据 |
2.6 EL获取HTTP相关信息
3. JSTL标签库
3.1 jstl 快速入门
- JSTL标签库是指 JSP Standard Tag Library(JSP标准标签库)
- EL表达式是为了替换jsp中的表达式脚本, JSTL是为了替换代码脚本. 这样jsp页面变得更加简洁
- JSTL由五个标签库组成
功能范围 | URI | 前缀 |
---|---|---|
核心标签库 | http://java.sun.com/jsp/jstl/core | c |
格式化 | http://java.sun.com/jsp/jstl/fmt | fmt |
函数 | http://java.sun.com/jsp/jstl/functions | fn |
数据库 | http://java.sun.com/jsp/jstl/sql | sql |
XML | http://java.sun.com/jsp/jstl/xml | x |
- 使用JSTL, 需要导入相关的jar包, 即taglibs-standard-impl-1.2.1.jar, taglibs-standard-spec-1.2.1.jar
3.2 <c:set/>标签
- 介绍: <c:set scope=“request” var=“username” value=“赵志伟”/>
<c:set />标签可以往域中存放数据
- 等价于 域对象.setAttribute(key, value);
- scope属性 设置保存到哪个域
page表示PageContext域 (如果不写, 默认值)
request表示Request域
session表示Session域
application表示ServletContext域- var属性 设置key值
- value属性 设置值
3.3 <c:if/>标签
- 介绍: <c:if test=“${10 > 2}”>hello</c:if>
<c:if />
- if标签用来做if判断
- test属性表示判断的条件(用EL表达式输出)
3.4 <c:choose/>标签
- 介绍: 多路判断, 跟switch…case…default非常接近
- 取值问题
- c:choose标签使用
3.5 <c:forEach/>标签
varstatus的使用, 参考👉
遍历Map集合的方法, 参考👉
c:forEach的循环次数,以及内部循环数据累加统计
- 介绍: c:forEach标签, 用来遍历输出, 主要有4种形式
- 普通遍历输出 i 到 j
- 遍历数组
- 遍历Map
- 遍历List