本章目录
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是标签库的引用地址
核心标签库中的通用标签用于操作 JSP 页面创建的范围变量,条件标签用于对 JSP 页面中的代码进行条件判断和处理,而迭代标签用于循环遍历一个对象集合
核心标签库包含以下几种标签:
通用标签用于设置、删除和显示在 JSP 页面内创建的变量值
<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
指定变量的范围
不可以
示例:使用
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省略}
示例:使用
<%@ 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 页面中的各种条件判断。 条件标签分为单条件判断的
<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>
语法:
<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>
语法:
<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
指定技术遍历的索引
不可以
参数名
类型
描述
index
int
当前循环的索引下标值
count
int
当前循环总次数
first
boolean
是否为第一次循环,即第一行
last
boolean
是否为最后一次循环,即最后一行
示例:使用
<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>
示例:使用
<!-- 迭代取出每一个 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>
格式化标签库主要用于处理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" />
电子公告板(Bulletin Board System,BBS)最早是用来公布股市价格等类信息,一直到个人计算机开始普及之后,BBS 转移到个人计算机上,BBS 才开始渐渐普及开来
BBS主要功能如下:
BBS为了满足日常交流沟通的功能,一般来说都包含如下功能模块:
手机扫一扫
移动阅读更方便
你可能感兴趣的文章