JSTL:第三方标签库,需要导入jar包才可以使用。
该标签库可以完成更复杂的功能,比如可以
完成遍历集合和数组,条件判断,循环等功能。
目的:不希望在jsp页面中出现java逻辑代码。
JSTL标签库可分5类:核心标签库
I18N格式化标签库
SQL标签库
XML标签库
函数标签库
主要讲核心标签库共13个:分为四类
standard.jar 标准jar包,定义规范
jstl.jar 具体实现jar包
注意:1)web工程导包需要将包copy到WEB-INF下lib文件夹中。
2)在jsp页面中导入标签库
taglib
WebContent
文件夹:jstl
jsp: jstl.jsp
第一类:表达式控制标签
1、<c:out> 输出变量到JspWriter输出流中
1) 语法1:<c:out value="result"
[escapeXml]="{true|false}"
[default="defaultValue"]/>
注意:a)如果result为null,则输出default中的值
b)escapeXml:设定是否转换特
殊字符(如<、>等一些转
义字符),在默认值为true的情况
下直接在输出<的,如果改为
false将会进行转义输出“<”等。
2) 语法2:<c:out value="result"
[escapeXml]="{true|false}">
default value</c:out>
例如: value可以使用el表达式
<c:out value="${student.address.country}"/>
2、<c:set>
该标签用于在某个范围中设置指定变量,
或者设置某个对象的属性
1) 在scope中设置变量(value指定)、名字由var指定
<c:set var="name" value="attrValue"
[scope="page|...."]/>
注意: var指定的值-->属性名
value指定的值-->属性值
value可以通过el标签来取到数据,如:value="${user }"
相对于:scope.setAttribute("name","attrValue");
2) 带有一个Body体
<c:set var="varName" [scope]>
body content
</c:set>
注:指定varName变量的值为body content.
scope指定变量存放的范围,默认为page
3) 设置某个特定对象的一个属性(attribute)
<c:set target="${student}"
property="name" value="terry"/>
注:把一个值为terry赋值给指定的student对象的name属性,
相当与setter()方法。
4) 设置某个特定对象的一个属性,并且标签带有一个body
<c:set target="${target}"
property="propertyName"> body content
</c:set>
注意: 1)scope属性不能在这里使用。
2)把一个值为body content赋值给指定
的target对象的propertyName属性。
3、<c:remove>
<c:remove var="varName" [scope="page|...."]/>
相当于 scope.removeAttribute("varName");
在指定scope中根据属性名varName来删除属性值
如果没有指定scope,那么依次从page、request、session和application范围中
根据该属性名去删除属性值。
4、<c:catch> 捕获由嵌套在它里面的代码抛出的异常
语法:<c:catch [var="varName"]>
nested actions
</c:catch>
var:用于存放这个异常对象的属性名,
通过它可以输出异常对象的所有信息。
scope:默认为page。
第二类:流程控制标签
5、<c:if>
语法:
<c:if test="condition"
var="varName" [scope]>
body content</c:if>
var为存放布尔型变量的属性名,
scope为该变量的存放范围。
6、<c:choose>
用于条件选择,它和<c:when>
以及<c:otherwise>一起使用
语法: <c:choose>
(<when> and <otherwise>)
</c:choose>
注意: body体内容只能由以下的元素构成
1) 空格
2) 0个或者多个<when>子标签,
<when>必须出现在<c:choose>和<c:ohterwise>之间
3) 0个或者多个<ohterwise>
7、<c:when>
代表了<c:choose>的一个分支
语法: <c:when test="condition">
body content
</c:when>
注意: 必须以<c:choose>作为它的父标签
必须在<c:otherwise>之前出现
8、<c:otherwise>
<c:choose>的最后的选择
语法: <c:otherwise>
body
</c:otherwise>
注意: 必须以<c:choose>作为父标签
必须是<c:choose>的最后分支
第三类:循环标签
9、迭代标签(用来迭代集合、数组、枚举
或者迭代器(Iterator))
1) <c:forEach>
语法1: <c:forEach [var="varName"]
items="collection/array/Enumaration/Iterator"
[varStatus="varStatusName"]
[begin="begin"] [end="end"]
[step="step"]>
body
</c:forEach>
语法2: 迭代固定的次数(做普通的循环输出,类似for循环)
<c:forEach [var="varName"]
[varStatus="varStatusName"]
begin="begin" end="end"
[step="step"]>
body content
</c:forEach>
名字 类型 描述
var String 存放变量(迭代出来的)的属性名(scope为page)
items 任何支持的类型 将要迭代itmes的集合/数组/枚举/Iterator
varStatus String 迭代的状态,可以访问迭代的自身信息,如索引号
begin int items从index[begin]开始迭代
没有指定items从index开始做循环
end int items从index[end]结束
没有指定items从end结束
step int 迭代的步长(>0)
注意:varStatus中有index(索引),
count(循环次数)
,first(是否是第一个位置),
last(是否为最后一个位置)
2) <c:forTokens>类似java中的StringTokenizer
这个标签专门用于处理TokenString的迭代,
可以指定一个或者多个分隔符号(delimiters)
语法: <c:forTokens items="stringOfTokens"
delims="delimiters"
[var="varName"] [varStatus="varStatusName"]
[begin="begin"] [end="end"]
[step="step"]>
body content
</c:forTokens>
第四类:URL操作标签
10、URL相关的标签
1) <c:import>导入一个基于URL的资源
<c:import url="url" [var="varName"] [scope]>
[<c:param/>]*
</c:import>
var:存放URL资源内容的属性名
scope:存放的范围
该标签可以把其他静态或动态文件包含到本JSP页面。
同<jsp:include>的区别为:只能包含同一个web应用中的文件。
而<c:import>可以包含其他web应用中的文件,
甚至是网络上的资源。
url分为
绝对路径: http://localhost:8080/jsp/a.jsp(web应用程序外部访问)
相对路径: a.jsp(web应用程序内部访问)
2) <c:url>
用于构造URL,主要用途是URL重写
语法: <c:url value="url"
[var="varName"] [scope]>
[<c:param/>]*
</c:url>
var:存放重写后的URL的属性名
scope:存放的范围
一般和a连用
如<a href="varName">test</a>
3) <c:redirect>
把客户的请求重定向到另一个资源
语法: <c:redirect url="url">
[<c:param/>]*
</c:redirect>
注意:重定向的标签已经对url重写过了
在重定向之前这个url先被重写,重定向的是被重写后的url。
注意: <c:url>和<c:redirect>也可以使用绝对路径http://localhost:8080/jsp/a.jsp(不能使用/jsp/a.jsp),但是url不能被重写,只有在使用相对路径后url才能被重写。
4) <c:param>
在<c:import>、<c:url>和<c:redirect>中添加请求的参数
语法1: <c:param name="name" value="value"/>
语法2: <c:param name="name">
parameter value
</c:param>
该标签库可以完成更复杂的功能,比如可以
完成遍历集合和数组,条件判断,循环等功能。
目的:不希望在jsp页面中出现java逻辑代码。
JSTL标签库可分5类:核心标签库
I18N格式化标签库
SQL标签库
XML标签库
函数标签库
主要讲核心标签库共13个:分为四类
standard.jar 标准jar包,定义规范
jstl.jar 具体实现jar包
注意:1)web工程导包需要将包copy到WEB-INF下lib文件夹中。
2)在jsp页面中导入标签库
taglib
WebContent
文件夹:jstl
jsp: jstl.jsp
第一类:表达式控制标签
1、<c:out> 输出变量到JspWriter输出流中
1) 语法1:<c:out value="result"
[escapeXml]="{true|false}"
[default="defaultValue"]/>
注意:a)如果result为null,则输出default中的值
b)escapeXml:设定是否转换特
殊字符(如<、>等一些转
义字符),在默认值为true的情况
下直接在输出<的,如果改为
false将会进行转义输出“<”等。
2) 语法2:<c:out value="result"
[escapeXml]="{true|false}">
default value</c:out>
例如: value可以使用el表达式
<c:out value="${student.address.country}"/>
2、<c:set>
该标签用于在某个范围中设置指定变量,
或者设置某个对象的属性
1) 在scope中设置变量(value指定)、名字由var指定
<c:set var="name" value="attrValue"
[scope="page|...."]/>
注意: var指定的值-->属性名
value指定的值-->属性值
value可以通过el标签来取到数据,如:value="${user }"
相对于:scope.setAttribute("name","attrValue");
2) 带有一个Body体
<c:set var="varName" [scope]>
body content
</c:set>
注:指定varName变量的值为body content.
scope指定变量存放的范围,默认为page
3) 设置某个特定对象的一个属性(attribute)
<c:set target="${student}"
property="name" value="terry"/>
注:把一个值为terry赋值给指定的student对象的name属性,
相当与setter()方法。
4) 设置某个特定对象的一个属性,并且标签带有一个body
<c:set target="${target}"
property="propertyName"> body content
</c:set>
注意: 1)scope属性不能在这里使用。
2)把一个值为body content赋值给指定
的target对象的propertyName属性。
3、<c:remove>
<c:remove var="varName" [scope="page|...."]/>
相当于 scope.removeAttribute("varName");
在指定scope中根据属性名varName来删除属性值
如果没有指定scope,那么依次从page、request、session和application范围中
根据该属性名去删除属性值。
4、<c:catch> 捕获由嵌套在它里面的代码抛出的异常
语法:<c:catch [var="varName"]>
nested actions
</c:catch>
var:用于存放这个异常对象的属性名,
通过它可以输出异常对象的所有信息。
scope:默认为page。
第二类:流程控制标签
5、<c:if>
语法:
<c:if test="condition"
var="varName" [scope]>
body content</c:if>
var为存放布尔型变量的属性名,
scope为该变量的存放范围。
6、<c:choose>
用于条件选择,它和<c:when>
以及<c:otherwise>一起使用
语法: <c:choose>
(<when> and <otherwise>)
</c:choose>
注意: body体内容只能由以下的元素构成
1) 空格
2) 0个或者多个<when>子标签,
<when>必须出现在<c:choose>和<c:ohterwise>之间
3) 0个或者多个<ohterwise>
7、<c:when>
代表了<c:choose>的一个分支
语法: <c:when test="condition">
body content
</c:when>
注意: 必须以<c:choose>作为它的父标签
必须在<c:otherwise>之前出现
8、<c:otherwise>
<c:choose>的最后的选择
语法: <c:otherwise>
body
</c:otherwise>
注意: 必须以<c:choose>作为父标签
必须是<c:choose>的最后分支
第三类:循环标签
9、迭代标签(用来迭代集合、数组、枚举
或者迭代器(Iterator))
1) <c:forEach>
语法1: <c:forEach [var="varName"]
items="collection/array/Enumaration/Iterator"
[varStatus="varStatusName"]
[begin="begin"] [end="end"]
[step="step"]>
body
</c:forEach>
语法2: 迭代固定的次数(做普通的循环输出,类似for循环)
<c:forEach [var="varName"]
[varStatus="varStatusName"]
begin="begin" end="end"
[step="step"]>
body content
</c:forEach>
名字 类型 描述
var String 存放变量(迭代出来的)的属性名(scope为page)
items 任何支持的类型 将要迭代itmes的集合/数组/枚举/Iterator
varStatus String 迭代的状态,可以访问迭代的自身信息,如索引号
begin int items从index[begin]开始迭代
没有指定items从index开始做循环
end int items从index[end]结束
没有指定items从end结束
step int 迭代的步长(>0)
注意:varStatus中有index(索引),
count(循环次数)
,first(是否是第一个位置),
last(是否为最后一个位置)
2) <c:forTokens>类似java中的StringTokenizer
这个标签专门用于处理TokenString的迭代,
可以指定一个或者多个分隔符号(delimiters)
语法: <c:forTokens items="stringOfTokens"
delims="delimiters"
[var="varName"] [varStatus="varStatusName"]
[begin="begin"] [end="end"]
[step="step"]>
body content
</c:forTokens>
第四类:URL操作标签
10、URL相关的标签
1) <c:import>导入一个基于URL的资源
<c:import url="url" [var="varName"] [scope]>
[<c:param/>]*
</c:import>
var:存放URL资源内容的属性名
scope:存放的范围
该标签可以把其他静态或动态文件包含到本JSP页面。
同<jsp:include>的区别为:只能包含同一个web应用中的文件。
而<c:import>可以包含其他web应用中的文件,
甚至是网络上的资源。
url分为
绝对路径: http://localhost:8080/jsp/a.jsp(web应用程序外部访问)
相对路径: a.jsp(web应用程序内部访问)
2) <c:url>
用于构造URL,主要用途是URL重写
语法: <c:url value="url"
[var="varName"] [scope]>
[<c:param/>]*
</c:url>
var:存放重写后的URL的属性名
scope:存放的范围
一般和a连用
如<a href="varName">test</a>
3) <c:redirect>
把客户的请求重定向到另一个资源
语法: <c:redirect url="url">
[<c:param/>]*
</c:redirect>
注意:重定向的标签已经对url重写过了
在重定向之前这个url先被重写,重定向的是被重写后的url。
注意: <c:url>和<c:redirect>也可以使用绝对路径http://localhost:8080/jsp/a.jsp(不能使用/jsp/a.jsp),但是url不能被重写,只有在使用相对路径后url才能被重写。
4) <c:param>
在<c:import>、<c:url>和<c:redirect>中添加请求的参数
语法1: <c:param name="name" value="value"/>
语法2: <c:param name="name">
parameter value
</c:param>