全部章节   >>>>


本章目录

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 标签库

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

  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入门_El表达式_JSTL标签库

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

  4. 复习java web之jsp入门_El表达式_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. STL全特化与偏特化

    在泛型编程中,常常会使用一些非完全泛型的类模板,这就是特化. 如何理解全特化呢?如上图所示,第一个template class是空间配置器的类模板,第二个就是一个全特化的template class. ...

  2. NSMutableArray-->NSString

    1.如何把NSMutableArray 转化为NSString//用字符将NSArray中的元素拼接起来 NSArray *array = [NSArray arrayWithObjects:@&qu ...

  3. redis入门到精通系列(八):redis的高可用--主从复制详解

    (一)主从复制介绍 前面所讲的关于redis的操作都属于单机操作,单机操作虽然操作简单,但是处理能力有限,无法高可用.所谓高可用性,就是指当一台服务器宕机的时候,有备用的服务器能顶替上,在单机操作上这 ...

  4. 【编程思想】【设计模式】【结构模式Structural】MVC

    Python版 https://github.com/faif/python-patterns/blob/master/structural/mvc.py #!/usr/bin/env python ...

  5. 什么是微服务,SpringBoot和SpringCloud的关系和区别

    什么是微服务? 就目前而言对于微服务业界没有一个统一的,标准的定义.但通常而言,微服务是一种架构模式或者说是一种架构风格,它提倡单一应用程序划分为一组小的服务,每个服务在其独立的自己的进程中,服务之间 ...

  6. Mycat的事务异常:Caused by: java.sql.SQLException: Transaction error, need to rollback.Distributed transaction is disabled!

    工作中踩到的一个坑 ,一个报错,导致整个服务不能用.工程部署四个节点,请求是按轮询机制分发的,所以请求四次报错,整个系统瘫痪.记录下 . 项目环境:spring +Mybaties +mycat +D ...

  7. [BUUCTF]REVERSE——[GKCTF2020]BabyDriver

    [GKCTF2020]BabyDriver 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,检索程序里的字符串,看到提示flag是md5(input),下方还看到了类似迷宫的字符串 找到关 ...

  8. [BUUCTF]PWN——[V&N2020 公开赛]simpleHeap

    [V&N2020 公开赛]simpleHeap 附件 步骤: 例行检查,64位,保护全开 根据题目可知是一道堆,直接用64位ida打开 我修改了这些函数的名称,这样方便看程序 add,我们可以 ...

  9. OpenWrt之关闭IPv6

    目录 OpenWrt之关闭IPv6 1.前言 2.WAN口设置 3.LAN口设置 4.保存并应用 5.防火墙设置 6.DHCP/DNS设置 1)SSH连接路由器 2)输入第一条命令,按回车执行 3)输 ...

  10. CF200B Drinks 题解

    Content 有 \(n\) 杯饮料,第 \(i\) 杯饮料中橙汁占 \(a_i\%\).现在请求出这 \(n\) 杯饮料混合成一杯饮料后的橙汁所占百分比. 数据范围:\(1\leqslant n\ ...