Java Web程序设计笔记 • 【第10章 JSTL标签库】
全部章节 >>>>
本章目录
10.1 JSTL 概述
10.1.1 JSTL 简介
JSP 标准标签库(JavaServer Pages Standard Tag Library,JSTL),包含用于编写和开发 JSP 页面的一组标准标签,它可以为用户提供一个无脚本环境,通常和EL表达式配合使用
JSTL 提供 4 个主要的标签库,包括核心标签库、国际化与格式化标签库、SQL 标签库和 XML 标签库

10.1.1 JSTL 使用
JSP界面默认情况下不能直接使用JSTL标签库,必须在JSP页面的首行中使用“<%@ taglib %>”指令定义标签库的引用位置和访问前缀,以区分Html标签
各标签库的定义如下:
核心标签库:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
国际化与格式化:
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
SQL标签库:
<%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
XML标签库:
<%@taglib uri=”http://java.sun.com/jsp/jstl/xml” prefix=”xml”%>
示例:JSP界面中使用JSTL核心标签库
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
说明:
- taglib是导入标签库的指令 prefix代表标签使用时前缀,可以更改,主要是和html标签加以区分
- uri是标签库的引用地址
10.1.2 实践练习
10.2 核心标签库
10.2.1 核心标签库
核心标签库中的通用标签用于操作 JSP 页面创建的范围变量,条件标签用于对 JSP 页面中的代码进行条件判断和处理,而迭代标签用于循环遍历一个对象集合
核心标签库包含以下几种标签:

通用标签用于设置、删除和显示在 JSP 页面内创建的变量值
<c:out>:计算表达式并将结果存储在当前的 JspWriter 对象中
<c:out value="value" escapeXml="true|false“ default="defaultValue"/>
|
参数名 |
类型 |
描述 |
引用EL |
|
value |
Object |
要输出的表达式 |
可以 |
|
default |
Object |
指定输出结果为 null 时的默认值 |
不可以 |
|
escapeXml |
Object |
确定是否应将结果中的字符串(如<、>、&)转换成字符实体代码,默认值为 true |
不可以 |
示例:使用<c:out>标签输出内容
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
session.setAttribute("book", "java");
%>
直接输出字符串 :<c:out value="book" />
直接输出字符串 :<c:out value="<a href='#'>
此超链接无效,因 escapeXml 默认为 true</a>" />
直接输出字符串 :<c:out value="<a href='#'>
此超链接有效,因 escapeXml 设置为 false</a>“ escapeXml="false" />
输出作用域中不存在的对象:<c:out value="${test}" default=" 这是为空时默认值 " />

10.2.1 <c:set>标签
<c:set>:设置页面中的变量或对象属性值,即声明一个变量或对象
<c:set var="varName" value="value" target="target" property="propertyName"
scope="page|request|session|application"/>
|
参数名 |
类型 |
描述 |
引用EL |
|
value |
Object |
将要存储的变量值 |
可以 |
|
var |
String |
存储变量值的变量名称 |
不可以 |
|
target |
Object |
指定要设置属性的对象 |
可以 |
|
property |
String |
指定当前要为对象设置的属性名称 |
可以 |
|
scope |
String |
指定变量的范围 |
不可以 |
示例:使用<c:set>标签输出内容1 创建BookInfo图书实体类
public class BookInfo {
private String bookId; // 书号
private String bookName; // 书名
private double price; // 单价
// 有参构造方法
public BookInfo(String bookId, String bookName, double price) {
this.bookId = bookId;
this.bookName = bookName;
this.price = price;
}
//getter/setter省略}
示例:使用<c:set>标签输出内容2
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!-- 创建一个对象,并存入 Session 作用域中 -->
<jsp:useBean id="bookInfo" class="com.exam.BookInfo" scope="session" />
<!-- 使用 c:set 标签设置指定域中某个属性的值 -->
<c:set var="bookName" value="java" />
输出 session 指定域中 bookName 属性的值 :<c:out value="${bookName}" />
<hr />
<!-- 使用 c:set 标签设置指定域中某个属性对象的属性值 -->
<c:set target="${bookInfo}" property="bookName" value="${bookName}" />
输出 session 中 bookInfo 对象的 bookName 属性值 :
<c:out value="${bookInfo.bookName}" />
用于删除创建的变量 :
<c:remove var="varName" scope="page|request|session|application"/>
|
参数名 |
类型 |
描述 |
引用EL |
|
var |
String |
要删除的变量名 |
不可以 |
|
scope |
String |
指定变量的范围 |
不可以 |
示例:使用<c:remove>标签删除作用域范围变量
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<body>
<c:set var="salary" scope="session" value="${2000*2}" />
<p>salary 变量值 : <c:out value="${salary}" />
</p>
<c:remove var="salary" />
<p>
删除 salary 变量后的值 : <c:out value="${salary}" />
</p>
</body>

10.2.2 条件标签
JSTL 条件标签用于支持 JSP 页面中的各种条件判断。 条件标签分为单条件判断的<if>和多条件判断的<c:choose>
<c:if>:用于单条件判断,相当于Java中的if结构
<c:if test=“条件表达式" >
如果test中结果为true,则执行if中代码
</c:if>
10.2.2 <c:if>标签
示例:使用<c:if>标签实现判断
<!-- 默认不打折 -->
<c:if test="${grade ge 1}">
<c:set var="mustPay" value="${shopPrice*quantity*0.9}" />
</c:if>
<c:if test="${grade ge 2}">
<c:set var="mustPay" value="${shopPrice*quantity*0.8}" />
</c:if>
<c:if test="${grade ge 3}">
<c:set var="mustPay" value="${shopPrice*quantity*0.1}" />
</c:if>
10.2.2 <c:choose>标签
<c:choose>类似于 Java 中的 switch 语句,用于执行多条件语句块
语法:
<c:choose>
<c:when test=“条件1">
Body Content1
</c:when>
<c:when test=“条件2">
Body Content2
</c:when>
......
<c:otherwise>
Body Content
</c:otherwise>
</c:choose>
示例:使用<c:choose>标签实现多条件判断
<c:choose><c:when test="${grade ge 1}">
<c:set var="mustPay" value="${shopPrice*quantity*0.9}" />
</c:when>
<c:when test="${grade ge 2}">
<c:set var="mustPay" value="${shopPrice*quantity*0.8}" />
</c:when>
<c:otherwise>
<c:set var="mustPay" value="${shopPrice*quantity}" />
</c:otherwise></c:choose>
10.2.3 <c:forEach>迭代标签
<c:forEach> 循环迭代标签用于重复在整个对象集合中嵌套的标签体内容,遍历次数可由用户在代码中指定,类似于Java中的for循环
语法:
<c:forEach var="varName" items="collection" varStatus="varStatusName"
begin="begin" end="end">
Body Content
</c:forEach>
<c:forEach> 迭代标签参数说明如下
|
参数名 |
类型 |
描述 |
引用EL |
|
items |
数组、集合类、字符串和枚举类型 |
将要迭代的集合对象 |
可以 |
|
var |
String |
指定将当前迭代到的元素保存到 page 作用域中的属性名称 |
不可以 |
|
varStatus |
String |
循环过程中产生的状态对象信息,如循环下标、总数等 |
不可以 |
|
begin |
int |
指定开始遍历的索引 |
不可以 |
|
end |
int |
指定技术遍历的索引 |
不可以 |
<c:forEach> 循环迭代过程中产生的varStatus代表循环状态对象,通过状态对象可以获取循环中的数据信息
|
参数名 |
类型 |
描述 |
|
index |
int |
当前循环的索引下标值 |
|
count |
int |
当前循环总次数 |
|
first |
boolean |
是否为第一次循环,即第一行 |
|
last |
boolean |
是否为最后一次循环,即最后一行 |
示例:使用<c:forEach>迭代标签实现List集合数据循环
<c:forEach var="book" items="${bookList}" varStatus="varIndex"> <!-- varIndex是循环状态对象 -->
<c:if test="${varIndex.index mod 2 eq 0 }"> <!-- 如果是偶数行,黄色背景-->
<tr bgcolor="yellow">
</c:if>
<c:if test="${varIndex.index mod 2 ne 0}"> <!-- 如果是奇数行,青色背景 -->
<tr bgcolor="cyan">
</c:if>
<td>${book.bookId }</td>
<td>${book.bookName }</td> <!-- 使用EL表达式循环取出数据显示 -->
<td>${book.price }</td>
</c:forEach>

示例:使用<c:forEach>迭代标签实现Map集合数据循环
<!-- 迭代取出每一个 bookMap 实例 -->
<c:forEach var="book" items="${bookMap}">
<tr>
<td>${book.key }</td><!-- 取出Map中每一项的key -->
<td>${book.value.bookName }</td> <!-- 取出Map中每一项的value中数据 -->
<td>${book.value.price }</td>
</tr>
</c:forEach>

10.2.4 实践练习
10.3 格式化标签
10.3.1 格式化标签库
- 格式化标签库主要用于处理JSP界面中的日期、小数等数据的格式化显示
- 在JSP界面中使用格式化标签时,需要引入如下指令导入标签库
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
10.3.1 格式化数字
格式化数字可使用 <fmt:formatNumber> 标签,可以指定保留小数位数
使用语法格式如下:
<fmt:formatNumber value="num" maxFractionDigits="maxDigits"
type="number|currency|percent" />
|
参数名 |
类型 |
描述 |
引用EL |
|
value |
String,Number |
指定被格式化的数字 |
可以 |
|
type |
String |
1、number代表数字 2、currency货币格式 3、percent百分比格式 |
可以 |
|
maxFractionDigits |
int |
小数位数 |
可以 |
示例:使用<fmt:formatNumber>格式化数字
<h3>
未格式化之前的结果:${price }<br /> 以货币的形式格式化的结果:
<fmt:formatNumber value="${price}" type="currency" />
<br /> 以百分比的形式格式化的结果:
<fmt:formatNumber value="${price}" maxFractionDigits="1"
type="percent" />
<br /> 以四舍五入一位的形式格式化的结果:
<fmt:formatNumber value="${price}" maxFractionDigits="1" />
<br />
</h3>

10.3.2 格式化日期
格式化日期可使用 <fmt:formatDate> 标签实现,可以设置日期格式
使用语法格式如下:
<fmt:formatDate value="date" pattern="pattern"/>
|
参数名 |
类型 |
描述 |
引用EL |
|
value |
Java.util.Date |
指定被格式化的日期 |
可以 |
|
pattern |
String |
日期格式化格式,如: yyyy-MM-dd HH:mm:ss |
可以 |
示例:使用<fmt:formatDate>格式化日期输出
<%
Date today = new Date(); // 创建日期对象
pageContext.setAttribute("today", today); // 存放于 Page 范围内
%>
未格式化前的日期:${today }<br /> 以 yyyy-MM-dd 形式格式化:
<fmt:formatDate value="${today}" pattern="yyyy-MM-dd" />
<br /> 以 yyyy 年 MM 月 dd 形式格式化:
<fmt:formatDate value="${today}" pattern="yyyy 年 MM 月 dd 日 " />
<br /> 以 yyyy 年 MM 月 dd hh:mm:ss 形式格式化:
<fmt:formatDate value="${today}" pattern="yyyy 年 MM 月 dd hh:mm:ss" />

10.3.3 实践练习
10.4 综合练习
10.4.1 BBS简介
电子公告板(Bulletin Board System,BBS)最早是用来公布股市价格等类信息,一直到个人计算机开始普及之后,BBS 转移到个人计算机上,BBS 才开始渐渐普及开来
BBS主要功能如下:
- 通过 BBS 系统可随时取得各种最新的信息
- 通过 BBS 系统来和别人讨论计算类、生活类、游戏类等各种学科有趣的话题
- 利用 BBS 系统来发布一些“征友”“廉价转让”“招聘人才”和“求职应聘”等启事
- 召集亲朋好友到聊天室内高谈阔论


10.4.1 BBS功能介绍
BBS为了满足日常交流沟通的功能,一般来说都包含如下功能模块:
- 用户管理(注册、登录、管理员管理用户列表、删除用户、禁用用户等)
- 版块管理(增加版块、修改版块、查询版块)
- 帖子管理(发帖、查看版块下帖子列表、帖子搜索、删除帖子、查看帖子详情)
- 回复管理(回复帖子、帖子回复查询、帖子删除)
10.4.2 实践练习
总结
- JSTL 是JSP中的一组标准标签库,用于替代脚本代码,规范JSP界面的开发
- JSTL在JSP界面中使用时需要加入taglib指令导入对应的标签库,指定前缀名
- JSTL包含核心标签库、格式化标签库、SQL标签库、XML标签库,最为常用的是核心标签库和格式化标签库
- 核心标签库包括<c:out>和<c:set>通用标签、<c:if>和<c:choose>条件判断标签、<c:forEach>循环迭代标签等
- 格式化标签主要用于将日期、数字等进行格式化显示,常用的有:<c:formatNumber>数字格式化和<c:formatDate>日期格式化标签
Java Web程序设计笔记 • 【第10章 JSTL标签库】的更多相关文章
- Java Web程序设计笔记 • 【目录】
章节 内容 实践练习 Java Web程序设计作业目录(作业笔记) 第1章 Java Web程序设计笔记 • [第1章 Web应用程序] 第2章 Java Web程序设计笔记 • [第2章 JSP基础 ...
- Java Web学习笔记之---EL和JSTL
Java Web学习笔记之---EL和JSTL (一)EL (1)EL作用 Expression Language(表达式语言),目的是代替JSP页面中复杂的代码 (2)EL表达式 ${变量名} ( ...
- java攻城师之路--复习java web之jsp入门_El表达式_JSTL标签库
JSP 技术掌握:JSP语法 + EL + JSTL 为什么sun推出 JSP技术 ? Servlet 生成网页比较复杂,本身不支持HTML语法,html代码需要通过response输出流输出,JSP ...
- 复习java web之jsp入门_El表达式_JSTL标签库
JSP 技术掌握:JSP语法 + EL + JSTL 为什么sun推出 JSP技术 ? Servlet 生成网页比较复杂,本身不支持HTML语法,html代码需要通过response输出流输出,JSP ...
- JavaWeb学习笔记(九)—— JSTL标签库
一.JSTL概述 1.1 什么是JSTL JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便,它与JSP动作标签一样,只不过它不是 ...
- 10、jstl标签库
一.JSTL是SUN公司制定的一个JSP标签库,由apache jakarta组织负责维护的开源项目,目的是用标签代替java代码片段.JSTL 1.0 由四个定制标记库(core.format.xm ...
- Java Web程序设计笔记 • 【第2章 JSP基础】
全部章节 >>>> 本章目录 2.1 JSP 简介 2.1.1 JSP 概述 2.1.2 开发第一个 JSP 页面 2.1.3 JSP 处理流程 2.1.4 实践练习 2. ...
- Java Web程序设计笔记 • 【第6章 Servlet技术进阶】
全部章节 >>>> 本章目录 6.1 应用 Servlet API(一) 6.1.1 Servlet 类的层次结构 6.1.2 使用 Servlet API 的原则 6.1 ...
- Java Web程序设计笔记 • 【第5章 Servlet技术】
全部章节 >>>> 本章目录 5.1 Servlet 技术介绍 5.1.1 为什么需要Servlet 5.1.1 Servlet 简介 5.1.2 Java Web 处理流 ...
随机推荐
- Vue相关,diff算法。
1. 当数据发生变化时,vue是怎么更新节点的? 要知道渲染真实DOM的开销是很大的,比如有时候我们修改了某个数据,如果直接渲染到真实dom上会引起整个dom树的重绘和重排,有没有可能我们只更新我们修 ...
- 集合类——Collection、List、Set接口
集合类 Java类集 我们知道数组最大的缺陷就是:长度固定.从jdk1.2开始为了解决数组长度固定的问题,就提供了动态对象数组实现框架--Java类集框架.Java集合类框架其实就是Java针对于数据 ...
- springboot-使用AOP日志拦截实现
一 前言 借助spring的AOP功能,我们可以将AOP应用至全局异常处理,全局请求拦截等,本篇文章的核心功能就是使用AOP实现日志记录,比如哪些用户进行了哪些操作,对于一个成功的项目这是必须记录的, ...
- Type difference of character literals in C and C++
Every literal (constant) in C/C++ will have a type information associated with it. In both C and C++ ...
- vue 键盘事件keyup/keydoen
使用: <!DOCTYPE html> <html> <head> <title></title> <meta charset=&qu ...
- maven管理本地jar包
maven作为包管理工具,好处不必多说.但是有些情况,比如需要引入第三方包,如快递鸟,支付宝,微信等jar包(当然有可能直接提供maven依赖),如果直接下载到本地之后,怎么整合到自己的maven工程 ...
- 【Fastjson】Fastjson反序列化由浅入深
Fastjson真-简-介 fastjson是由alibaba开发并维护的一个json工具,以其特有的算法,号称最快的json库 fastjson的使用 首先先创一个简单的测试类User public ...
- Tableau如何绘制瀑布图
一.将子类别拖至列,利润拖拽至行,类型改为甘特条形图 二 右键利润-快速表计算-汇总(数据会从左向右显示累计汇总) 三.创建计算字段-[利润] 四.将负利润拖拽到大小,利润拖拽到颜色 分析-合计-显示 ...
- GaussDB(DWS)中共享消息队列实现的三大功能
摘要:本文将详细介绍GaussDB(DWS)中共享消息队列的实现. 本文分享自华为云社区<GaussDB(DWS)CBB组件之共享消息队列介绍>,作者:疯狂朔朔. 1)共享消息队列是什么? ...
- 又拿奖了!腾讯云原生数据库TDSQL-C斩获2021PostgreSQL中国最佳数据库产品奖
日前,开源技术盛会PostgresConf.CN & PGconf.Asia2021大会(简称2021 PG亚洲大会)在线上隆重召开,腾讯云作为业内领先的云数据库服务商受邀出席,多位专家深入数 ...