全部章节   >>>>


本章目录

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. 【leetcode】122.Best Time to Buy and Sell Stock II(股票问题)

    You are given an integer array prices where prices[i] is the price of a given stock on the ith day. ...

  2. Oracle——概要文件profile

    profile文件详解 一.目的         Oracle系统中的profile可以用来对用户所能使用的数据库资源进行限制,使用Create Profile命令创建一个Profile,用它来实现对 ...

  3. Oracle中的instr函数

    最近修改某个条件,由原来输入一个数据修改为可以输入多个,如图所示: 在实现时用到了regexp_substr函数进行分割连接起来的数据,查询时还用到了instr函数进行判断,但出现了问题,当子库存输入 ...

  4. HongYun项目启动

    一个前后端分离项目的启动顺序: 数据库启动, stams 后台springboot启动 中间路由启动,比如nginx,如果有的话:有这一层,后台可以设置负载均衡,可以动态部署 前端启动

  5. 【Python】【Algorithm】排序

    冒泡排序 dic = [12, 45, 22, 6551, 74, 155, 6522, 1, 386, 15, 369, 15, 128, 123, ] for j in range(1, len( ...

  6. Django REST framework完全入门

    Django REST framework 一个强大灵活的Django工具包,提供了便捷的 REST API 开发框架 我们用传统的django也可以实现REST风格的api,但是顶不住Django ...

  7. 【Python】文本包jieba使用

    看了一个教程:https://www.cnblogs.com/wkfvawl/p/9487165.html 有些不懂的地方自己查阅了一下 键值的添加,获得文件中相同字符出现的次数, counts = ...

  8. 详解 java 异常

    Throwable 可以用来表示任何可以作为异常抛出的类(注意,是类不是接口),分为两种: Error(注意!error也是可以throw的,但是不建议) 和 Exception. 其中 Error ...

  9. JavaMoney规范(JSR 354)与对应实现解读

    一.概述 1.1 当前现状 当前JDK中用来表达货币的类为java.util.Currency,这个类仅仅能够表示按照**[ISO-4217]**描述的货币类型.它没有与之关联的数值,也不能描述规范外 ...

  10. Mysql配置文件 16c64g优化

    目录 一.说明 二.配置 一.说明 以下配置适合16核64G及以上的配置,会让性能稍微提高1/3左右. 二.配置 my.cnf [client] port = 3306 socket = /usr/l ...