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 处理流 ...
随机推荐
- STL全特化与偏特化
在泛型编程中,常常会使用一些非完全泛型的类模板,这就是特化. 如何理解全特化呢?如上图所示,第一个template class是空间配置器的类模板,第二个就是一个全特化的template class. ...
- NSMutableArray-->NSString
1.如何把NSMutableArray 转化为NSString//用字符将NSArray中的元素拼接起来 NSArray *array = [NSArray arrayWithObjects:@&qu ...
- redis入门到精通系列(八):redis的高可用--主从复制详解
(一)主从复制介绍 前面所讲的关于redis的操作都属于单机操作,单机操作虽然操作简单,但是处理能力有限,无法高可用.所谓高可用性,就是指当一台服务器宕机的时候,有备用的服务器能顶替上,在单机操作上这 ...
- 【编程思想】【设计模式】【结构模式Structural】MVC
Python版 https://github.com/faif/python-patterns/blob/master/structural/mvc.py #!/usr/bin/env python ...
- 什么是微服务,SpringBoot和SpringCloud的关系和区别
什么是微服务? 就目前而言对于微服务业界没有一个统一的,标准的定义.但通常而言,微服务是一种架构模式或者说是一种架构风格,它提倡单一应用程序划分为一组小的服务,每个服务在其独立的自己的进程中,服务之间 ...
- Mycat的事务异常:Caused by: java.sql.SQLException: Transaction error, need to rollback.Distributed transaction is disabled!
工作中踩到的一个坑 ,一个报错,导致整个服务不能用.工程部署四个节点,请求是按轮询机制分发的,所以请求四次报错,整个系统瘫痪.记录下 . 项目环境:spring +Mybaties +mycat +D ...
- [BUUCTF]REVERSE——[GKCTF2020]BabyDriver
[GKCTF2020]BabyDriver 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,检索程序里的字符串,看到提示flag是md5(input),下方还看到了类似迷宫的字符串 找到关 ...
- [BUUCTF]PWN——[V&N2020 公开赛]simpleHeap
[V&N2020 公开赛]simpleHeap 附件 步骤: 例行检查,64位,保护全开 根据题目可知是一道堆,直接用64位ida打开 我修改了这些函数的名称,这样方便看程序 add,我们可以 ...
- OpenWrt之关闭IPv6
目录 OpenWrt之关闭IPv6 1.前言 2.WAN口设置 3.LAN口设置 4.保存并应用 5.防火墙设置 6.DHCP/DNS设置 1)SSH连接路由器 2)输入第一条命令,按回车执行 3)输 ...
- CF200B Drinks 题解
Content 有 \(n\) 杯饮料,第 \(i\) 杯饮料中橙汁占 \(a_i\%\).现在请求出这 \(n\) 杯饮料混合成一杯饮料后的橙汁所占百分比. 数据范围:\(1\leqslant n\ ...