`
kuru
  • 浏览: 137207 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JSTL

    博客分类:
  • java
阅读更多
JavaServer Pages Standard Tag Library (1.1 ),它的中文名称为 JSP 标准标签函数库。JSTL是一个标准的已制定好的标签库,可以应用于各种领域,如:基本输入输出、流程控制、循环、XML文件剖析、数据库查询及国际化和文字格式标准化的应用等。从表7-1 可以知道,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)

表 7-1
JSTL 前置名称 URI 范例
核心标签库 c http://java.sun.com/jsp/jstl/core <c:out>
I18N格式标签库 fmt http://java.sun.com/jsp/jstl/xml <fmt:formatDate>
SQL标签库 sql http://java.sun.com/jsp/jstl/sql <sql:query>
XML标签库 xml http://java.sun.com/jsp/jstl/fmt <x:forBach>
函数标签库 fn http://java.sun.com/jsp/jstl/functions <fn:split>

表 7-2
分类 功能分类 标签名称
Core 表达式操作 outsetremove catch
流程控制 if choose when otherwise
迭代操作 forEach forTokens
URL操作 Import param url param redirect param

在 JSP 中要使用 JSTL 中的核心标签库时,必须使用<%@ taglib %>指令,并且设定 prefix 和uri的值,通常设定如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

表达式操作
表达式操作分类中包含四个标签:<c:out>、<c:set>、<c:remove>和<c:catch>。
●  <c:out>
语法
语法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  需要显示出来的值 YObject  Object  是 无
default  如果value的值为null,则显示 default 的值 YObject  Object  否 无
escapeXml  是否转换特殊字符,如:<转换成&lt; Yboolean boolean  否 true
注意
表格中的EL字段,表示此属性的值是否可以为 EL表达式,例如:Y表示 attribute = "${表达式}"为符合语法的,N则反之。

●  <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 否 无
scope var变量的JSP范围 N String 否 page
target 为一JavaBean或java.util.Map 对象 Y Object  否 无
property  指定target对象的属性 Y  String    否 无
Null 和 错误处理
语法3和语法4会产生异常错误,有以下两种情况:
☆ target为null
☆ target不是java.util.Map 或 JavaBean 对象
假若value为null时:将由储存变量改为移除变量
☆ 语法1:由var和scope所定义的变量,将被移除
若scope已指定时,则 PageContext.removeAttribute(varName, scope)
若scope未指定时,则PageContext.removeAttribute(varName)
☆ 语法3:
假若target为Map时,则 Map.remove(property)
假若target为JavaBean时,property 指定的属性为 null

●  <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" />

●  <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>之间的程序会被中止忽略,但整个网页不会被中止。

7-2-2 流程控制
流程控制分类中包含四个标签:<c:if>、<c:choose>、<c:when>和<c:otherwise>.
●  <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: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>

迭代操作
迭代(Iterate)操作主要包含两个标签:<c:forEach>和<c:forTokens>.
●  <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>
属性
名称 说明 EL  类型 必须 默认值
var  用来存放现在指到的成员 N String  否 无
items  被迭代的集合对象 Y Arrays Collection Iterator Enumeration Map String 否 无
varStatus  用来存放现在指到的相关成员信息 N String  否 无
begin  开始的位置 Y int  否 0
end  结束的位置 Y int  否 最后一个成员
step  每次迭代的间隔数 Y int  否 1
说明
如果要循序浏览一个集合对象,并将它的内容显示出来,就必须有 items 属性。
<c:forEach>并不只是用来浏览集合对象而已, items并不是一定要有的属性,但是当没有使用 items 属性时,就一定要使用 begin 和 end 这两个属性。
<c:forEach>还提供varStatus 属性,主要用来存放现在指到之成员的相关信息。例如:
我们写成varStatus="s",那么将会把信息存放在名称为 s 的属性当中。varStatus属性还有另外四个属性:index、count、first和last,它们各自代表的意义如表 7-5:
表 7-5
属性 类型 意义
index  number  现在指到成员的索引
count  number  总共指到成员的总数
first  boolean  现在指到的成员是否为第一个成员
last  boolean  现在指到的成员是否为最后一个成员

●  <c:forTokens>
<c:forTokens> 用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。
语法
<c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"]
[varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
本体内容
</c:forTokens>

属性 
名称 说明 EL  类型 必须 默认值
var  用来存放现在指到的成员 N String  否 无
items  被迭代的字符串 Y String  是 无
delims  定义用来分割字符串的字符 N String  是 无
varStatus  用来存放现在指到的相关成员信息 N String  否 无
begin  开始的位置 Y int  否 0
end  结束的位置 Y int 否 最后一个成员
step 每次迭代的间隔数 Y Int 否 1
范例
下面为一个典型的<c:forTokens>的范例:
<c:forTokens items="A,B,C,D,E" delims="," var="item" >
${item}
</c:forTokens>



URL 操作
JSTL 包含三个与 URL 操作有关的标签,它们分别为:<c:import>、<c:redirect>和<c:url>。它们主要的功能是:用来将其他文件的内容包含起来、网页的导向,还有 url 的产生。
●  <c:import>
<c:import> 可以把其他静态或动态文件包含至本身 JSP 网页。它和 JSP Action 的<jsp:include>最大的差别在于:<jsp:include>只能包含和自己同一个 web application下的文件;
而<c:import>除了能包含和自己同一个 web application 的文件外,亦可以包含不同 web application或者是其他网站的文件。
语法
语法1:
<c:import url="url" [context="context"] [var="varName"]
[scope="{page|request|session|application}"] [charEncoding="charEncoding"]>
本体内容
</c:import>
语法2:
<c:import url="url" [context="context"]
varReader="varReaderName" [charEncoding="charEncoding"]>
本体内容
</c:import>
属性
名称 说明 EL 类型 必须 默认值
url 一文件被包含的地址 Y String 是 无
context  相同Container下,其他 web站台必须以“/” 开头 Y String 否 无
var  储存被包含的文件的内容(以String类型存入) N String 否 无
scope  var变量的JSP范围 N String 否 Page
charEncoding  被包含文件之内容的编码格式 Y String 否 无
varReader  储存被包含的文件的内容(以Reader类型存入) N    String 否 无
说明
<c:import>中必须要有 url 属性,它是用来设定被包含网页的地址。它可以为绝对地址或是相对地址.
<c:import>也支持FTP协议,假设现在有一个 FTP站台,地址为 ftp.javaworld.com.tw,它里面有一个文件data.txt,那么可以写成如下方式将其内容显示出来:
<c:import url="ftp://ftp.cse.yzu.edu.tw/data.txt" />
另外,可以在<c:import>的本体内容中使用<c:param>,它的功用主要是:可以将参数传递给被包含的文件,它有两个属性name和value.如:
<c:import url="http://java.sun.com" >
<c:param name="test" value="1234" />
</c:import>
这样的做法等于是包含一个文件,并且所指定的网址会变成如下:
http://java.sun.com?test=1234


●  <c:url>
<c:url>主要用来产生一个URL。
语法
语法1:没有本体内容
<c:url value="value" [context="context"] [var="varName"]
[scope="{page|request|session|application}"] />
语法2:本体内容代表查询字符串(Query String)参数
<c:url value="value" [context="context"] [var="varName"]
                             [scope="{page|request|session|application}"] >
<c:param> 标签
</c:url>
属性
名称 说明 EL 类型 必须 默认值
value 执行的URL Y String 是 无
context 相同Container下,其他web站台必须以“/”开头 Y String 否 无
var 储存被包含文件的内容(以String 类型存入) N String 否 无
scope var变量的JSP范围 N String 否 Page
<c:url value="http://www.javafan.net " >
<c:param name="param" value="value"/>
</c:url>
上面执行结果将会产生一个网址为http://www.javafan.net?param=value,我们更可以搭配 HTML 的<a>使用,如下:
<a href="
    <c:url value="http://www.javafan.net " >
    <c:param name="param" value="value"/>
</c:url>">Java爱好者</a>
如果<c:url>有 var属性时,则网址会被存到 varName中,而不会直接输出网址。

●  <c:redirect>
<c:redirect>可以将客户端的请求从一个 JSP 网页导向到其他文件。
语法
语法1:没有本体内容
<c:redirect url="url" [context="context"] />
语法2:本体内容代表查询字符串(Query String)参数
<c:redirect url="url" [context="context"] >
<c:param>
</c:redirect >
属性
名称 说明 EL 类型 必须 默认值
url 导向的目标地址 Y String 是 无
context 相同Container下,其他web站台必须以“/”开头 Y String 否 无
url就是设定要被导向到的目标地址,它可以是相对或绝对地址。
<c:redirect> 的功能不止可以导向网页,同样它还可以传递参数给目标文件。如:
<c:redirect url="http://java.sun.com">
<c:param name="param" value="value"/>
</c:redirect>
分享到:
评论

相关推荐

    jstl-1.2.1 jar

    jstl-1.2.1,之前的版本需要在服务器中配置一下,而且它分成了两个jar(jstl.jar和standard.jar)还有一个tld文件,而1.2已经不用配置了,直接把javax.servlet.jsp.jstl-1.2.1.jar和javax.servlet.jsp.jstl-api-1.2.1...

    jstl1.1.jar和standard1.1.jar

    今天做项目,用到了el表达式和jstl,在tomcat6.0上跑得好好的,没想到copy到tomcat5.5后,服务器起不来了,是tomcat版本的问题。查阅了不少资料,现在总结如下: 错误信息: java.lang.NoClassDefFoundError: javax...

    jstl-1.2.jar免费下载

    jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2.jar下载jstl-1.2...

    jstl标签使用的总结心得

    本人对jstl的一点小总结 JSTL是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。但是在即将推出的JSP 2.0中是作为标准...

    jstl el taglib 完整jar包

     如果你不使用JSTL 1.0标签 taglibs-standard-jstlel.JAR可以不使用。如果不使用XML库,Xalan包也可以省略。    如果你使用Maven构建您的应用程序,添加以下依赖关系到pom.xml文件: &lt;groupId&gt;org.apache....

    [jstl-1.2.jar]和[jstl-api-1.2.jar、standard.jar]两个版本.zip

    包含了两个版本jstl文件,standard.jar和jstl-api-1.2.jar是一个版本,导入时需要将两个都导入,jstl-1.2.jar是高版本的,是将低版本的两个文件合成一个了,故只需要导入一个文件即可,导入的同时在jsp文件首行写入 ...

    jstl-api-1.2和jstl-impl-1.2

    jstl-api-1.2和jstl-impl-1.2,jstl-api-1.2和jstl-impl-1.2,jstl-api-1.2和jstl-impl-1.2,jstl-api-1.2和jstl-impl-1.2

    JSTL标签JSTL标签

    JSTL标签JSTL标签JSTL标签JSTL标签JSTL标签JSTL标签JSTL标签JSTL标签JSTL标签JSTL标签JSTL标签JSTL标签

    JSTL函数JSTL函数

    JSTL函数JSTL函数JSTL函数JSTL函数JSTL函数JSTL函数JSTL函数JSTL函数

    JSTL中文帮助文档

    JSTL中文帮助文档 JSTL中文帮助文档 JSTL中文帮助文档 。。。

    JSTL 标签大全详解

    JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便,它与JSP动作标签一样,只不过它不是JSP内置的标签,需要我们自己导包,以及指定标签库而已! 如果你使用...

    jstl-1.2.jar 官方下载

    JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。在JSP 2.0中也...

    JSTL标签所需要的tld文件(c.tld、fmt.tld、fn.tld)

    JSTL标签所需要的tld文件,包括 c.tld、fmt.tld、fn.tld 三个 几乎所有的JSTL标签下载的zip中都只有一个c.tld,然后只讲解&lt;C:&gt;标签怎么用,其实&lt;fmt:&gt; &lt;fn:&gt;标签也非常好用和实用,找了好久才找到...

    jstl标准标签库jar包.zip

    &lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%&gt; jstl标准标签库的三个jar包:jstl-1.2、jstl-api-1.2、jstl-impl-1.2。 jstl标准标签库的三个jar包:jstl-1.2、jstl-api-1.2、jstl-impl-1.2。 ...

    jstl帮助 jstl帮助手册 jstl帮助文档

    jstl帮助 jstl帮助手册 jstl帮助文档

    jstljar包包含jstl.jar和standard.jar文件

    包含jstl.jar和standard.jar文件,如果要使用JSTL和EL表达式,就必须导入。

    jstl-api-1.2.jar、jstl-impl-1.2.jar

    鄙人分享 亲测可用 欢迎使用 jstl-impl-1.2.jar jstl-impl-1.2.jar、

    jstl-jar包.zip

    项目中添加 jstl.jar 和 standard.jar 两个jar包。然后在页面上添加如下引用: &lt;%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%&gt; &lt;%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt...

Global site tag (gtag.js) - Google Analytics