jsp标准标签库
一、简介
- JSTL是一个开源代码的标签组件,由Apache的Jakarta小组开发,本次主要说明JSTL1.2版本中主要的标签库,如下:
NO |
JSTL |
标记名称 |
标签配置文件 |
描述 |
1 |
核心标签库 |
c |
c.tld |
定义了属性管理、迭代、判断、输出 |
2 |
SQL标签库 |
sql |
sql.tld |
定义了查询数据库操作 |
3 |
XML标签库 |
xm |
x.tld |
用于操作xml数据 |
4 |
函数标签库 |
fn |
fn.tld |
提供可一些常用的操作函数 |
5 |
I18N格式标签库 |
fmt |
fmt.tld |
格式化数据 |
- 在下面的使用jstl标签库时出现了bug,因为发现添加groupId为javax.servlet.jsp.jstl的依耐时运行标签会报错,修改为 <groupId>javax.servlet</groupId>时就能正常使用。
<!-- 添加对 JSTL 的支持 ( 对标准标签库的支持 ) -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<jstl.version>1.2</jstl.version>
</dependency>
二、核心标签库C
- 核心标签库主要完成的是流程控制、迭代输出等操作。
- 核心标签库中的主要标签及引用语法(JSTL 1.1 core library)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
NO |
功能分类 |
标签名称 |
描述 |
1 |
基本标签 |
<c:out> |
属性输出内容 |
2 |
基本标签 |
<c:set> |
用于保存数据 |
3 |
基本标签 |
<c:remove> |
用于删除数据 |
4 |
基本标签 |
<c:catch> |
用来处理产生错误的异常状况,并且将错误信息储存起来 |
5 |
流程控制标签 |
<c:if> |
与我们在一般程序中用的if一样 |
6 |
流程控制标签 |
<c:choose> |
本身只当做<c:when>和<c:otherwise>的父标签 |
7 |
流程控制标签 |
<c:when> |
<c:choose>的子标签,用来判断条件是否成立 |
8 |
流程控制标签 |
<c:otherwise> |
<c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为fa |
9 |
包含标签 |
<c:import> |
检索一个绝对或相对 URL,然后将其内容暴露给页面 |
10 |
迭代标签 |
<c:forEach> |
基础迭代标签,接受多种集合类型 |
11 |
迭代标签 |
<c:forTokens> |
根据指定的分隔符来分隔内容并迭代输出 |
12 |
参数传递标签 |
<c:param> |
用来给包含或重定向的页面传递参数 |
13 |
客户端跳转标签 |
<c:redirect> |
重定向至一个新的URL. |
14 |
生成url标签 |
<c:url> |
使用可选的查询参数来创造一个URL |
1. <c:out>标签
- <c:out>标签用来显示一个表达式的结果,与<%= %>作用相似,它们的区别就是<c:out>标签可以直接通过"."操作符来访问属性。
- <c:out>标签会自动忽略XML标记字符,所以它们不会被当做标签来处理。
- 语法格式,一下标签属性中加了[]包括起来的属性为非必输属性
<required>false</required>
<c:out value="<string>" [default="<string>"] [escapeXml="<true|false>"]/>
NO |
属性 |
EL支持 |
描述 |
是否必要 |
默认值 |
1 |
value |
√ |
要输出的内容 |
是 |
无 |
2 |
default |
√ |
输出的默认值 |
否 |
主体中的内容 |
3 |
escapeXml |
√ |
是否忽略XML特殊字符 |
否 |
true |
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>核心标签库的使用</title>
</head>
<body>
<%
session.setAttribute("name","<c:out>");
%>
<h3>属性存在:<c:out value="${name}"/></h3>
<h3>属性不存在无标签体:<c:out value="${ref}" default="无"/></h3>
<h3>属性不存在:<c:out value="${ref}" >无</c:out></h3>
</body>
</html>
属性存在:<c:out>
属性不存在无标签体:无
属性不存在:无
在存在标签体的情况下不要书写属性default,不然会报错500,jstl会默认为标签体为默认值的。当不存在标签体可以书写default,默认输出给属性的值
2. <c:set>
- <c:set>标签用于设置变量值和对象属性。
- <c:set>标签就是jsp:setProperty行为标签的孪生兄弟。
- 这个标签之所以很有用呢,是因为它会计算表达式的值,然后使用计算结果来设置 JavaBean 对象或 java.util.Map 对象的值。
- 语法格式:
- 没有标签体
<c:set var="<string>" value="<string>" [target="<string>"] [property="<string>"] scope="<string>"/>
<c:set var="<string>" [scope="<string>"]>
属性内容
</c:set>
<c:set value="<string>" target="<string>" property="<string>"/>
- 设置内容到对象----有标签体,默认属性内容为标签体内容
<c:set target="<string>" property="<string>">
属性内容
</c:set>
NO |
属性 |
EL支持 |
描述 |
是否必要 |
默认值 |
1 |
value |
√ |
要存储的值 |
否 |
主体的内容 |
2 |
target |
√ |
要修改的属性所属的对象 |
否 |
无 |
3 |
property |
√ |
要修改的属性 |
否 |
无 |
4 |
var |
× |
存储信息的变量 |
否 |
无 |
5 |
scope |
× |
var属性的作用域 |
否 |
Page |
如果指定了target属性,那么property属性也需要被指定。 |
|
|
|
|
|
<%--<c:set>标签--%>
<%!
public class SetJstl {
private String sex;
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
%>
<%
SetJstl sj=new SetJstl();
pageContext.setAttribute("sex1",sj);
%>
<c:set var="age" value="20" scope="page"/>
<h2>设置jsp页面的属性:<c:out value="${age}"/></h2>
<c:set var="age1" scope="page">有标签体</c:set>
<h2>设置jsp页面的属性:<c:out value="${age1}"/></h2>
<c:set value="女" target="${sex1}" property="sex"/>
<h2> 设置javaBean的属性: <c:out value="${sex1.sex}"/></h2>
<c:set target="${sex1}" property="sex">有标签体</c:set>
<h2> 设置javaBean的属性: <c:out value="${sex1.sex}"/></h2>
设置jsp页面的属性:20
设置jsp页面的属性:有标签体
设置javaBean的属性: 女
设置javaBean的属性: 有标签体
3. <c:remove>
- <c:remove>标签用于移除一个变量,可以指定这个变量的作用域,若未指定,则默认为变量第一次出现的作用域。
- 这个标签不是特别有用,不过可以用来确保JSP完成清理工作。
- 语法格式
<c:remove var="<string>" [scope="<string>"]/>
NO |
属性 |
EL支持 |
描述 |
是否必要 |
默认值 |
1 |
var |
× |
要移除的变量名称 |
是 |
无 |
2 |
scope |
× |
变量所属的作用域 |
否 |
所有作用域 |
<%--<c:remove>标签--%>
<c:set var="tel" value="10010" scope="page"/>
<h2>删除属性之前:<c:out value="${tel}"/></h2>
<c:remove var="tel"/>
<h2>删除属性之后:<c:out value="${tel}"/></h2>
删除属性之前:10010
删除属性之后:
4. <c:catch>
- <c:catch> 标签主要用来处理产生错误的异常状况,并且将错误信息储存起来。
- 语法格式
<c:catch [var="<string>"]>
...
</c:catch>
NO |
属性 |
EL支持 |
描述 |
是否必要 |
默认值 |
1 |
var |
× |
用来储存错误信息的变量 |
否 |
None |
<%--<c:catch>标签--%>
<c:catch var="msg">
<%
int i=10/0;
%>
</c:catch>
<h3>异常信息:<c:out value="${msg}" /></h3>
异常信息:java.lang.ArithmeticException: / by zero
5. <c:if>
- <c:if>标签判断表达式的值,如果表达式的值为 true 则执行其主体内容。
- 语法格式
- 没有标签体
<c:if test="<boolean>" var="<string>" [scope="<string>"]/>
<c:if test="<boolean>" var="<string>" [scope="<string>"]>
满足条件时执行的语句
</c:if>
NO |
属性 |
EL支持 |
描述 |
是否必要 |
默认值 |
1 |
test |
√ |
条件 |
是 |
无 |
2 |
var |
× |
用于存储条件结果的变量 |
否 |
无 |
3 |
scope |
× |
var属性的作用域 |
否 |
page |
<%--<c:if>标签--%>
<c:if test="${10>0}" var="res" scope="page">
<h3>10>0为${res}</h3>
</c:if>
<h3>${res}</h3>
10>0为true
true
6. <c:choose>, <c:when>, <c:otherwise>
- <c:choose>标签与Java switch语句的功能一样,用于在众多选项中做出选择。
- switch语句中有case,而<c:choose>标签中对应有<c:when>,switch语句中有default,而<c:choose>标签中有<c:otherwise>。
- 语法格式
<c:choose>
<c:when test="<boolean>">
...
</c:when>
<c:when test="<boolean>">
...
</c:when>
...
...
<c:otherwise>
...
</c:otherwise>
</c:choose>
- 属性
- <c:choose>标签没有属性。
- <c:when>标签只有一个属性,在下表中有给出。
- <c:otherwise>标签没有属性。
NO |
属性 |
EL支持 |
描述 |
是否必要 |
默认值 |
1 |
test |
√ |
用于条件,如果为true则执行标签体内容 |
是 |
无 |
<%--<c:choose>, <c:when>, <c:otherwise>--%>
<%
pageContext.setAttribute("num",20);
%>
<c:choose>
<c:when test="${num==10}">
<h3>属性内容为${num}</h3>
</c:when>
<c:when test="${num==20}">
<h3>属性内容为${num}</h3>
</c:when>
<c:when test="${num==30}">
<h3>属性内容为${num}</h3>
</c:when>
<c:otherwise>
<h3>没有满足条件的</h3>
</c:otherwise>
</c:choose>
属性内容为20
7. <c:import>
<c:import
url="<string>"
[var="<string>"]
[scope="<string>"]
[varReader="<string>"]
[context="<string>"]
[charEncoding="<string>"]/>
NO |
属性 |
EL支持 |
描述 |
是否必要 |
默认值 |
1 |
url |
√ |
待导入资源的URL,可以是相对路径和绝对路径,并且可以导入其他主机资源 |
是 |
无 |
2 |
context |
√ |
当使用相对路径访问外部context资源时,context指定了这个资源的名字。 |
否 |
当前应用程序 |
3 |
charEncoding |
√ |
所引入的数据的字符编码集 |
否 |
ISO-8859-1 |
4 |
var |
× |
用于存储所引入的文本的变量 |
否 |
无 |
5 |
scope |
× |
var属性的作用域 |
否 |
page |
6 |
varReader |
× |
可选的用于提供java.io.Reader对象的变量 |
否 |
无 |
<%--<c:import>--%>
<c:import url="datetag.jsp" charEncoding="utf-8"/>
2019-12-04 16:15:59
不能存在标签体
8. <c:forEach>, <c:forTokens>
-
这些标签封装了Java中的for,while,do-while循环。
-
相比而言,<c:forEach>标签是更加通用的标签,因为它迭代一个集合或数组中的对象。
-
<c:forTokens>标签通过指定分隔符将字符串分隔为一个数组然后迭代它们,相当于java中的Spring类的split()方法来循环输出一种集合。
-
forEach 语法格式
<c:forEach
items="<object>"
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>"/>
...
<c:forTokens
items="<string>"
delims="<string>"
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>"/>
NO |
属性 |
EL支持 |
描述 |
是否必要 |
默认值 |
1 |
items |
√ |
要被循环的信息 |
否 |
无 |
2 |
begin |
√ |
开始的元素(0=第一个元素,1=第二个元素) |
否 |
0 |
3 |
end |
√ |
最后一个元素(0=第一个元素,1=第二个元素) |
否 |
Last element |
4 |
step |
√ |
每一次迭代的步长 |
否 |
1 |
5 |
var |
× |
代表当前条目的变量名称 |
否 |
无 |
6 |
varStatus |
× |
代表循环状态的变量名称 |
否 |
无 |
- <c:forTokens>标签与<c:forEach>标签有相似的属性,不过<c:forTokens>还有另一个属性:
NO |
属性 |
EL支持 |
描述 |
是否必要 |
默认值 |
1 |
delims |
× |
分隔符 |
是 |
无 |
<%--<c:forEach>,<c:forTokens >--%>
<%
String[] str={"yoona","20","女"};
pageContext.setAttribute("str",str);
String str1 = "123,459,123,678";
pageContext.setAttribute("str1", str1);
%>
<c:forEach var="i" items="${str}">
<h2>输出全部:${i}</h2>
</c:forEach>
<c:forEach var="i" items="${str}" step="2">
<h2>间隔为2:${i}</h2>
</c:forEach>
<h2>以,为分隔符输出遍历:</h2>
<c:forTokens items="${str1}" delims="," var="i" >
<h2>${i}</h2>
</c:forTokens>
输出全部:yoona
输出全部:20
输出全部:女
间隔为2:yoona
间隔为2:女
以,为分隔符输出遍历:
123
459
123
9. <c:url>,<c:param>
<c:url
var="<string>"
scope="<string>"
value="<string>"
context="<string>"/>
NO |
属性 |
EL支持 |
描述 |
是否必要 |
默认值 |
1 |
value |
√ |
基础URL |
是 |
无 |
2 |
context |
√ |
本地网络应用程序的名,如果要访问同一web的资源则要“/”开头 |
否 |
当前应用程序 |
3 |
var |
× |
代表URL的变量名 |
否 |
Print to page |
4 |
scope |
× |
var属性的作用域 |
否 |
Page |
<%--<c:url>,<c:param>--%>
<c:url var="urlinfo" value="https://www.baidu.com/?tn=99104831_hao_pg">
<c:param name="name" value="taeyeon"/>
</c:url>
<a href="${urlinfo}">新的地址${urlinfo}</a>
新的地址https://www.baidu.com/?name=taeyeon&tn=99104831_hao_pg
10. <c:redirect>
- <c:redirect>标签通过自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持c:param标签。
- <c:redirect>标签进行客户端跳转。
- 语法格式
<c:redirect url="<string>" context="<string>"/>
NO |
属性 |
EL支持 |
描述 |
是否必要 |
默认值 |
1 |
url |
√ |
目标URL |
是 |
无 |
2 |
context |
√ |
紧接着一个本地网络应用程序的名称 |
否 |
当前应用 |
- 实例,datetag.jsp是我的一个日期格式化jsp测试页面
<%--<c:redirect>--%>
<c:redirect url="datetag.jsp" >
<c:param name="name" value="yoona"/>
</c:redirect>
2019-12-04 17:04:20
设置的参数param会出现在地址栏:http://localhost:8080/jsp/tld/datetag.jsp?name=yoona
三、格式化标签库
- JSTL格式化标签用来格式化并输出文本、日期、时间、数字。
- 格式化标签库主要包含的标签如下:
四、sql标签库
- 在JSTL中也提供了与数据库操作相关的标签,可以使用这些标签轻松的进行数据库的更新与操作,sql标签库主要包含了如下标签:
五、xml文件标签库
- XML标签
NO |
标签 |
描述 |
1 |
<x:out> |
与<%= ... >,类似,不过只用于XPath表达式 |
2 |
<x:parse> |
解析 XML 数据 |
3 |
<x:set> |
设置XPath表达式 |
4 |
<x:if> |
判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体 |
5 |
<x:forEach> |
迭代XML文档中的节点 |
6 |
<x:choose> |
<x:when>和<x:otherwise>的父标签 |
7 |
<x:when> |
<x:choose>的子标签,用来进行条件判断 |
8 |
<x:otherwise> |
<x:choose>的子标签,当<x:when>判断为false时被执行 |
9 |
<x:transform> |
将XSL转换应用在XML文档中 |
10 |
<x:param> |
与<x:transform>共同使用,用于设置XSL样式表 |
XPath简介
- XPath的主要功能是在XML文档中能够准确的找到某一个节点的元素,可以通过XPath找到一个XML文档中定义的节点内容或属性等。
- XPath路径标记
NO |
路径标记 |
描述 |
1 |
根元素 |
/ |
2 |
父节点 |
../ |
3 |
任何路径下的节点 |
// |
4 |
属性 |
@属性名称 |
5 |
通配符 |
* |
六、函数标签库
- 函数标签库大部分的操作都是用来处理字符串的,这一点类似于String类的各个方法,下表列出了一些常用标签函数
NO |
函数 |
描述 |
1 |
fn:contains() |
测试输入的字符串是否包含指定的子串 |
2 |
fn:containsIgnoreCase() |
测试输入的字符串是否包含指定的子串,大小写不敏感 |
3 |
fn:endsWith() |
测试输入的字符串是否以指定的后缀结尾 |
4 |
fn:escapeXml() |
跳过可以作为XML标记的字符 |
5 |
fn:indexOf() |
返回指定字符串在输入字符串中出现的位置 |
6 |
fn:join() |
将数组中的元素合成一个字符串然后输出 |
7 |
fn:length() |
返回字符串长度 |
8 |
fn:replace() |
将输入字符串中指定的位置替换为指定的字符串然后返回 |
9 |
fn:split() |
将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回 |
10 |
fn:startsWith() |
测试输入字符串是否以指定的前缀开始 |
11 |
fn:substring() |
返回字符串的子集 |
12 |
fn:substringAfter() |
返回字符串在指定子串之后的子集 |
13 |
fn:substringBefore() |
返回字符串在指定子串之前的子集 |
14 |
fn:toLowerCase() |
将字符串中的字符转为小写 |
15 |
fn:toUpperCase() |
将字符串中的字符转为大写 |
16 |
fn:trim() |
移除首尾的空白符 |
scope的范围时jsp的四种域,page,request,session,application |
|
|