Servlet系列学习笔记9 --- JSTL标准标签库

目录

一、JSTL库的安装和引用

二、JSTL类库

三、核心标签库

       3.1 输出指令out标签

       3.2 判断指令if标签

       3.3 迭代指令forEach标签

       3.4 choose、when和otherwise标签

四、格式化标签


       JSTL(JSP Standard Tag Library)是JSP标准标签库,能够解决Web应用程序中常见功能的定制标记库集,例如迭代一个映射或集合、条件判断、XML 操作数据库访问以及数据操作等等

       本篇笔记主要记载JSTL中最重要的标签,例如访问域对象、迭代集合以及格式化数字和日期。

一、JSTL库的安装和引用

       (1) 使用JSTL需要下载Apache标准库中的二进包,官方下载地址如下:

http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

       (2) 下载压缩包并解压,将jakarta-taglibs-standard-1.1.2/lib/的两个 jar文件:standard.jarjstl.jar文件拷贝到/WEB-INF/lib/下。

       (3) 在需要使用 EL 语音的页面加上<%@ page isELIgnored="false" %>。表示是否禁用EL语言true表示禁止false表示不禁止JSP2.0中默认的启用EL语言。

       (4) Web.xml配置JSTL标签如下:

       但需要注意的是,如果没有在web.xml中配置JSTL标签库的话在没有联网的情况下无法使用JSTL。此时,就通过web.xml配置文件手动加载startand.jar中的c.tld、fmt.tldfn.tld等

<jsp-config>
<taglib>
  <taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>
  <taglib-location>/WEB-INF/fmt.tld</taglib-location>
</taglib>
<taglib>
  <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
  <taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
<taglib>
  <taglib-uri>http://java.sun.com/jsp/jstl/functions</taglib-uri>
  <taglib-location>/WEB-INF/fn.tld</taglib-location>
</taglib>
</jsp-config>

       指定文件使用JSTL标签库,必须在每个JSP文件的头部包含<taglib>标签

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

二、JSTL类库

       JSTL是JSP标准标签类库,通过多个标签类库来显露器动作指令,JSTL 1.2中标签可以被归纳5大类。

类别

下属功能

URL

前缀

Core

变量支持

http://java.sun.com/jsp/jstl/core

c

流向控制

URL管理

杂项

XML

Core

http://java.sun.com/jsp/jstl/xml

x

流向控制

转换

I18n

语言环境

http://java.sun.com/jsp/jstl/fmt

fmt

消息格式化

数字/日期格式化

数据库

SQL

http://java.sun.com/jsp/jstl/sql

sql

功能

集合长度

http://java.sun.com/jsp/jstl/functions

fn

字符串操作

三、核心标签库

       核心标签是最常用的JSTL标签,引用核心标签库的语法如下:

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

       常用指令如下表格所示:

标签

描述

<c:out>

用于在JSP中输出数据,就像<%= ... >

<c:set>

用于保存数据

<c:remove>

用于删除数据

<c:if>

条件判断语句

<c:forEach>

基础迭代标签,接受多种集合类型

<c:param>

用来给包含或重定向的页面传递参数

<c:catch>

用来处理产生错误的异常情况,并且将错误信息存储起来

3.1 输出指令out标签

       <c:out>标签可以对表达式进行运算,并将结果输出到页面中。out语法有两种形式,有主体内容和没有主体内容。

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

       * 标签属性如下

标签

类型

描述

必选

默认值

value

Object

要输出的内容

escapeXML

boolean

输出的默认值

主体中的内容

default

Object

是否忽略XML特殊字符

true

       * 案例代码如下:

<%
	String person = "张三";
	request.setAttribute("person",person);
%>
<c:out value="${person}"/>
<c:out value="${null}">
		默认值的作用就是如果输出的值为NULL,就默认输出默认值。
</c:out>

3.2 判断指令if标签

       <c:if>标签用来判断表达式的值,如果值为true,则执行其主体内容。语法格式如下所示:

<c:if test="<boolean>" var="<string>" scope="<string>">
    //执行内容  
</c:if>

       * 标签属性如下

属性

描述

必选

默认值

test

条件

var

用于存储条件结果的变量

scope

var属性的作用域

page

       * 案例代码如下

<c:set var="num" scope="request" value="100"/>
<c:if test="${requestScope.num < 100}">
    <p>num的值小于100<p>
</c:if>
<c:if test="${requestScope.num >= 100}"  var="result" scope="request">
    <p>num的值大于或等于100<p>
    <p>${result}<p>
</c:if>

3.3 迭代指令forEach标签

       <c:forEach>标签能够迭代一个集合中的所有对象。<c:forTokens>标签和<c:forEach>标签不同的是,<c:forTokens>标签通过指定分隔符将字符串分隔为一个数组然后迭代它们。也就是说前者针对集合,后者针对字符串。

       接下来主要针对<c:forEach>标签进行介绍。它的语法格式如下:

<c:forEach items="<object>" begin="<int>" end="<int>" step="<int>" var="<string>" varStatus="<string>">
    //迭代结果......
</c:forEach>

       * 标签属性如下

属性

描述

是否必要

默认值

items

要被循环的信息

var

代表当前条目的变量名称

begin

开始的元素索引

0

end

最后一个元素的索引

Last

step

每一次迭代的步长

1

varStatus

代表循环状态的变量名称

       * 案例代码如下

<c:set var="persons" value='"张三","李四","王五","周六","吴七"'/>
<div>1、迭代所有的元素</div>
<c:forEach items="${persons}" var="pers">
	<p>姓名:${pers}</p>
</c:forEach>
<div>2、迭代指定范围内的元素</div>
<c:forEach items="${persons}" var="pers" begin="1" end="3">
	<p>姓名:${pers}</p>
</c:forEach>
<div>3、获取相隔的元素(迭代步长)</div>
<c:forEach items="${persons}" var="pers" begin="0" end="4" step="2">
	<p>姓名:${pers}</p>
</c:forEach>

       * 结果如下所示

       上述第三个实例表示的是,对作用域名字为persons的字符数组对象,将索引为0到索引为4的元素,从起点开始每隔2个元素进行遍历。

       需要了解的是varStatus表示的是当前迭代的状态,它具有以下属性。

  1. current: 当前这次迭代的(集合中的)项
  2. index: 当前这次迭代从 0 开始的迭代索引
  3. count: 当前这次迭代从 1 开始的迭代计数
  4. first: 用来表明当前这轮迭代是否为第一次迭代的标志
  5. last: 用来表明当前这轮迭代是否为最后一次迭代的标志
  6. begin: 属性值
  7. end: 属性值
  8. step: 属性值

       这些相关状态的属性,可以由EL表达式来应用,例如下面例子所示

<c:forEach items="${persons}" var="pers" begin="1" end="3" step="1" varStatus="status">
	<p>当前索引:${status.index}</p>
	<p>当前序号:${status.count}</p> //当前迭代元素中的序号,而不是数组中
	<p>是否是第一项:${status.first}</p>
	<p>是否是第二项:${status.last}</p>
	<p>迭代起始索引:${status.begin}</p> //对应begin属性
	<p>迭代终止索引:${status.end}</p>	//对应end属性
	<p>跳跃步伐:${status.step}</p> //对应step属性
</c:forEach>

       最终结果如下图所示

3.4 choose、when和otherwise标签

       choose和when标签的作用与Java中的switch和case关键字相似,也就是说它们为互相排斥的条件式执行提供相关内容。如果所有when标签的判断结果都不为true,就会执行otherwise标签内的代码块。具体代码如下所示

<c:set var="num" value="5"/>
<c:choose>
	<c:when test="${num <= 2}">
		<p>num=${num}</p>
	</c:when>
	<c:when test="${num <= 4}">
		<p>num=${num}</p>
	</c:when>
	<c:otherwise>
		<p>num=${num}</p>
	</c:otherwise>
</c:choose>

四、格式化标签

       格式化标签能够用来格式化文本、日期、时间、数字,并且输出格式化的结果,使用格式化标签,需要引用fmt标签库,具体语法如下:

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

       这一部分,只介绍对日期格式化<fmt:formatDate>标签它的属性如下所示:

属性

描述

是否必要

默认值

value

要显示的日期

type

DATE, TIME, 或 BOTH

date

dateStyle

FULL, LONG, MEDIUM, SHORT, 或DEFAULT

default

timeStyle

FULL, LONG, MEDIUM, SHORT, 或DEFAULT

default

pattern

自定义格式模式

timeZone

显示日期的时区

默认时区

var

存储格式化日期的变量名

显示在页面

scope

存储格式化日志变量的范围

页面

       * <fmt:formatDate> 标签格式模式如下

代码

描述

G

时代标志

y

不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。

M

月份数字。一位数的月份没有前导零。

d

月中的某一天。一位数的日期没有前导零。

h

12 小时制的小时。一位数的小时数没有前导零。

H

24 小时制的小时。一位数的小时数没有前导零。

m

分钟。一位数的分钟数没有前导零。

s

秒。一位数的秒数没有前导零。

S

毫秒

E

周几

D

一年中的第几天

F

一个月中的第几个周几

w

一年中的第几周r

W

一个月中的第几周

a

a.m./p.m. 指示符

k

小时(12 小时制的小时)

K

小时(24 小时制的小时)

z

时区

       案例代码如下所示:

<c:set var="now" value="<%=new java.util.Date()%>" />
案例1:<fmt:formatDate type="time" value="${now}"/>
案例2:<fmt:formatDate type="date" value="${now}"/>
案例3:<fmt:formatDate type="both" value="${now}"/>
案例4:<fmt:formatDate type="both" dateStyle="short" timeStyle="short" value="${now}" />
案例5:<fmt:formatDate type="both" dateStyle="medium" timeStyle="medium" value="${now}" />
案例6: <fmt:formatDate type="both" dateStyle="long" timeStyle="long"  value="${now}" />
案例7: <fmt:formatDate pattern="yyyy-MM-dd" value="${now}" />

       最终结果

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值