JSTL标签库

JSTL标签库
     JSTL标签库分为五类,分别是JSTL核心标签库、数据库标签库、I18N格式化标签库、XML标签库和JSTL函数标签库。本章将详细介绍各类标签以及每个标签的使用方法和作用。
通过本章的学习,读者应该能够完成如下几个目标。
熟练掌握通过JSTL核心数据库定义变量,输出变量,移除变量。
熟练掌握通过数据库标签库完成数据库操作。
熟练掌握通过XML标签库完成XML文件操作。
熟练掌握通过I18N标签库完成国际化操作。
熟练掌握通过JSTL函数标签库完成常用函数操作。

1 JSTL核心标签
     在JSP页面中要使用到核心标签,必须使用<%@taglib%>指令,指定核心标签。代码如下。
<%@ taglib  prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

1.1 <c:set>标签
     JSTL提供了能方便定义变量的标签<c:set>,能够将变量储存在JSP范围中或者JavaBean属性中。其语法格式分为如下五种。
(1)指定变量名以及变量值,不指定scope(范围)。
<c:set var="username" value="value"></c:set>
(2)将value的值储存到范围为scope的变量中。
<c:set var="username" value="value" scope=”page | request | session | application”></c:set>
(3)将本体内容的数据储存至范围为scope的变量中。
<c:set var="varname" scope=”page | request | session | application”>
本体内容
</c:set>
(4)将value值储存到targer对象的属性中。
<c:set value=”value” target=”target” property=”propertyName”></c:set>
(5)将本体内容的数据储存到targer对象的属性中。
<c:set target=”target” property=”propertyName”>
本体内容
</c:set>

1.2 <c:out>标签
     <c:out>用来显示数据的内容,类似于<%=%>但是功能要更加强大。使用<c:out>输出内容比使用Scriptlets代码要更加简单,方便页面维护。其语法格式分为如下五种。
(1)通过在<c:out>中的value属性指定需要显示的值。
<c:out value="value"/>
(2)通过escapeXml属性设置是否将value中的内容按照原样输出。因为<c:out>默认会将<、>、’、”、&转换成&lt;、&gt;、&#039;、&#034;和&amp;。如果不想转换,只需要设定escapeXml属性为“false”。
<c:out value="value" escapeXml="true | false"/>
(3)通过default属性来指定默认值。如果value的值为null时,则显示default的值。
<c:out value="value" default="No data"/>
(4)通过本体内容来指定默认值。如果value的值为null时,则显示default的值。
<c:out value="value" escapeXml="true | false"/>
本体内容
</c:out>

1.3 <c:remove>标签
     <c:remove> 操作是用来移除指定范围的变量。其语法格式如下。
<c:remove var=”number” scope=”session”>
var属性指定待删除变量的名称,scope属性是可选的,用来指定删除变量的范围,缺省为page。

1.4 <c:if>标签
   <c:if>标签用来执行流程控制,其功能和Java语言中的if完全相同。<c:if>标签有两种语法格式。一种没有本体内容,一种有本体内容。
(1)没有本体内容的<c:if>标签格式如下。
<c:if test = ”testCondition” var=”varName”  [scope=”{page | request | session | application}]” />
其中test属性是必须填写的,表示进行判断的表达式。属性var定义变量,该变量存放判断后的结果。scope表示var定义变量储存的范围。
(2)有本体内容的<c:if>标签格式如下。
<c:if test = ”testCondition” var=”varName”  [scope=”{page | request | session | application}]” >
本体内容
</if>
其中test属性是必须填写的,当test中表达式的结果为true时,则会执行本体内容;如果为false则不会执行。

1.5 <c:choose>、<c:when>、<c:otherwise>标签
   <c:if>标签只能判断一个表达式,而且无法指定如果表达式不成立执行语句。JSTL同样提供了类似于if....else....的语句<c:choose>标签。
<c:choose>本身只能当<c:when>和<c:otherwise>的标签。其中可以有一个或多个<c:when>标签,有零个或多个<c:otherwise>标签。其语法格式如下。
<c:choose>
..
<c:when test = ”testCondition”>
</c:when>
..
<c:oherwise>
</c:oherwise>
</c:choose>

1.6 <c:forEach>标签
  <c:forEach>标签两种语法格式。一种用来遍历集合对象的成员,一种用来使语句循环执行指定次数。
(1)<c:forEach>遍历集合对象的成员,语法格式如下。
<c:forEach [var=”varname”] items=”collection” [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>
本地内容
</forEach>
其中“var”用来存放现在指到的成员。“items”指被迭代的集合对象。“varStatus”用来存放现在指到的相关成员的信息。“begin”表示开始位置(默认为0)。“end”表示结束位置。“step”表示步长(默认为1)。
(2)<c:forEach>指定语句执行次数,其语法格式如下。
<c:forEach [var=”varname”] [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>
本地内容
</forEach>

1.7 <c:forTokens>标签
  <c:forTokens>用来根据指定分隔符分割字符串。其语法格式如下。
<c:forTokens [var=”varname”] items=”stringOfTokens” delims=”delimiters” [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>
本地内容
</c:forTokens>
其中“var”、“varStatus”、“begin”、“end”、“step”属性和<c:forEach>标签中用法一样。“items”属性表示被分割的字符串,“delims”属性指定分隔符。
<c:forTokens>不仅可以分割仅有一个分隔符的字符串。也可以通过设定多个分割符来分割有多个分隔符的字符串,只需要设置多个分隔符就可以了。

1.8 <c:import>标签
  <c:import>可以把其他静态或动态的文件包含到本身的JSP网页中。它和JSP动作指令的<jsp:include>最大的差别在于:<jsp:include>只能包含和自己在同一Web application下的文件;而<c:import>除了能够包含和自己的同一Web application的文件外。也可以包含不同Web application或者其他网站的文件。
<c:import>的语法格式如下。
<c:import url=”url” [context=”context”] [var=”varName”] [scope=”{page | request | session | application}”] [charEncoding=”charEncoding”]>
本体内容
</c:import>
或者。
<c:import url=”url” [context=”context”] varReader=”varReaderName” [charEncoding=”charEncoding”]>
本体内容
</c:import>

1.9 <c:param>标签
<c:param>标签用来传递参数,其包含两个参数。<c:param>包含两个属性name和value。
< c:param >的语法格式如下。
<c:param name=“参数名” value=“参数值”>

1.10 <c:url>标签
  <c:url>标签用来生成URL,其语法格式分为两种,一种是不带参数的,一种是带参数的。语法格式如下。
不带参数的语法格式。
<c:url value=”value” [context=”context”] [var=”varName”] [scope=”{page | request | session | application}”] />
带参数的语法格式。
<c:url value=”value” [context=”context”] [var=”varName”] [scope=”{page | request | session | application}”] >
<c:param>标签
</c:url>

1.11 <c:redirect>标签
  使用<c: redirect >可以从一个JSP页面跳转其他的页面上去。而且可以通过<c:param>标签传递参数。
其语法格式分为两种,一种是不带参数的,一种是带参数的。语法格式如下。
不带参数的语法格式。
<c: redirect url=”url” [context=”context”] />
带参数的语法格式。
<c: redirect url=”url” [context=”context”] >
<c:param>
</c:redirect>

2 数据库标签库
在JSP中要使用SQL标签库,必须先使用<%@taglib%>指定,代码如下。
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

2.1 <sql:setDataSource>标签
使用JSTL的<sql:setDataSource>标签来设定数据源。<sql:setDataSource>标签的语法格式如下。
<sql:setDataSource url=”jdbcUrl”
driver=”driverClassName”
user=”userName”
password=”password”
[var=”varName”
[scope=”{page | request | session | application}”]/>

2.2 <sql:update>标签
JSTL提供了<sql:update>标签来进行增、删、改操作。<sql:update>的语法格式有两种,一种是将SQL语句写在标签里。格式如下。
<sql:update sql=”sqlUpdate” [var=”varName”]
[scope=”{page | request | session | application}”]
[dataSource=”dataSource”]
/>
另外一种是将SQL语句做为本体内容。

2.3 <sql:query>标签
JSTL中使用<sql:query>用来查询数据库中数据,<sql:query>的语法格式有两种,一种是将SQL语句写在标签里。格式如下。
<sql:query sql=”sqlQuery” [var=”varName”]
[scope=”{page | request | session | application}”]
[dataSource=”dataSource”]
[maxRows=”maxRows”]
[startRow=”startRow”]
/>

2.4 <sql:param>和<sql:dateParam>标签
使用<sql:param>和<sql:dateParam>标签能让SQL语句动态的设定变量。<sql:param>可用于各种数据类型,但是如果与时间或者日期有关时,则必须使用<sql:dateParam>来设定SQL语句中的Date类型。
<sql:param>有两种语法格式,一种没有本体内容。语法格式如下。
<sql:param value=”value”>
另外一种有本体内容。语法格式如下。
<sql:param>
value
</sql:param>

2.5 <sql:transaction >标签
<sql:transaction >标签提供存取数据库时的一种安全机制(事务处理安全机制)。其语法格式如下。
<sql:transaction [dataSource=”dataSource”]
[isolation=”read_committed | read_uncomitted | repeatabl_read | serializable]>
<sql:query>或者<sql:update>
</sql:transaction>

3 I18N格式化标签库
在JSP页面中要使用到格式化标签,必须使用<%@taglib%>指令,指定格式化标签。代码如下。
<%@ taglib  prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

3.1 <fmt: formatNumber>标签
<fmt: formatNumber>会根据区域或是定制的方式将数字格式化成数字、货币或百分比。语法分为两种,一种是没有本体内容,使用value属性来指定要格式化的数字;一种有本体内容,使用本体内容来指定要格式化的数字。
<fmt:formatNumber  value=”number” [type={number | currency | percent}]
[pattern=”pattern”]
[currencyCode=” currencyCode”]
[currencySymbol=” currencySymbol”]
[groupingUsed=”{true | false}”]
[maxIntegerDigits=” maxIntegerDigits”]
[minIntegerDigits=” minIntegerDigits”]
[maxFractionDigits=” maxFractionDigits”]
[minFractionDigits=” minFractionDigits”]
[var=”varName”]
[scope=”{page | request | session | application}”]
/>

3.2 <fmt: parseNumber>标签
<fmt: parseNumber>用来将字符串类型的数字、货币或百分比转换成数字类型。和<fmt: formatNumber>标签的作用正好相反。语法同样分为两种,一种是没有本体内容,使用value属性来指定要转换成数字的字符串;一种有本体内容,使用本体内容来指定转换成数字的字符串。
<fmt: parseNumber  value=”numberString” [type={number | currency | percent}]
[pattern=”pattern”]
[parseLocale=” parseLocale”]
[integerOnly=”{false | true}”]
[var=”varName”]
[scope=”{page | request | session | application}”]
/>

3.3 <fmt: formatDate>标签
<fmt: formatDate>会根据区域或是定制的方式将日期或时间格式化,用来将日期类型转化成字符串类型日期。其语法格式如下。
<fmt: formatDate  value=”number” [type={time | date | both}]
[pattern=”pattern”]
[dateStyle=”{default | short | medium | long | full}”]
[timeStyle=”{default | short | medium | long | full}”]
[timeZone=” timeZone”]
[var=”varName”]
[scope=”{page | request | session | application}”]
/>

3.4 <fmt: parseDate>标签
<fmt: parseDate>用来将字符串类型的时间或日期转换成日期时间类型。和<fmt: formatDate>标签的作用正好相反。语法同样分为两种,一种是没有本体内容,使用value属性来指定要转换成日期时间的字符串;一种有本体内容,使用本体内容来指定转换成日期时间的字符串。
<fmt: parseDate  value=”date” [type={time | date | both}]
[pattern=”pattern”]
[dateStyle=”{default | short | medium | long | full}”]
[timeStyle=”{default | short | medium | long | full}”]
[timeZone=” timeZone”]
[var=”varName”]
[scope=”{page | request | session | application}”]
/>

3.5 <fmt: setTimeZone>标签
<fmt: setTimeZone>用来设定默认时区或者是将时区储存到属性范围中。其语法格式如下。
<fmt:setTimeZone  value=”timeZone” [var=”varName”]
[scope=”{page | request | session | application}”]
/>

3.6 <fmt: timeZone>标签
<fmt: timeZone>用来暂时的设定时区。其语法格式如下。
<fmt:timeZone  value=”timeZone”>
本体内容
</fmt:setTimeZones>

3.7 <fmt: setLocale>标签
<fmt: setLocale>标签用来设定用户的区域语言。这里所指的区域语言是指用户所在地区使用的语言种类以及国家和地区的综合。比如中国内地所使用的语言为中文,语言代码为“zh”,而地区代码为“cn”,所以中国内地的语言区域为“zh_cn”。
<fmt:setLocale>的语法格式如下。
<fmt:setLocale value=”locale” [variant=”variant”]
[scope=”{page | request | session | application}”]
/>

3.8 <fmt: requestEncoding>标签
<fmt: requestEncoding>用来设定接受的字符串的编码格式,与request.setCharacterEncoding()功能一样。<fmt: requestEncoding >的语法格式如下。
<fmt: requestEncoding value=”charseName”/>

3.9 <fmt: setBundle>标签
<fmt: setBundle>用来设定默认的数据来源,也可以将储存到一定范围中,供需要时使用。<fmt: setBundle>的语法格式如下。
<fmt: setBundle basename=” basename” [var=”varName”]
[scope=”{page | request | session | application}”]
/>

3.10 <fmt: message>标签
<fmt: message>用来从指定的资源文件中通过索引(key)取得值(value)。其语法分为两种,一种是没有本体内容,使用key属性来指定要索引;一种有本体内容,使用本体内容来指定索引。语法格式如下。
<fmt: message key=”messageKey” [bundle=”resourceBundle”]
[var=”varName”]
[scope=”{page | request | session | application}”]
/>

3.11 <fmt: param>标签
当从资源文件中取得信息时,可能需要动态设定参数,例如用户名等。这是就需要通过<fmt:param>来传递参数。其语法分为两种,一种是没有本体内容,使用value属性来指定要参数值;一种有本体内容,使用本体内容来指定参数值。语法格式如下。
没有本体内容。
<fmt:param value=”messageParameter”/>
有本体内容。
<fmt:param value=”messageParameter”>
参数值
</fmt:param>

3.12 <fmt: bundle>标签
<fmt: bundle>同样用来设定数据来源,但是与<fmt: setBundle>不同的是,<fmt: bundle>设定数据来源只对本体内容中的标签有效。其语法格式如下。
<fmt:bundle basename=”basename” [prefix=”prefix”]>
本体内容{<fmt:message>}
</fmt:bundle>

4 XML标签库
XML标签根据标签功能主要分为三类:
(1)XML核心操作,用来解析XML文件、显示XML文件中的信息
(2)XML流程控制操作,用来对XML中信息进行判断,循环操作。
(3)XML转换操作,使用XML搭配XSLT显示在JSP页面上。

4.1 下载并安装进行XML操作必须的JAR文件
在前面讲解过如果安装JSTL,但是要想通过JSTL对XML进行操作还必须下载并安装“xalan.jar”和“serializer.jar”。如果没有安装该JAR文件的话,在进行XML操作时会出现错误提示。

4.2 <x:parse>标签
     <x:parse>标签用来解析指定的XML文件。其语法格式分为两种,一种没有本体内容,使用doc属性指定XML文件地址。一种有本体内容,在本体内容中给出要解析的XML文件。
<x:parse doc=”XMLDocument”
{var=”varName” [scope=”{page | request | session | session}”] |
varDom=”varNmae [scopeDom=”{page | request | session | session}”]”}
[systemId=” systemId”]
[filter=”filter”]/>

4.3 <x:out>标签
       <x:out>通过XPath语句将结果输出到JSP中。与<c:out>类似,但是<c:out>是输出变量值。其语法格式如下。
<x:out select=”XPathExpression” [escapXml=”{true} | false”]/>

4.4 <x:set>标签
       <x: set>通过XPath语句将结果储存在设定的属性范围的变量中。其语法格式如下。
<x: set
select=”XPathExpression”
var=”varName”
[scope=”{page | request | session | session}”]
/>

4.5 <x:if>标签
<x:if>同<c:if>类似都是用来做判断操作,其语法格式分为两种,一种没有本体内容,将判断的结果储存在属性范围的变量中。一种有本体内容,通过判断XPath语句,如何为“true”则执行本体内容中的代码,如果为“false”则不会执行。
没有本体内容。
<x:if select=”XPathExpression”
var=”varName” [scope=”{page|request|session|application}”]/>
有本体内容。
<x:if select=”XPathExpression”
[var=”varName”] [scope=”{page|request|session|application}”]>
本体内容
</x:if>

4.6 <x:choose>标签
<x:choose>标签同<c:choose>类似。同样XML标签库提供<x:when>标签和<x:otherwise>标签,三个标签通常结合在一起使用。其中只有<x:when>标签中有属性,其他两个标签都没有属性。
<x:when>标签使用XPath语句来进行判断。其语法格式如下。
<x:when select=”XPathExpression”>
本体内容
</x:when>

4.7 <x:forEach>标签
<x: forEach >标签同<c: forEach >类似。通过<c:forEach>可以遍历Java集合对象,而通过<x:forEach>可以遍历整个XML文件内容。其语法格式如下。
<x:forEach select=”XPathExpression”> [var=”varName”]
[varStatus=”varStatusName”]
[begin=”begin”] [end=”end”] [step=”step”]>
本体内容
</x:forEach>










你可能感兴趣的:(jstl标签)