Java Web程序设计笔记 • 【第10章 JSTL标签库】
阅读原文时间:2022年03月03日阅读:1

全部章节   >>>>


本章目录

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 概述

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

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

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.2 核心标签库

核心标签库中的通用标签用于操作 JSP 页面创建的范围变量,条件标签用于对 JSP 页面中的代码进行条件判断和处理,而迭代标签用于循环遍历一个对象集合

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

通用标签用于设置、删除和显示在 JSP 页面内创建的变量值

:计算表达式并将结果存储在当前的 JspWriter 对象中

<c:out value="value" escapeXml="true|false“  default="defaultValue"/>

参数名

类型

描述

引用EL

value

Object

要输出的表达式

可以

default

Object

指定输出结果为 null 时的默认值

不可以

escapeXml

Object

确定是否应将结果中的字符串(如<、>、&)转换成字符实体代码,默认值为 true

不可以

示例:使用标签输出内容

<%@ 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=" 这是为空时默认值 " />

:设置页面中的变量或对象属性值,即声明一个变量或对象

<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

指定变量的范围

不可以

示例:使用标签输出内容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省略}

示例:使用标签输出内容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

指定变量的范围

不可以

示例:使用标签删除作用域范围变量

<%@ 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>

JSTL 条件标签用于支持 JSP 页面中的各种条件判断。 条件标签分为单条件判断的和多条件判断的

:用于单条件判断,相当于Java中的if结构

 <c:if test=“条件表达式" >
    如果test中结果为true,则执行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>

类似于 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: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>

循环迭代标签用于重复在整个对象集合中嵌套的标签体内容,遍历次数可由用户在代码中指定,类似于Java中的for循环

语法:

<c:forEach var="varName" items="collection" varStatus="varStatusName"
begin="begin" end="end">
    Body Content
</c:forEach>

迭代标签参数说明如下

参数名

类型

描述

引用EL

items

数组、集合类、字符串和枚举类型

将要迭代的集合对象

可以

var

String

指定将当前迭代到的元素保存到

page 作用域中的属性名称

不可以

varStatus

String

循环过程中产生的状态对象信息,如循环下标、总数等

不可以

begin

int

指定开始遍历的索引

不可以

end

int

指定技术遍历的索引

不可以

循环迭代过程中产生的varStatus代表循环状态对象,通过状态对象可以获取循环中的数据信息

参数名

类型

描述

index

int

当前循环的索引下标值

count

int

当前循环总次数

first

boolean

是否为第一次循环,即第一行

last

boolean

是否为最后一次循环,即最后一行

示例:使用迭代标签实现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>

示例:使用迭代标签实现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.3 格式化标签

  • 格式化标签库主要用于处理JSP界面中的日期、小数等数据的格式化显示

  • 在JSP界面中使用格式化标签时,需要引入如下指令导入标签库

    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

格式化数字可使用 标签,可以指定保留小数位数

使用语法格式如下:

<fmt:formatNumber value="num" maxFractionDigits="maxDigits"
type="number|currency|percent" />

参数名

类型

描述

引用EL

value

String,Number

指定被格式化的数字

可以

type

String

1、number代表数字

2、currency货币格式

3、percent百分比格式

可以

maxFractionDigits

int

小数位数

可以

示例:使用格式化数字

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

格式化日期可使用 标签实现,可以设置日期格式

使用语法格式如下:

<fmt:formatDate value="date" pattern="pattern"/>

参数名

类型

描述

引用EL

value

Java.util.Date

指定被格式化的日期

可以

pattern

String

日期格式化格式,如:

yyyy-MM-dd HH:mm:ss

可以

示例:使用格式化日期输出

<%
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.4 综合练习

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

BBS主要功能如下:

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

BBS为了满足日常交流沟通的功能,一般来说都包含如下功能模块:

  • 用户管理(注册、登录、管理员管理用户列表、删除用户、禁用用户等)
  • 版块管理(增加版块、修改版块、查询版块)
  • 帖子管理(发帖、查看版块下帖子列表、帖子搜索、删除帖子、查看帖子详情)
  • 回复管理(回复帖子、帖子回复查询、帖子删除)

总结

  • JSTL 是JSP中的一组标准标签库,用于替代脚本代码,规范JSP界面的开发
  • JSTL在JSP界面中使用时需要加入taglib指令导入对应的标签库,指定前缀名
  • JSTL包含核心标签库、格式化标签库、SQL标签库、XML标签库,最为常用的是核心标签库和格式化标签库
  • 核心标签库包括通用标签、条件判断标签、循环迭代标签等
  • 格式化标签主要用于将日期、数字等进行格式化显示,常用的有:数字格式化和日期格式化标签

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章