复习 EL 表达式与 JSTL
1.1 EL 表达式
1.1.1 概述
EL(Expression Language)是为了使 JSP 写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让 JSP 的代码更加简化。
1.1.2 EL 表达式语法
EL 表达式允许指定一个表达式来表示属性值。一个简单的表达式语法:${表达式}
. EL中通用的操作符是 .
和 {}
。这两个操作符允许通过内嵌的 JSP 对象访问各种各样的 JavaBean 属性。注意:EL 表达式的实质是从域中取值.
示例
<%--
Created by IntelliJ IDEA.
User: Demo_Null
Date: 2020/6/23
Time: 17:17
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.ArrayList" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%
ArrayList<String> list = new ArrayList<>();
list.add("001");
list.add("002");
list.add("003");
list.add("004");
request.setAttribute("list",list);
%>
list 的第一个元素为 ${list.get(0)}
</body>
</html>
1.1.3 基本操作符
操作符 |
描述 |
---|---|
. |
访问一个Bean属性或者一个映射条目 |
[] |
访问一个数组或者链表的元素 |
( ) |
组织一个子表达式以改变优先级 |
+ |
加 |
- |
减或负 |
* |
乘 |
/ 、 div |
除 |
% 、mod |
取模 |
== 、eq |
测试是否相等 |
!= 、ne |
测试是否不等 |
< 、lt |
测试是否小于 |
> 、gt |
测试是否大于 |
<= 、le |
测试是否小于等于 |
>= 、ge |
测试是否大于等于 |
&& 、and |
测试逻辑与 |
|| 、or |
测试逻辑或 |
! 、not |
测试取反 |
empty |
测试是否空值 |
1.1.4 EL 隐式对象
隐式对象 |
描述 |
---|---|
pageScope |
page 作用域 |
requestScope |
request 作用域 |
sessionScope |
session 作用域 |
applicationScope |
application(ServletContext)作用域 |
param |
Request 对象的参数,字符串 |
paramValues |
Request 对象的参数,字符串集合 |
header |
HTTP 信息头,字符串 |
headerValues |
HTTP 信息头,字符串集合 |
initParam |
上下文初始化参数 |
cookie |
Cookie 值 |
pageContext |
当前页面的 pageContext 可取 JSP 其他八个内置对象 |
1.1.5 EL 获取值
对象
// 本质上会去调用对象的getter方法
${域名称.键名.属性名}
List 集合
${域名称.键名[索引]}
Map 集合
${域名称.键名.key名称}
${域名称.键名["key名称"]}'
1.2 JSTL
1.2.1 概述
JSTL 的英文全称是 JavaServer Pages Standard Tag Library,中文全称是 JSP 标准标识库。JSTL 技术标准是由 JCP(Java Community Process)组织的 JSR052 专家组发布,Apache 组织将其列入 Jakarta 项目,Sun 公司将 JSTL 的程序包加入互联网服务开发工具包内(Web Services Developer Pack(WSDP)),作为 JSP 技术应用的一个标准。 JSTL 标签是基于 JSP 页面的,这些标签可以插入在 JSP 代码中,本质上 JSTL 也是提前定义好的一组标签,这些标签封装了不同的功能,在页面上调用标签时,就等于调用了封装起来的功能。JSTL 的目标是简化 JSP 页面的设计。对于页面设计人员来说,使用脚本语言操作动态数据是比较困难的,而采用标签和表达式语言则相对容易,JSTL 的使用为页面设计人员和程序开发人员的分工协作提供了便利。 JSTL 标识库的作用是减少 JSP 文件的 Java 代码,使 Java 代码与 HTML 代码分离,所以 JSTL 标识库符合 MVC 设计理念。MVC 设计理念的优势是将动作控制、数据处理、结果显示三者分离。
1.2.2 JSTL 的使用
JSTL 的五大标签库
库名 |
URI |
前缀 |
---|---|---|
Core(核心库) |
http://java.sun.com/jsp/jstl/core |
c |
I18N(国际化) |
http://java.sun.com/jsp/jstl/fmt |
fmt |
SQL |
http://java.sun.com/jsp/jstl/sql |
sql |
XML |
http://java.sun.com/jsp/jstl/xml |
x |
Functions |
http://java.sun.com/jsp/jstl/functions |
fn |
使用标签库
直接使用 taglib 引入会报红,需要先引入 jstl 的 jar 包
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
1.2.3 核心标签库
标签 |
描述 |
---|---|
<c:out> |
用于在 JSP 中显示数据,就像 <%= … > |
<c:set> |
用于保存数据 |
<c:remove> |
用于删除数据 |
<c:catch> |
用来处理产生错误的异常状况,并且将错误信息储存起来 |
<c:if> |
与我们在一般程序中用的 if 一样 |
<c:choose> |
本身只当做 <c:when> 和 <c:otherwise> 的父标签 |
<c:when> |
<c:choose> 的子标签,用来判断条件是否成立 |
<c:otherwise> |
<c:choose> 的子标签,接在 <c:when> 标签后,当 <c:when> 标签判断为 false 时被执行 |
<c:import> |
检索一个绝对或相对 URL,然后将其内容暴露给页面 |
<c:forEach> |
基础迭代标签,接受多种集合类型 |
<c:forTokens> |
根据指定的分隔符来分隔内容并迭代输出 |
<c:param> |
用来给包含或重定向的页面传递参数 |
<c:redirect> |
重定向至一个新的 URL |
<c:url> |
使用可选的查询参数来创造一个 URL |
示例
<%--
Created by IntelliJ IDEA.
User: Demo_Null
Date: 2020/6/23
Time: 17:17
To change this template use File | Settings | File Templates.
--%>
<%@ page import="cn.itcast.domain.User" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>test</title>
</head>
<body>
<%
List list = new ArrayList();
list.add(new User("张三",23,new Date()));
list.add(new User("李四",24,new Date()));
list.add(new User("王五",25,new Date()));
request.setAttribute("list",list);
%>
<table border="1" width="500" align="center">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>生日</th>
</tr>
<c:forEach items="${list}" var="user" varStatus="s">
<c:if test="${s.count % 2 != 0}">
<tr bgcolor="red">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birStr}</td>
</tr>
</c:if>
<c:if test="${s.count % 2 == 0}">
<tr bgcolor="green">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birStr}</td>
</tr>
</c:if>
</c:forEach>
</table>
</body>
</html>
1.2.4 格式化标签
标签 |
描述 |
---|---|
<fmt:formatNumber> |
使用指定的格式或精度格式化数字 |
<fmt:parseNumber> |
解析一个代表着数字,货币或百分比的字符串 |
<fmt:formatDate> |
使用指定的风格或模式格式化日期和时间 |
<fmt:parseDate> |
解析一个代表着日期或时间的字符串 |
<fmt:bundle> |
绑定资源 |
<fmt:setLocale> |
指定地区 |
<fmt:setBundle> |
绑定资源 |
<fmt:timeZone> |
指定时区 |
<fmt:setTimeZone> |
指定时区 |
<fmt:message> |
显示资源配置文件信息 |
<fmt:requestEncoding> |
设置request的字符编码 |
1.2.5 SQL 标签
标签 |
描述 |
---|---|
<sql:setDataSource> |
指定数据源 |
<sql:query> |
运行 SQL 查询语句 |
<sql:update> |
运行 SQL 更新语句 |
<sql:param> |
将 SQL 语句中的参数设为指定值 |
<sql:dateParam> |
将 SQL 语句中的日期参数设为指定的 java.util.Date 对象值 |
<sql:transaction> |
在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行 |
1.2.6 XML 标签
标签 |
描述 |
---|---|
<x:out> |
与 <%= … > ,类似,不过只用于 XPath 表达式 |
<x:parse> |
解析 XML 数据 |
<x:set> |
设置 XPath 表达式 |
<x:if> |
判断 XPath 表达式,若为真,则执行本体中的内容,否则跳过本体 |
<x:forEach> |
迭代 XML 文档中的节点 |
<x:choose> |
<x:when> 和 <x:otherwise> 的父标签 |
<x:when> |
<x:choose> 的子标签,用来进行条件判断 |
<x:otherwise> |
<x:choose> 的子标签,当 <x:when> 判断为 false 时被执行 |
<x:transform> |
将 XSL 转换应用在 XML 文档中 |
<x:param> |
与 <x:transform> 共同使用,用于设置 XSL 样式表 |
1.2.7 JSTL 函数
标签 |
描述 |
---|---|
fn:contains() |
测试输入的字符串是否包含指定的子串 |
fn:containsIgnoreCase() |
测试输入的字符串是否包含指定的子串,大小写不敏感 |
fn:endsWith() |
测试输入的字符串是否以指定的后缀结尾 |
fn:escapeXml() |
跳过可以作为XML标记的字符 |
fn:indexOf() |
返回指定字符串在输入字符串中出现的位置 |
fn:join() |
将数组中的元素合成一个字符串然后输出 |
fn:length() |
返回字符串长度 |
fn:replace() |
将输入字符串中指定的位置替换为指定的字符串然后返回 |
fn:split() |
将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回 |
fn:startsWith() |
测试输入字符串是否以指定的前缀开始 |
fn:substring() |
返回字符串的子集 |
fn:substringAfter() |
返回字符串在指定子串之后的子集 |
fn:substringBefore() |
返回字符串在指定子串之前的子集 |
fn:toLowerCase() |
将字符串中的字符转为小写 |
fn:toUpperCase() |
将字符串中的字符转为大写 |
fn:trim() |
移除首尾的空白符 |
- OOAD-设计模式(三)之创建型设计模式(5种)
- ActiveMQ笔记(5):JMX监控
- session失效时间设置
- ActiveMQ笔记(4):搭建Broker集群(cluster)
- OOAD-设计模式(二)之GRASP模式与GOF设计模式概述
- 围棋之幸?围棋之悲?史上最年轻“五冠王”柯洁宣布再战AI
- spring 在Thread中注入@Resource失败,总为null的解决方案
- ActiveMQ笔记(3):基于Networks of Brokers的HA方案
- HTML5 Video Player概览
- 统计01:概述
- ActiveMQ笔记(2):基于ZooKeeper的HA方案
- ActiveMQ笔记(2):基于ZooKeeper的HA方案
- CSS几个竖直与水平居中盒子模型
- ZooKeeper 笔记(6) 分布式锁
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python第三课——数据类型2
- python第四课——运算符
- python第五课——流程控制语句
- LNMP架构应用实战—Nginx反向代理负载均衡配置
- python第六课——判断结构
- MySQL数据库入门——备份数据库
- python第七课——循环结构 while
- python第八课——random模块的使用
- python第九课——while死循环
- python第十课——循环结构收尾
- python第十二课——for in循环
- Linux系统实战——批量无人值守安装操作系统
- python第十三课——嵌套循环
- python第十四课--排序及自定义函数
- python第十四课--排序及自定义函数之案例一:选择排序