JSP Standard Tag Library

JSTL(JSP Standard Tag Library)下载地址:https://jstl.java.net/

JSTL包含:

1.JSTL API

2.JSTL Implementation

JSP页面中使用JSTL,使用taglib指令引入:

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

通用动作指令

引入:

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

out标签

标记<c:out>具有以下属性:

属性描述
value*+  要运算的表达式
default默认值
escapeXmlTrue,如果标签转义特殊XML字符

*表示属性是必需的,+号表示可以为表达式。

默认情况下,excapeXml属性为true,意味着会将<,>,’,”和&转换为<,>,'和&。

set标签

<c:set>标记具有以下属性:

属性
描述
value+要创建的字符串,或要引用的限域对象,或新的属性值
target+其属性应该被修改的限域对象目标
property+要修改的属性名称
var限域变量
scope范围,默认为page

如,创建一个page范围的foo变量,并赋值:

1
<c:set var="foo" value="The wisest fool"/>

创建一个限域变量job,值为request范围的对象position,限域变量的范围为page:

1
<c:set var="job" value="${requestScope.position}" socpe="page"/>

设置address对象的city属性为fuzhou:

1
<c:set target="${address}" property="city" value="fuzhzou"/>

也可以这样写:

1
2
3
<c:set target="${address}" property="city">
fuzhou
</c:set>

remove标签

<c:remove>标签具有以下属性:

属性描述默认值
var要删除的变量名None
scope删除变量的作用域所有作用域

如删除作用域为page的job限域变量:

1
<c:remove var="job" scope="page"/>

条件式动作指令

引入:

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

if标签

<c:if>标签具有以下属性:

属性描述默认
test*+条件计算None
var变量名称来存储条件的结果,Boolean类型None
scopevar变量的作用域page

如:

1
2
3
4
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:if test="${salary > 2000}">
My salary is: <c:out value="${salary}"/>
</c:if>

模拟if…else:

1
2
3
4
5
6
<c:if test="${param.user=='mrbird' && password=='mrbird'}">
mrbird logged in successfully.
</c:if>
<c:if test="${!(param.user=='mrbird' && password=='mrbird')}">
userName or password is wrong
</c:if>

choose,when和otherwise

该标签类似于Java中的switch和case关键字类似,使用方法如下:

1
2
3
4
5
6
7
8
9
10
11
<c:choose>
<c:when test="${param.user=="mrbird"}">
hi,mrbird.
</c:when>
<c:when test="${param.user=="jint"}">
hi,jint.
</c:when>
<c:otherwise>
hi,someone else.
</c:otherwise>
</c:choose>

iterator动作指令

forEach标签

<c:forEach>标记具有以下属性:

属性描述默认
items+要迭代的对象集合None
begin+开始索引0
end+结束索引Last element
step+迭代步长1
var当前迭代内容的限域变量名None
varStatus保存迭代状态的限域变量名None

其中,varStatus包含一些属性:

1.current当前这次迭代的(集合中的)项

2.index当前这次迭代从 0 开始的迭代索引

3.count当前这次迭代从 1 开始的迭代计数

4.first用来表明当前这轮迭代是否为第一次迭代的标志

5.last用来表明当前这轮迭代是否为最后一次迭代的标志

如循环输出books集合,并控制单双行表格样式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<table>
<tr style="background:#ababff">
<td>ISBN</td>
<td>Title</td>
</tr>
<c:forEach item="${requestScope.books}" var="book" vatStatus="status">
<c:if test="${status.count%2 == 0}">
<tr style="background:#eeeeff">
</c:if>
<c:if test="${status.count%2 != 0}">
<tr style="background:#dedeff">
</c:if>
<td>${book.isbn}</td>
<td>${book.title}</td>
</tr>
</c:forEach>
</table>

简单的forEach标签示例:

1
2
3
<c:forEach var="x" begin="1" end="5">
<c:out value="${x}"/>,
</c:forEach>

页面输出1,2,3,4,5。

forTokens标签

forTokens标签使用的比较少,常用的例子:

1
2
3
<c:forTokens items="Zara,nuha,roshy" delims="," var="name">
<c:out value="${name}"/>
</c:forTokens>

这将产生以下输出结果:

1
2
3
Zara
nuha
roshy

格式化动作指令

引入:

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

formatNumber标签

<fmt:formatNumber>标签用于格式化数字,百分比和货币。<fmt:formatNumber>标签有如下属性:

属性描述默认值
value*+要显示的数字
type+NUMBER,CURRENCY,或 PERCENT类型Number
pattern+指定一个自定义的格式化模式用于输出
currencyCode+货币码(当type=”currency”时)取决于默认区域
currencySymbol+货币符号 (当 type=”currency”时)取决于默认区域
groupingUsed+是否对数字分组 (TRUE 或 FALSE)true
maxIntegerDigits+整型数最大的位数
minIntegerDigits+整型数最小的位数
maxFractionDigits+小数点后最大的位数
minFractionDigits+小数点后最小的位数
var存储格式化数字的变量Print to page
scopevar属性的作用域page

pattern属性包含的字符:

符号描述
0代表一位数字
E使用指数格式
#代表一位数字,若没有则显示0
.小数点
,数字分组分隔符
;分隔格式
-使用默认负数前缀
%百分数
?千分数
¤货币符号,使用实际的货币符号代替
X指定可以作为前缀或后缀的字符
在前缀或后缀中引用特殊字符

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<c:set var="balance" value="120000.2309" />
格式化数字 (1): <fmt:formatNumber value="${balance}"
type="currency"/>
格式化数字 (2): <fmt:formatNumber type="number"
maxIntegerDigits="3" value="${balance}" />
格式化数字 (3): <fmt:formatNumber type="number"
maxFractionDigits="3" value="${balance}" />
格式化数字 (4): <fmt:formatNumber type="number"
groupingUsed="false" value="${balance}" />
格式化数字 (5): <fmt:formatNumber type="percent"
maxIntegerDigits="3" value="${balance}" />
格式化数字 (6): <fmt:formatNumber type="percent"
minFractionDigits="10" value="${balance}" />
格式化数字 (7): <fmt:formatNumber type="percent"
maxIntegerDigits="3" value="${balance}" />
格式化数字 (8): <fmt:formatNumber type="number"
pattern="###.###E0" value="${balance}" />
美元 :
<fmt:setLocale value="en_US"/>
<fmt:formatNumber value="${balance}" type="currency"/>

结果:

1
2
3
4
5
6
7
8
9
10
数字格式化:
格式化数字 (1): ¥120,000.23
格式化数字 (2): 000.231
格式化数字 (3): 120,000.231
格式化数字 (4): 120000.231
格式化数字 (5): 023%
格式化数字 (6): 12,000,023.0900000000%
格式化数字 (7): 023%
格式化数字 (8): 120E3
美元 : $120,000.23

formatDate标签

<fmt:formatDate>标签用于使用不同的方式格式化日期。

<fmt:formatDate>标签有如下属性:

属性描述是否必要默认值
value要显示的日期
typeDATE, TIME, 或 BOTHdate
dateStyleFULL, LONG, MEDIUM, SHORT, 或 DEFAULTdefault
timeStyleFULL, LONG, MEDIUM, SHORT, 或 DEFAULTdefault
pattern自定义格式模式
timeZone显示日期的时区默认时区
var存储格式化日期的变量名显示在页面
scope存储格式化日志变量的范围页面

<fmt:formatDate> 标签格式模式:

代码描述实例
G时代标志AD
y不包含纪元的年份。如果不包含纪元的年份小于 10, 则显示不具有前导零的年份。2002
M月份数字。一位数的月份没有前导零。April & 04
d月中的某一天。一位数的日期没有前导零。20
h12 小时制的小时。一位数的小时数没有前导零。12
H24 小时制的小时。一位数的小时数没有前导零。0
m分钟。一位数的分钟数没有前导零。45
s秒。一位数的秒数没有前导零。52
S毫秒970
E周几Tuesday
D一年中的第几天180
F一个月中的第几个周几2 (一个月中的第二个星期三)
w一年中的第几周r27
W一个月中的第几周2
aa.m./p.m. 指示符PM
k小时(12 小时制的小时)24
K小时(24 小时制的小时)0
z时区中部标准时间
 转义文本
‘’ 单引号

例子:

1
2
3
4
5
6
7
8
9
10
11
<c:set var="now" value="<%=new java.util.Date()%>" />
<p>日期格式化 (1): <fmt:formatDate type="time" value="${now}" /></p>
<p>日期格式化 (2): <fmt:formatDate type="date" value="${now}" /></p>
<p>日期格式化 (3): <fmt:formatDate type="both" value="${now}" /></p>
<p>日期格式化 (4): <fmt:formatDate type="both" dateStyle="short"
timeStyle="short" value="${now}" /></p>
<p>日期格式化 (5): <fmt:formatDate type="both" dateStyle="medium"
timeStyle="medium" value="${now}" /></p>
<p>日期格式化 (6): <fmt:formatDate type="both" dateStyle="long"
timeStyle="long" value="${now}" /></p>
<p>日期格式化 (7): <fmt:formatDate pattern="yyyy-MM-dd" value="${now}" /></p>

结果:

1
2
3
4
5
6
7
8
日期格式化:
日期格式化 (1): 11:19:43
日期格式化 (2): 2016-6-26
日期格式化 (3): 2016-6-26 11:19:43
日期格式化 (4): 16-6-26 上午11:19
日期格式化 (5): 2016-6-26 11:19:43
日期格式化 (6): 2016年6月26日 上午11时19分43秒
日期格式化 (7): 2016-06-26

剩下的fmt标签较少使用,懒得记录。

函数

引入:

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

contains函数

fn:contains()函数的语法如下:

1
2
3
<c:if test="${fn:contains(<原始字符串>, <要查找的子字符串>)}">
...
</c:if>​

如,下面的EL表达式都返回true:

1
2
3
<c:set var="myString" value="Hello World"/>
${fn:contains(myString,"Hello")}
${fn:contains("Stella Cadente","Cadente")}

containsIgnoreCase函数

contains类似,不区分大小写。

endsWith函数

判断以什么为结尾。

startsWith函数

escapeXml函数

如:

1
${fn:escapeXml("Use <br> to change lines")}

显示为:

1
Use <br> to change lines

indexOf函数

fn:indexOf()函数返回一个字符串中指定子串的位置。

fn:indexOf()函数的语法如下:

1
${fn:indexOf(<原始字符串>,<子字符串>)}

例子:

1
2
<c:set var="string1" value="This is first String."/>
<p>Index: ${fn:indexOf(string1, "first")}</p>

结果:

1
Index: 8

join函数

fn:join()函数将一个数组中的所有元素使用指定的分隔符来连接成一个字符串。

split函数

fn:split()函数将一个字符串用指定的分隔符分裂为一个子串数组。

join和split例子:

1
2
3
4
<c:set var="string1" value="www runoob com"/>
<c:set var="string2" value="${fn:split(string1, ' ')}" />
<c:set var="string3" value="${fn:join(string2, '-')}" />
<p>string3 字符串 : ${string3}</p>

结果为:

1
字符串为 : www-runoob-com

length函数

replace函数

fn:replace()函数将字符串中所有指定的子串用另外的字符串替换。

fn:replace()函数的语法如下:

1
${fn:replace(<原始字符串>, <被替换的字符串>, <要替换的字符串>)}

例子:

1
2
3
<c:set var="string1" value="I am from USA"/>
<c:set var="string2" value="${fn:replace(string1, 'USA', 'China')}" />
<p>替换后的字符串 : ${string2}</p>

结果:

1
替换后的字符串 : I am from China

substring函数

fn:substring()函数返回字符串中指定开始和结束索引的子串。

fn:substring()函数的语法如下:

1
${fn:substring(<string>, <beginIndex>, <endIndex>)}

例子:

1
2
3
<c:set var="string1" value="This is first String."/>
<c:set var="string2" value="${fn:substring(string1, 5, 15)}" />
<p>生成的子字符串为 : ${string2}</p>

结果:

1
生成的子字符串为 : is first S

substringBefore函数

fn:substringBefore()函数返回一个字符串中指定子串前面的部分。

如:

1
2
3
<c:set var="string1" value="This is first String."/>
<c:set var="string2" value="${fn:substringBefore(string1, 'first')}" />
<p>生成的子字符串 : ${string2}</p>

结果:

1
生成的子字符串 : This is

substringAfter函数

toLowerCase函数

toUpperCase函数

trim函数

sql标签

略。

《Servlet和JSP学习指南》学习笔记

请作者喝瓶肥宅水🥤

0