JSTL-核心标签库

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


是否转换特殊字符,如:<转换成&lt;


Y


boolean



true

 

注意

表格中的EL字段,表示此属性的值是否可以为EL表达式,例如:Y表示attribute
= "${表达式}"为符合语法的,N则反之。

 

Null
和错误处理

假若
value为null,会显示default的值;假若没有设定default的值,则会显示一个空的字符串。

说明

一般来说,<c:out>默认会将<、>、’、”
和& 转换为
&lt;、&gt;、'、"和
&amp;。

假若不想转换时,只需要设定<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时,则迭代不运算

<html>
<head>
<title>CH7 - Core_forEach.jsp</title>
</head>
<body>
<h2><c:out value="<c:forEach> 的用法" /></h2>
<%
String atts[] = new String [5];
atts[0]="hello";
atts[1]="this";
atts[2]="is";
atts[3]="a";
atts[4]="pen";
request.setAttribute("atts", atts);
%>
<c:forEach items="${atts}" var="item" >
${item}</br>
</c:forEach>
</body>
</html>

<c:forEach>除了支持数组之外,还有标准J2SE 的集合类型,例如:ArrayList、List、LinkedList、Vector、Stack和Set 等等;另外还包括java.util.Map 类的对象.

<c:forEach>并不只是用来浏览集合对象而已,读者可以从语法2中发现,items并不存在,但是当没有使用items属性时,就一定要使用begin和end这两个属性。

 

<html>
<head>
<title>CH7 - Core_forEach2.jsp</title>
</head>
<body>
<h2><c:out value=" 循环" /></h2>
<c:forEach begin="1" end="10" var="item" >
${item}</br>
</c:forEach>
</body>
</html>

上述范例中,我们并没有执行浏览集合对象,只是设定begin 和end 属性的值,这样它就
变成一个普通的循环。此范例是将循环设定为:从1 开始跑到10,总共会重复循环10 次,并
且将数字放到item 的属性当中. 

begin主要用来设定在集合对象中开始的位置(注意:第一个位置为0);end 用来设定结束的位置;而step 则是用来设定现在指到的成员和下一个将被指到成员之间的间隔.

另外,<c:forEach>还提供varStatus属性,主要用来存放现在指到之成员的相关信息。例如:
varStatus="s",那么将会把信息存放在名称为s的属性当中。varStatus属性还有另外四个属性:index、count、first和last,它们各自代表的意义如表:


属性


类型


意义


index


number


现在指到成员的索引


count


number


总共已经指到成员的总数


first


boolean


现在指到的成员是否为第一个成员


last


boolean


现在指到的成员是否为最后一个成员

可以使用varStatus 属性取得循环正在浏览之成员的信息,下面为一个简单的范例: 

<html>
<head>
</head>
<body>
<h2><c:out value="<c:forEach> varStatus 的四种属性" /></h2>
<%
String atts[] = new String [5];
atts[0]="hello";
atts[1]="this";
atts[2]="is";
atts[3]="a";
atts[4]="pen";
request.setAttribute("atts", atts);
%>
<c:forEach items="${atts}" var="item"varStatus="s">
<h2><c:out value="${item}"/>的四种属性:</h2>
index:${s.index}</br>
count:${s.count}</br>
first:${s.first}</br>
last:${s.last}</br>
</c:forEach>
</body>
</html>

还有一个例子,要获取:http://localhost:8080/t/index.jsp?a=123&b=256&com=297中的参数列表按如下:

键com:297
键b:256
键a:123

可以结合EL表单式实现:

<c:forEach items="${param}" var="b">
        键${b.key}:${b.value }<br/>
</c:forEach>

<c:forTokens> 

<c:forTokens> 用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。
语法:
<c:forTokens   items="stringOfTokens"

        delims="delimiters"

        [var="varName"]

        [varStatus="varStatusName"]

        [begin="begin"]

        [end="end"]

        [step="step"]>
本体内容
</c:forTokens>  

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>的begin、end、step、var 和varStatus 用法都和<c:forEach>一样,因此,笔者在这里就只介绍items 和delims 两个属性:items 的内容必须为字符串;而delims 是用来分割items 中定义的字符串之字符。

下面为一个典型的<c:forTokens>的范例:

<c:forTokens items="A,B,C,D,E" delims="," var="item" >
${item}
</c:forTokens>

 

上面范例执行后,将会在网页中输出ABCDE。它会把符号“,”当做分割的标记,拆成5 个部分,也就是执行循环5 次,但是并没有将A,B,C,D,E 中的“,”显示出来。items 也可以放入EL 的表达式,如下:

<%
String phoneNumber = "123-456-7899";
request.setAttribute("userPhone", phoneNumber);
%>
<c:forTokens items="${userPhone}" delims="-" var="item" >
${item}
</c:forTokens>

 

这个范例将会在网页上打印1234567899,也就是把123-456-7899以“-”当做分割标记,将字符串拆为3 份,每执行一次循环就将浏览的部分放到名称为item 的属性当中。delims 不只指定一种字符来分割字符串,它还可以一次设定多个分割字符串用的字符。如下面这个范例:

<c:forTokens items="A,B;C-D,E" delims=",;-" var="item" >
${item}
</c:forTokens>

此范例会在网页输出ABCDE,也就是说,delims 可以一次设定所有想当做分割字符串用的字符。其实用<c:forEach>也能做到分割字符串,写法如下:

<c:forEach items="A,B,C,D,E" var="item" >
${item}
</c:forEach>

上述范例同样也会在网页输出ABCDE。<c:forEach>并没有delims这个属性,因此<c:forEach>无法设定分割字符串用的字符,而<c:forEach>分割字符串用的字符只有“,”,这和使用<c:forTokens>,delims 属性设为“,”的结果相同。所以如果使用<c:forTokens>来分割字符串,功能和弹性上会比使用<c:forEach>来得较大。

原帖地址:http://www.cnblogs.com/Fskjb/archive/2009/07/05/1517164.html

时间: 2024-09-04 03:33:27

JSTL-核心标签库的相关文章

⑤早起的鸟儿有虫吃-JSTL核心标签库[收藏]

介绍 JSTL 全名为Java Server Pages Standard Tag Library(JSP Standard Tag Library),它的中文名称为JSP 标准标签函数库. Web 程序开发人员能够利用JSTL和EL来开发Web 程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序可读性.维护性和方便性. JSTL是一个标准的已制定好的标签库,可以应用于各种领域,如:基本输入输出.流程控制.循环.XML文件剖析.数据库查询及国际化和文字格式标准化的

Web---JSTL(Java标准标签库)-Core核心标签库、I18N国际化、函数库

前面为JSTL中的常用EL函数,后面的为具体演示实例! JSTL简介: JSTL(Java Standard Tag Library) –Java标准标签库. SUN公司制定的一套标准标签库的规范. JSTL标签库,是由一些Java类组成的. JSTL组成: JSTL –Core 核心标签库. 重点 JSTL – I18N - 国际化标签库.Internationalization- I18N JSTL – SQL – 数据库操作标签(有悖于MVC设计模式),现在都不用这个. JSTL - Fu

jstl 标签库:JSTL使用总结(1) 核心标签库

JSTL是JSP的标准标签库,他提供了许多非常实用的功能,免去了我们自定义标签的麻烦,从而达到在JSP页面中无Scriptlet的效果.JSTL只是方便了我们开发,如果不使用,并不会妨碍我们开发,一般JSTL是与表达式语言一起使用的.一.JSTL配置把JSTL.jar放入tomcat\lib中,并把JSTL.jar中的tld文件放入WEB-INF中,他所提供的tld文件有:(1)c.tld 核心标签库,提供比如迭代输出等操作.(2)fmt.tld 格式化操作.(3)sql.tld 提供sql查询

JSTL标签库(1) 核心标签库

JSTL标签库 JSTL标签库的使用是为类弥补html表的不足,规范自定义标签的使用而诞生的.在告别模式开发应用程序后,人们开始注重软件的分层设计,不希望在jsp页面中出现java逻辑代码,同时也由于自定义标签的开发难度较大和不利于技术标准化产生了自定义标签库. JSTL标签库可分为5类: (1).核心标签库 (2).I18N格式化标签库 (3).SQL标签库 (4).XML标签库 (5).函数标签库 1.核心标签库 JSTL的核心标签库标签共13个,从功能上可以分为4类:表达式控制标签.流程控

JSP中一些JSTL核心标签用法总结_JSP编程

一.JSTL介绍JSTL(JavaServer Pages Standard Tag Library)由JCP(Java Community Process)指定标准,提供给 Java Web 开发人员一个标准通用的标签函数库.和 EL 来取代传统直接在页面上嵌入 Java 程序(Scripting)的做法,以提高程序可读性.维护性和方便性.JSTL 主要由Apache组织的Jakarta Project 实现,容器必须支持Servlet 2.4 且JSP 2.0 以上版本. JSTL下载地址:

Java-JSTL(JSP标准标签库)介绍

js|标准 前言 从JSP 1.1规范开始,JSP就支持在JSP中使用自定义标签了,自定义标签的广泛使用造成了程序员重复定义,这样就促成了JSTL(JavaServer Pages Standard Tag Library)的诞生.因为工作中需要用到JSTL,但网上却苦于找不到有关JSTL的中文资料,所以就有了这篇文章. JSTL简介 JSTL是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的.JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器

JSTL标签库:XML标签库

JSTL提供了操作xml文件的标签库,使用xml标签库可以省去使用Dom和SAX标签库的繁琐,能轻松的读取xml文件的内容. 1 XML核心标签库 1.<x:parse>标签 <x:parse/>标签用来解析指定的xml文件. [语法1]: <x:parse doc="xmlDocument" {var="name"[scope="page|request|session|application"]|varDom=&

JavaWeb学习----JSTL标签库

一.JSTL简介: JSTL全名为JavaServer Pages Standard Tag Library,中文名称为JSP标准标签函数库,目前最新的版本为1.2.JSTL是由JCP(Java Community Process)所指定的标准规格,它主要提供给Java Web开发人员一个标准通用的标签函数库. Web 程序开发人员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序可读性.维护性和方便性. 既然是库文件,那我们就要

JSP标准标签库

JSP标准标签库     Pass by xkk ,and author is not clear   1. JSTL简介   JSTL全名JspServer Pages Standdard Tag Library(Jsp标准标签库),它是sun公司发布的一个针对JSP开发的新组件,它允许使用标签开发Jsp页面.    JSTL是一个标准的已制定好的标签库,它可以应用到很多领域. 如:基本输入输出.流程控制.循环.XML文件剖析.数据库查询及国际化和文字格式标准化的应用等.   JSTL所提供的