Java Web程序设计笔记 • 【第10章 JSTL标签库】

时间:2021-08-16 00:46:59

全部章节   >>>>


本章目录

10.1 JSTL 概述

10.1.1 JSTL 简介

10.1.1 JSTL 使用

10.1.2 实践练习

10.2 核心标签库

10.2.1 核心标签库

10.2.1 标签

10.2.2 条件标签

10.2.2 标签

10.2.2 标签

10.2.3 迭代标签

10.2.4 实践练习

10.3 格式化标签

10.3.1 格式化标签库

10.3.1 格式化数字

10.3.2 格式化日期

10.3.3 实践练习

10.4 综合练习

10.4.1 BBS简介

10.4.1 BBS功能介绍

10.4.2 实践练习

总结


10.1 JSTL 概述

10.1.1 JSTL 简介

JSP 标准标签库(JavaServer Pages Standard Tag Library,JSTL),包含用于编写和开发 JSP 页面的一组标准标签,它可以为用户提供一个无脚本环境,通常和EL表达式配合使用

JSTL 提供 4 个主要的标签库,包括核心标签库、国际化与格式化标签库、SQL 标签库和 XML 标签库

Java Web程序设计笔记 • 【第10章 JSTL标签库】

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 页面中的代码进行条件判断和处理,而迭代标签用于循环遍历一个对象集合

核心标签库包含以下几种标签:

Java Web程序设计笔记 • 【第10章 JSTL标签库】

通用标签用于设置、删除和显示在 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=" 这是为空时默认值 " />

Java Web程序设计笔记 • 【第10章 JSTL标签库】

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>

Java Web程序设计笔记 • 【第10章 JSTL标签库】

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>

Java Web程序设计笔记 • 【第10章 JSTL标签库】

示例:使用<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>

Java Web程序设计笔记 • 【第10章 JSTL标签库】

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>

Java Web程序设计笔记 • 【第10章 JSTL标签库】

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" />

Java Web程序设计笔记 • 【第10章 JSTL标签库】

10.3.3 实践练习

10.4 综合练习

10.4.1 BBS简介

电子公告板(Bulletin Board System,BBS)最早是用来公布股市价格等类信息,一直到个人计算机开始普及之后,BBS 转移到个人计算机上,BBS 才开始渐渐普及开来

BBS主要功能如下:

  • 通过 BBS 系统可随时取得各种最新的信息
  • 通过 BBS 系统来和别人讨论计算类、生活类、游戏类等各种学科有趣的话题
  • 利用 BBS 系统来发布一些“征友”“廉价转让”“招聘人才”和“求职应聘”等启事
  • 召集亲朋好友到聊天室内高谈阔论

Java Web程序设计笔记 • 【第10章 JSTL标签库】Java Web程序设计笔记 • 【第10章 JSTL标签库】

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标签库】的更多相关文章

  1. Java Web程序设计笔记 • 【目录】

    章节 内容 实践练习 Java Web程序设计作业目录(作业笔记) 第1章 Java Web程序设计笔记 • [第1章 Web应用程序] 第2章 Java Web程序设计笔记 • [第2章 JSP基础 ...

  2. Java Web学习笔记之---EL和JSTL

    Java Web学习笔记之---EL和JSTL (一)EL (1)EL作用 Expression  Language(表达式语言),目的是代替JSP页面中复杂的代码 (2)EL表达式 ${变量名} ( ...

  3. java攻城师之路--复习java web之jsp入门&lowbar;El表达式&lowbar;JSTL标签库

    JSP 技术掌握:JSP语法 + EL + JSTL 为什么sun推出 JSP技术 ? Servlet 生成网页比较复杂,本身不支持HTML语法,html代码需要通过response输出流输出,JSP ...

  4. 复习java web之jsp入门&lowbar;El表达式&lowbar;JSTL标签库

    JSP 技术掌握:JSP语法 + EL + JSTL 为什么sun推出 JSP技术 ? Servlet 生成网页比较复杂,本身不支持HTML语法,html代码需要通过response输出流输出,JSP ...

  5. JavaWeb学习笔记(九)—— JSTL标签库

    一.JSTL概述 1.1 什么是JSTL  JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便,它与JSP动作标签一样,只不过它不是 ...

  6. 10、jstl标签库

    一.JSTL是SUN公司制定的一个JSP标签库,由apache jakarta组织负责维护的开源项目,目的是用标签代替java代码片段.JSTL 1.0 由四个定制标记库(core.format.xm ...

  7. Java Web程序设计笔记 • 【第2章 JSP基础】

    全部章节   >>>> 本章目录 2.1 JSP 简介 2.1.1 JSP 概述 2.1.2 开发第一个 JSP 页面 2.1.3 JSP 处理流程 2.1.4 实践练习 2. ...

  8. Java Web程序设计笔记 • 【第6章 Servlet技术进阶】

    全部章节   >>>> 本章目录 6.1 应用 Servlet API(一) 6.1.1 Servlet 类的层次结构 6.1.2 使用 Servlet API 的原则 6.1 ...

  9. Java Web程序设计笔记 • 【第5章 Servlet技术】

    全部章节   >>>> 本章目录 5.1 Servlet 技术介绍 5.1.1 为什么需要Servlet 5.1.1 Servlet 简介 5.1.2 Java Web 处理流 ...

随机推荐

  1. mklink

    $ mklink /D 参数:创建目录类型链接

  2. 查询oracle数据库,返回的数据是乱码。 PL&sol;SQL正常。

    查询oracle数据库,返回的数据是乱码. PL/SQL正常. 解决方案如下:

  3. Envelope Letter

    http://www.thefullwiki.org/More_C%2B%2B_Idioms/Envelope_Letter http://www.smallmemory.com/almanac/Co ...

  4. bat批量去除文件首行和合并到文件

    bat批量去除文件首行 set n=1 :starline for %%j in (*.txt) do ( :3 if exist D:\work\test\new_%n%.txt (set /a n ...

  5. 设置 BitmapData 没填充部分为透明色

    默认 BitmapData 是以白色填充的 在初始化时,设定上每3,4个参数即可透明: new BitmapData(w,h,true,0) 第4个参数要为0

  6. django学习の模型

    orm:对象数据库和模型的映射.如果想以简单的方式去操作数据库,例如用类的方式去操作,就像 p = Person.get(id = 1),那么就必须使得代码和数据库的结构具有映射关系,实现这种关系,你 ...

  7. bzoj4171 or 省队集训day3 chess&colon; Rhl的游戏

    [题目描述] RHL最近迷上一个小游戏:Flip it.游戏的规则很简单,在一个N*M的格子上,有一些格子是黑色,有一些是白色.每选择一个格子按一次,格子以及周围边相邻的格子都会翻转颜色(边相邻指至少 ...

  8. H5 音频标签自定义样式修改以及添加播放控制事件

    说明: 需求要求这个音频标签首先要是可适配移动端浏览器的,音频样式就是参考微信做的. 最终效果如下: 具体实现 思路: H5 的 <audio> 标签是由浏览器负责实现默认样式的.所以不同 ...

  9. JMM

    1.JMM简介 i.内存模型概述 Java平台自动集成了线程以及多处理器技术,这种集成程度比Java以前诞生的计算机语言要厉害很多,该语言针对多种异构平台的平*立性而使用的多线程技术支持也是具有开拓 ...

  10. SSM-Spring-10:Spring中cglib动态代理

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 何为动态代理,就不扯皮了,上一篇博客刚刚提到,那cglib动态代理又怎么写,我拿个和上个例子相似的案例来写 具 ...