JavaWeb学习——JSTL

JSTL


 

 

一、JSTL简介

    JSP标准标签库(JavaServer Pages Standard Tag Library, JSTL)是一个定制标签库的集合,用来解决像遍历Map或集合、条件测试、XML处理,甚至数据库访问和数据操作等常见问题。

    JSTL下载:https://pan.baidu.com/s/1az54R_a8GkG0mwHDIjHjNg  

    然后将lib下的两个jar文件:standard.jar和jstl.jar文件拷贝到/WEB-INF/lib/下。

 

二、JSTL库

    JSTL 1.2 中的标签可以分为5类区域,如下表:

区域子函数URI前缀
核心       变量支持  http://java.sun.com/jsp/jstl/core  c
流控制
URL管理
其他
XML核心  http://java.sun.com/jsp/jstl/xmlx
流控制
转换
国际化语言区域  http://java.sun.com/jsp/jstl/fmt  fmt   
消息格式化
数字和日期格式化   
数据库SQL  http://java.sun.com/jsp/jstl/sqlsql
函数集合长度  http://java.sun.com/jsp/jstl/functions  fn
字符换操作

 

    在JSP页面使用JSTL库,必须通过以下格式使用taglib指令:

    <%@ taglib uri="uri" prefix="prefix" %>

    例如,要使用Core库,必须在JSP页面的开头处做以下声明:

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

 

三、一般行为

    下面介绍Core库中用来操作有界变量的三个一般行为:out、set、remove。

    注意:在标签的语法中,[ ]表示可选的属性。如果值带下划线,则表示为默认值。

    1. out标签

    out标签在运算表达式时,是将结果输出到当前的JSPWriter。out语法有两种,即有body content和没有body content:

<c:out value="value"  [escapeXml="{true|false}"]  [default="defaultValue"] />

<c:out value="value"  [escapeXml="{true|false}"]  [default="defaultValue"] >
    body content
</c:out>

 

属性类型描述
value对象要计算的表达式
escapeXml   布尔 表示结果中的字符<、>、&、’和”将被转换成相应的实体码   
default对象   默认值

    例如,在下面的out标签中,如果在HttpSession中没有找到myVar变量,就会显示应用程序范围的变量myVar值。如果没有找到,则输出一个空字符串。

<c:out value="${sessionScope.myVar }" default="${applicationScope.myVar }" />

    2. set标签

    利用set标签,可以完成以下工作:

    (1)创建一个字符串和一个引用该字符串的有界变量。

    (2)创建一个引用现存有界对象的有界变量。

    (3)设置有界对象的属性。

    set标签的语法有四种形式:

//第一种创建有界变量,并用value属性在其中定义一个要创建的字符串或者现有对象
<c:set value="value" var="varName" [scope="{page|request|session|application}"] />

//第二种与第一种相似,只是赋值在body content中完成
<c:set var="varName" [scope="{page|request|session|application}"] />
    body content
</c:set>

//第三种是设置有界对象的属性值。
<c:set target="target" property="propertyName" value="value" />
//例:将字符串Tokyo赋予有界对象address的city属性
<c:set target="${address}" property="city" value="Tokyo" />
//注:必须在target中用EL表达式来引用这个有界对象

//第四种与第三种相似,只是赋值在body content中完成
<c:set target="target" property="propertyName" >
    body content
</c:set>
//例:将字符串Beijing赋予有界对象address的city属性
<c:set target="${address}" property="city">Beijing</c:set>

    3. remove标签

    remove标签用于删除有界变量,语法如下:

<c:remove var="varName" [scope="{page|request|session|application}"] />

    注意,有界变量引用的对象不能删除。

 

四、条件行为

    条件行为用于处理页面输出取决于特定输出值的情况,这在Java中是利用if、if...else和switch声明解决的。

    JSTL中执行条件行为的有4个标签,即if、choose、when和otherwise标签。

    1. if 标签

    if 标签是对一个条件进行测试,如果结果为TRUE,则处理它的body content。测试结果保存在Boolean对象中,并创建有界变量来引用这个Boolean对象。

    if 的语法有两种:

//没有body content
<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"] />

//有body content
<c:if test="testCondition" [var="varName"]  [scope="{page|request|session|application"] >
    body content
</c:if>

    例如,下面测试user和password参数值是否分别为ken和blackcomb,并将结果保存在页面范围的变量loggedIn中。

<c:if var="loggedIn" test="${param.user=='ken'&&param.password=='blackcomb'}" />

${(loggedIn) ? "You logged in successfully" : "Login failed" }

    2. choose、when和otherwise标签

    choose和when标签的作用与Java中的switch和case类似。choose标签中必须嵌有一个或多个when标签,并且每个when标签都表示一种可以计算和处理的情况。otherwise标签用于默认的条件块,假如没有任何一个when标签测试条件结果为TRUE,它就会得到处理。

    choose和otherwise标签没有属性。when标签必须带有定义测试条件的test属性。

<c:choose>
    <c:when test="${param.status=='full'}">
        You are a full member
    </c:when>
    <c:when test="${param.status=='student'}">
        You are a student member
    </c:when>
    <c:otherwise>
        Please register
    </c:otherwise>
</c:choose>

 

五、遍历行为

    当需要无数次地遍历一个对象集合时,遍历行为就是十分重要。JSTL提供了 forEach 和 forTokens 两个执行遍历行为的标签。

    1. forEach 标签

    forEach 可以遍历的对象包括java.util.Collection 和 java.util.Map 的所有实现,以及对象数组或者主类型。也可以遍历java.util.Iterator 和 java.util.Enumration,但不应该在多个行为中使用Iterator 或者 Enumeration,因为无法重置Iterator 和 Enumeration。

    forEach 标签的语法有两种形式。

//第一种形式是固定次数地重复body content
<c:forEach [var="varName"] begin="begin" end="end" step="step">
    body content
</c:forEach>

//第二种形式用于遍历对象集合
<c:forEach items="collection"  [var="varName"] [varStatus="varStatusName"]  [begin="begin"]  [end="end"]  [step="step"]>
    body content
</c:forEach>

    forEach 标签的属性如下表:

属性类型描述            
var 字符串     引用遍历的当前项目的有界变量名称    
items   支持的任意类型    遍历的对象集合
varStatus   字符串保存遍历状态的有界变量名称。类型值为javax.servlet.jsp.jstl.core.LoopTagStatus   
begin整数

如果指定items,遍历将从指定索引处的项目开始,例如,集合中第一个项目的索引为0。

如果没有指定items,遍历将从设定的索引值开始。如果指定,begin的值必须大于或者等于0

end 整数

如果指定items,遍历将在(含)指定索引处的项目结束。

如果没有指定items,遍历将在索引到达指定值时结束。

step整数

遍历将只处理间隔指定step的项目,从第一个项目开始。在这种情况下,step的值必须大于或者等于1

    forEach 标签有一个类型为javax.servlet.jsp.jstl.core.LoopTagStatus 的变量 varStatus。LoopTagStatus 接口带有count属性,它返回当前遍历的“次数”。

    2. forTokens 标签

    forTokens 标签用于遍历以特定分隔符隔开的令牌,其语法如下:

<c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"]  [varStatus="varStatusName"]  [begin="begin"]  [end="end"]  [step="step"]>
    body content
</c:forTokens>
属性类型描述
var字符串引用遍历的当前项目的有界变量名称   
items支持的任意类型    要遍历的tokens字符串
varStatus     字符串保存遍历状态的有界变量名称。类型值为javax.servlet.jsp.jstl.core.LoopTagStatus  
begin整数遍历的起始索引,此处索引是从0开始的。如有指定,begin的值必须大于等于0
end整数遍历的终止索引,此处索引是从0开始的
step整数遍历将只处理间隔指定step的token,从第一个token开始。如有指定,step的值必须大于等于1    
delims字符串一组分隔符

 

六、格式化行为

    1. formatNumber 标签

     用于格式化数字。

<fmt: formatNumber value="numericValue" />

    2. formatDate标签

    用于格式化日期。

<fmt: formatDate value="date" />

    3. timeZone标签

    用于定义时区,使其body content中的时间信息按指定时区进行格式化。

<fmt: timeZone value="timeZone">
    body content
</fmt: timeZone>

    4. setTimeZone标签

    用于将指定时区保存在一个有界变量或者时间配置变量中。

<fmt: setTimeZone value="timeZne" />

    5. parseNumber标签

    用于将字符串表示的数字、货币或者百分比解析成数字。

//第一种
<fmt: parseNumber value="numericValue" />

//第二种
<fmt: parseNumber>
    numeric value to parsed
</fmt: parseNumber>

    6. parseDate标签

    以区分地域的格式解析以字符串表示的日期和时间。

//第一种
<fmt: parseDate value="dateString" />

//第二种
<fmt: parseDate>
    date value to be parsed
</fmt: parseDate>

    注:具体的可选属性请上网查阅。

 

七、函数

    JSTL还定义了一套可以在EL表达式中使用的标准函数,这些函数都集中在function标签库中。

    指令:

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

    调用:

    ${ fn: functionName }

函数描述语法范例
contains   测试一个字符串中是否包含指定子字符串    contains(string, substring)   ${fn:contains("Marry Steven", "Steven")}
containsIngoreCase 与contains相似,但是区分大小写 containsIngoreCase(string, substring) ${fn:containsIgnoreCase("Marry","MARRY")} 
endsWith 测试一个字符串是否以指定的后缀结尾 endsWith(string, suffix) ${fn:endsWith("HelloWorld","World")} 
escapeXml用于给String编码 escapeXml(string) ${fn:escapeXml("Use <br/> to change lines")} 
indexOf返回子字符串在某个字符串第一次出现时的索引   indexOf(string, substring) ${fn:indexOf("carry on","on")} 
join

将一个String数组中的所有元素合并成一个字符串,

并用指定分隔符分开 

join(array,separator) ${fn:join(myArray,",")} 
length 用于返回集合中的项目数,或者字符串的字符数 length(input) ${fn:length("HelloWorld")}
replace 将字符串中出现的所有beforeString用afterString替换 replace(string,beforeSubString,afterSubString)  ${fn:replace("HelloWorld","o","e")}  
split 用于将一个字符串分离成一个子字符串数组 split(string, seperater)${fn:split("my,world")} 
startsWith 测试一个字符串是否以指定前缀开头 startsWith(string, prefix) ${fn:startsWith("hello","h")} 
substring截取指定索引开始的子字符串 substring(string,beginIndex,endIndex) ${fn:substring("Steven",0,3)}
substringAfter 返回指定子字符串第一次出现后的字符串部分 substringAfter(string, substring) ${fn:substringAfter("Steven","ev")} 
substringBefore 返回指定子字符串第一次穿线前的字符串部分 substringBefore(string, substring) ${fn:substringBefore("Steven","ev")} 
toLowerCase 将一个字符串转换成它的小写版本 toLowerCase(string)  
toUpperCase 将一个字符串转换成大写版本 toUpperCase(string)  
trim 删除一个字符串开头和结尾的空白 trim(string)  

 

 

 

--- 天若有情天亦老,人间正道是沧桑 ---

转载于:https://www.cnblogs.com/cardiolith/p/9474115.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值