全部章节 >>>>
本章目录
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 处理流 ...
随机推荐
-
mklink
$ mklink /D 参数:创建目录类型链接
-
查询oracle数据库,返回的数据是乱码。 PL/SQL正常。
查询oracle数据库,返回的数据是乱码. PL/SQL正常. 解决方案如下:
-
Envelope Letter
http://www.thefullwiki.org/More_C%2B%2B_Idioms/Envelope_Letter http://www.smallmemory.com/almanac/Co ...
-
bat批量去除文件首行和合并到文件
bat批量去除文件首行 set n=1 :starline for %%j in (*.txt) do ( :3 if exist D:\work\test\new_%n%.txt (set /a n ...
-
设置 BitmapData 没填充部分为透明色
默认 BitmapData 是以白色填充的 在初始化时,设定上每3,4个参数即可透明: new BitmapData(w,h,true,0) 第4个参数要为0
-
django学习の模型
orm:对象数据库和模型的映射.如果想以简单的方式去操作数据库,例如用类的方式去操作,就像 p = Person.get(id = 1),那么就必须使得代码和数据库的结构具有映射关系,实现这种关系,你 ...
-
bzoj4171 or 省队集训day3 chess: Rhl的游戏
[题目描述] RHL最近迷上一个小游戏:Flip it.游戏的规则很简单,在一个N*M的格子上,有一些格子是黑色,有一些是白色.每选择一个格子按一次,格子以及周围边相邻的格子都会翻转颜色(边相邻指至少 ...
-
H5 音频标签自定义样式修改以及添加播放控制事件
说明: 需求要求这个音频标签首先要是可适配移动端浏览器的,音频样式就是参考微信做的. 最终效果如下: 具体实现 思路: H5 的 <audio> 标签是由浏览器负责实现默认样式的.所以不同 ...
-
JMM
1.JMM简介 i.内存模型概述 Java平台自动集成了线程以及多处理器技术,这种集成程度比Java以前诞生的计算机语言要厉害很多,该语言针对多种异构平台的平*立性而使用的多线程技术支持也是具有开拓 ...
-
SSM-Spring-10:Spring中cglib动态代理
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 何为动态代理,就不扯皮了,上一篇博客刚刚提到,那cglib动态代理又怎么写,我拿个和上个例子相似的案例来写 具 ...