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 处理流 ...
随机推荐
- 4.3 rust func closure
fn add_one_v1 (x: u32) -> u32 { x + 1 } let add_one_v2 = |x: u32| -> u32 { x + 1 }; let add_on ...
- Linux基础命令---mailq显示邮件队列
mailq mailq指令可以显示出待发送的邮件队列. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora. 1.语法 mailq 2.选项参数列表 ...
- redis入门到精通系列(二):redis操作的两个实践案例
在前面一篇博客中我们已经学完了redis的五种数据类型操作,回顾一下,五种操作类型分别为:字符串类型(string).列表类型(list).散列类型(hash).集合类型(set).有序集合类型(so ...
- Redis数据类型内部编码规则及优化方式
Redis的每个键值都是使用一个redisObject结构体保存的,redisObject的定义如下: typedef struct redisObject { unsigned type:4; un ...
- ActiveRecord教程
(一.ActiveRecord基础) ActiveRecord是Rails提供的一个对象关系映射(ORM)层,从这篇开始,我们来了解Active Record的一些基础内容,连接数据库,映射表,访问数 ...
- shell脚本下载网页图片
和大家分享一个shell脚本写的图片抓取器.使用方法:img_downloader.sh.使用时在shell下输入:./img_downloader.sh www.baidu.com -d image ...
- 【Linux】【Shell】【Basic】条件测试和变量
bash脚本编程 脚本文件格式: 第一行,顶格:#!/bin/bash 注释信息:# 代码注释: 缩进,适度添加空白行: ...
- ES6(模板字符串,三点运算符,Symbol,iterator接口)
模板字符串 作用:简化字符串的拼接 模板字符串必须用``包含 变化的部分使用${xxx}包含 对象的简写方式 同名的属性可以省略不写 可以省略函数的function 箭头函数 箭头函数的特点 箭头函数 ...
- matplotlib animation
import numpy as np from matplotlib import pyplot as plt from matplotlib import animation fig, ax = p ...
- Windows下搭建FFmpeg开发调试环境
背景 如果你是一个FFmpeg的使用者,那么绝大部分情况下只需要在你的程序中引用FFmpeg的libav*相关的头文件,然后在编译阶段链接相关的库即可. 但是如果你想调试FFmpeg内部相关的逻辑,或 ...