概述
JSTL 全名为Java Server Pages Standard Tag Library(JSP Standard Tag Library),它的中文名称为JSP 标准标签函数库。
Web 程序开发人员能够利用JSTL和EL来开发Web 程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序可读性、维护性和方便性。
JSTL是一个标准的已制定好的标签库,可以应用于各种领域,如:基本输入输出、流程控制、循环、XML文件剖析、数据库查询及国际化和文字格式标准化的应用等。JSTL所提供的标签函数库主要分为五大类:
(1)核心标签库 (Core tag library)
(2)I18N 格式标签库 (I18N-capable formatting tag library)
(3)SQL 标签库 (SQL tag library)
(4)XML 标签库 (XML tag library)
(5)函数标签库 (Functions tag library)
JSTL | 前缀 | URI |
核心标签库 | c | http://java.sun.com/jsp/jstl/core |
I18N格式标签库 | fmt | http://java.sun.com/jsp/jstl/xml |
SQL标签库 | sql | http://java.sun.com/jsp/jstl/sql |
XML标签库 | xml | http://java.sun.com/jsp/jstl/fmt |
函数标签库 | fn | http://java.sun.com/jsp/jstl/functions |
若要在JSP 网页中使用JSTL ,一定要先做下面这行声明:
< %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
核心标签库 (Core tag library)
Core 标签库,又被称为核心标签库,该标签库的工作是对于 JSP 页面一般处理的封装。在该标签库中的标签一共有 14 个,被分为了四类,分别是:
q 通用核心标签: <c:out> 、 <c:set> 、 <c:remove> 、 <c:catch> 。
q 条件控制标签: <c:if> 、 <c:choose> 、 <c:when> 、 <c:otherwise> 。
q 循环控制标签: <c:forEach> 、 <c:forTokens> 。
q URL 相关标签: <c:import> 、 <c:url> 、 <c:redirect> 、 <c:param> 。
<c:out>
<c:out>主要用来显示数据的内容,就像是 <%= scripting-language %> 一样,例如:Hello ! <c:out value="${username}" />
语法
语法1:没有本体(body)内容
<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />
语法2:有本体内容
<c:out value="value" [escapeXml="{true|false}"]>
default value
</c:out>
属性名称 | 说明 | EL | 类型 | 必须 | 默认值 |
value | 需要显示出来的值 | Y | Object | 是 | 无 |
default | 如果value的值为null则显示default的值 | Y | Object | 否 | 无 |
escapeXml | 是否转换特殊字符,如:<转换成< | Y | boolean | 否 | true |
注意
表格中的EL字段,表示此属性的值是否可以为EL 表达式,例如:Y表示 attribute = "${表达式}"为符合语法的,N 则反之。
Null 和错误处理
· 假若 value为null,会显示default 的值;假若没有设定default的值,则会显示一个空
的字符串。
说明
一般来说,<c:out>默认会将 <、>、’、” 和 & 转换为 <、>、'、" 和 &。
假若不想转换时,只需要设定<c:out>的escapeXml 属性为fasle 就可以了。
范例
<c:out value="Hello JSP 2.0 !! " />
<c:out value="${ 3 + 5 }" />
<c:out value="${ param.data }" default="No Data" />
<c:out value="<p>有特殊字符</p>" />
<c:out value="<p>有特殊字符</p>" escapeXml="false" />
1.在网页上显示 Hello JSP 2.0 !! ;
2.在网页上显示 8;
3.在网页上显示由窗体传送过来的data 参数之值,假若没有data 参数,或data 参数的值为null 时,则网页上会显示No Data;
4.在网页上显示“<p>有特殊字符</p>”;
5.在网页上显示“有特殊字符”。
<c:set>
<c:set>主要用来将变量储存至JSP范围中或是JavaBean的属性中。
语法
语法1:将 value 的值储存至范围为scope 的 varName 变量之中
<c:set value="value" var="varName" [scope="{ page|request|session|application }"]/>
语法2:将本体内容的数据储存至范围为scope 的 varName 变量之中
<c:set var="varName" [scope="{ page|request|session|application }"]>
… 本体内容
</c:set>
语法3:将 value 的值储存至 target 对象的属性中
< c:set value="value" target="target" property="propertyName" />
语法4:
将本体内容的数据储存至 target 对象的属性中
<c:set target="target" property="propertyName">
… 本体内容
</c:set>
属性
名称 | 说明 | EL | 类型 | 必须 | 默认值 |
value | 要被储存的值 | Y | Object | 否 | 无 |
var | 欲存入的变量名称 | N | String | 否 | 无 |
scopevar | 变量的JSP范围 | N | String | 否 | page |
target | 为一JavaBean或java.util.Map对象 | Y | Object | 否 | 无 |
property | 指定target对象的属性 | Y | String | 否 | 无 |
范例
<c:set var="number" scope="request" value="${1 + 1}" />
<c:set var="number" scope="session" />
${3 + 5}
</c:set>
<c:set var="number" scope="request" value="${ param.number }" />
<c:set target="User" property="name" value="${ param.Username}" />
1.将2 存入Request 范围的number 变量中;
2.将8 存入Session 范围的number 变量中;<c:set>是把本体(body)运算后的结果来当做value的值。
3.假若 ${param.number}为null 时,则移除Request 范围的number 变量;若${param.number}不为null 时,则将 ${param.number}的值存入Request 范围的number 变量中;
4.假若 ${param.Username}为null 时,则设定User(JavaBean)的name 属性为null;若不为
null 时,则将 ${param.Username}的值存入User(JavaBean)的name 属性(setter 机制)。
注意
上述范例的3.中,假若 ${param.number}为null时,则表示移除Request范围的number变量。
<c:remove>
<c:remove>主要用来移除变量。
语法
<c:remove var="varName" [scope="{ page|request|session|application }"] />
属性
名称 | 说明 | EL | 类型 | 必须 | 默认值 |
var | 欲移除的变量名称 | N | String | 是 | 无 |
scope | var变量的JSP范围 | N | String | 否 | page |
说明
<c:remove>必须要有var 属性,即要被移除的属性名称,scope 则可有可无,例如:
<c:remove var="number" scope="session" />
将number 变量从Session 范围中移除。若我们不设定scope,则<c:remove>将会从Page、
Request、Session 及Application 中顺序寻找是否存在名称为number 的数据,若能找到时,则将它移除掉,反之则不会做任何的事情。
注意:当不指定scope时,回remove掉从page到application的var指定的变量
<c:catch>
<c:catch>主要用来处理产生错误的异常状况,并且将错误信息储存起来。
语法
<c:catch [var="varName"] >
… 欲抓取错误的部分
</c:catch>
属性
名称 | 说明 | EL | 类型 | 必须 | 默认值 |
var | 用来储存错误信息的变量 | N | String | 否 | 无 |
说明
<c:catch>主要将可能发生错误的部分放在<c:catch>和</c:catch>之间。如果真的发生错
误,可以将错误信息储存至varName 变量中,例如:
<c:catch var="message">
: //可能发生错误的部分
</c:catch>
另外,当错误发生在<c:catch>和</c:catch>之间时,则只有<c:catch>和</c:catch>之间的程序
会被中止忽略,但整个网页不会被中止。
<c:if>
<c:if>的用途就和我们一般在程序中用的if 一样。
语法
语法1:没有本体内容(body)
<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]/>
语法2:有本体内容
<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]>
具体内容
</c:if>
属性
名称 | 说明 | EL | 类型 | 必须 | 默认值 |
Test | 如果表达式的结果为true,则执行本体内容,false则相反 | Y | boolean | 是 | 无 |
var | 用来储存test运算后的结果,即true或false | N | String | 否 | 无 |
scope | var变量的JSP范围 | N | String | 否 | page |
<c:choose>
<c:choose>本身只当做 <c:when> 和 <c:otherwise> 的父标签。
语法
<c:choose>
本体内容( <when> 和 <otherwise> )
</c:choose>
限制
<c:choose>的本体内容只能有:
·空白
·1 或多个 <c:when>
·0 或多个 <c:otherwise>
说明
若使用<c:when>和<c:otherwise>来做流程控制时,两者都必须为<c:choose>的子标签.
<c:when>
<c:when>的用途就和我们一般在程序中用的when 一样。
语法
<c:when test="testCondition" >
本体内容
</c:when>
属性
名称 | 说明 | EL | 类型 | 必须 | 默认值 |
Test | 如果表达式的结果为true,则执行本体内容,false则相反 | Y | boolean | 是 | 无 |
限制
☆ <c:when>必须在<c:choose>和</c:choose>之间
☆ 在同一个<c:choose>中时,<c:when>必须在<c:otherwise>之前
说明
<c:when>必须有test 属性,当test中的表达式结果为true时,则会执行本体内容;如果为
false时,则不会执行。
<c:otherwise>
在同一个 <c:choose> 中,当所有 <c:when> 的条件都没有成立时,则执行<c:otherwise> 的
本体内容。
语法
<c:otherwise>
本体内容
</c:otherwise>
<c:forEach>
<c:forEach> 为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当
条件符合时,就会持续重复执行<c:forEach>的本体内容。
语法1:迭代一集合对象之所有成员
<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"][end="end"] [step="step"]>
本体内容
< /c:forEach>
语法2:迭代指定的次数
<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end"
[step="step"]>
本体内容
</c:forEach>
限制
·假若有begin 属性时,begin 必须大于等于 0
·假若有end 属性时,必须大于begin
·假若有step 属性时,step 必须大于等于0
Null 和错误处理
·假若items 为null 时,则表示为一空的集合对象
·假若begin 大于或等于items 时,则迭代不运算
最后
以上就是甜蜜哈密瓜为你收集整理的JSTL-核心标签库的全部内容,希望文章能够帮你解决JSTL-核心标签库所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复