科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道JSTL(JSP标准标签库)介绍

JSTL(JSP标准标签库)介绍

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

JSTL(JSP标准标签库)介绍

作者: js_steven 来源:赛迪网技术社区 2007年11月29日

关键字: 介绍 JSTL

  • 评论
  • 分享微博
  • 分享邮件
从JSP 1.1规范开始,JSP就支持在JSP中使用自定义标签了,自定义标签的广泛使用造成了程序员重复定义,这样就促成了JSTL(JavaServer Pages Standard Tag Library)的诞生。 ~*%e&gIO  
因为工作中需要用到JSTL,但网上却苦于找不到有关JSTL的中文资料,所以就有了这篇文章。 CqEgV@  
u(Uo} 6u9  
JSTL简介 (W(J  
`C> }mx`  
JSTL是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。但是在即将推出的JSP 2.0中是作为标准支持的。 .Q6/? //  
JSTL目前的最新版本为1.02,最终发布版为1.0。JSTL包含两个部分:标签库和EL(Expression Language表达式语言)语言。标签库目前支持四种标签: 标签 URI 前缀 示例 !FfKapz/  
Core http://java.sun.com/jstl/core c <c:tagname ...> Qw|'MES0  
XML processing http://java.sun.com/jstl/xml x <x:tagname ...> y ;f%d6S  
I18N capable formatting http://java.sun.com/jstl/fmt fmt <fmt:tagname ...> Y*>J ;uR1f  
Database access (SQL) http://java.sun.com/jstl/sql sql <sql:tagname ...> trs=j9f]  
Fu =%%_a  
{N/uc  
Core支持JSP中的一些基本的操作; >(C cRom  
XML processing支持XML文档的处理; x6 lI~MX  
I18N capable formatting支持对JSP页面的国际化; 7(Nnn, J@  
Database access (SQL)支持JSP对数据库的操作。 4v?*oe]  
WN+#m@  
由于本人水平有限,本文仅介绍Core标签,如有兴趣,可一起探讨其它三种标签的使用与扩充。 D\Qmce  
Jr tnZ} )  
EL语言介绍 @.}HP6KG  
 ^zER~M  
EL语言是JSTL输出(输入)一个JAVA表达式的表示形式。 *5K$!p6  
在JSTL中,EL语言只能在属性值中使用。EL语言只能通过建立表达式${exp1}来进行调用。在属性值中使用表达式有三种方式。 f,c'Fxr@  
l#fV`Mn  
1、 value属性包含一个表达式 X.<]Jl  
<some:tag value="${expr}"/> m-KhEXaet  
在这种情况下,表达式值被计算出来并根据类型转换规则赋值给value属性。比如:<c:out value="${username}" />中的${username}就是一个EL,它相当于JSP语句<%=request.getAttribute(“username”)%>或<%=session.getAttribute(“username”)%> )[",w@C  
`|S)9T0  
2、 value属性包含一个或多个属性,这些属性被文本分割或围绕 e>u78>UM  
<some:tag value="some${expr}${expr}text${expr}"/> u5N_glDU[  
在这种情况下,表达式从左到右进行计算,并将结果转换为字符串型(根据类型转换规则),并将结果赋值给value属性 7 ~\JH-  
x[?,S?Ax?  
3、 value属性仅仅包含文本 mQ |8  
<some:tag value="sometext"/> $Wx Gy9&  
在这种情况下,字符串型属性value将根据类型转换规则转换为标签所希望的类型。 K m>A1v  
}8 4O `[  
EL语言的操作符 xCv;3;n  
取得某个对象或集合中的属性值 9lfk:pC]d  
为了获得集合中的属性,EL支持以下两种操作 3 .Z=AD  
1. 使用.操作符来获得有名字的属性。例如表达式${user.username}表明对象user的username属性 h?(8p/#  
2. 使用[]操作符来获得有名字或按数字排列的属性。 S]&2/`4&L  
表达式${user["username"]}和表达式${user. username }含义相同 `.9 +TC1  
表达式${row[0]} 表明row集合的第一个条目。 @)veoWh  
在这里user是一个类的对象,它的属性username必须符合标准JavaBean的规范,即必须为username属性定义相应的getter、setter方法。 Mom:~Aye  
W6V;COi  
Empty操作符(空值检查) W w=':x%n  
5}Etk4F  
使用empty操作符来决定对象、集合或字符串变量是否为空或null。例如: %>=2vk2qA  
${empty param.username} +rx-gpFt  
如果request的参数列表中的username值为null,则表达式的值为true。 EL也可以直接使用比较操作符与null进行比较。如${param.firstname == null}。 hH>]#e<<  
比较操作符 操作符 描述 o5j~} 2  
==或eq 相等检查 *gf1R k  
!=或ne 不等检查 rG4N-<!]  
<或lt 小于检查 bp:'76*o  
>或gt 大于检查 2CJDoxpg T  
<=或le 小于等于检查 a&WFY+<Qu  
>=或ge 大于等于检查 yfR<?qy%  
)mLZg"=  
数字运算符与逻辑运算符均与JAVA语言相同,不再列表。 5,,Js[ACce  
IH3*?Hil  
Core标签库 jm>NLc}  
@1g :w0  
1、 通用标签 W"=7iP;<8#  
qy(k^G  
<c:out> X#bY;/  
<c:out>标签用于在JSP中显示数据,它有如下属性 属 性 描 述 是否必须 缺省值 =l5)o,9  
value 输出的信息,可以是EL表达式或常量 是 无 .l<NVL  
default value为空时显示信息 否 无 }bwZp  
escapeXml 为true则避开特殊的xml字符集 否 true Ixdb V9n  
^5`bgUX  
965=AA,dcB  
]gQ @i3  
例子: 您的用户名是: <c:out value=”${user.username}” default=”guest”/> J{JoAHnr)  
UL?/*L  
显示用户的用户名,如为空则显示guest ^0OQGXp  
<c:out value="${sessionScope.username}"/> tyGQ~M-+  
Z- gYG  
指定从session中获取username的值显示; 4L`2e[qw  
<c:out value="${username}" /> nATLg*cRc  
7!x7!50  
显示username的值,默认是从request(page)中取,如果request中没有名为username的对象则从session中取,session中没有则从application(servletContext)中取,如果没有取到任何值则不显示。 e@)gAptL  
Xz0JVeaQ  
<c:set> 4:?v$b   
<c:set>标签用于保存数据,它有如下属性 属 性 描 述 是否必须 缺省值 8:Lxp.a]  
value 要保存的信息,可以是EL表达式或常量 否 Eo :rL>d{  
target 需要修改属性的变量名,一般为javabean的实例 否 无 c=F$6<.n1  
property 需要修改的javabean属性 否 无 V=-an*  
var 需要保存信息的变量 否 无 >% U0>5  
scope 保存信息的变量的范围 否 page ^nb>6K t  
$nn` UL  
如果指定了target属性, 那么property属性也必须指定。 g7B#yv%  
例子: <c:set value="${test.testinfo}" var="test2" scope=”session” /> 7 phWH*  
#JK* Ag  
将test.testinfo的值保存到session的test2中,其中test是一个javabean的实例,testinfo是test对象的属性。 $Ld &IL  
<c:set target="${cust.address}" property="city" value="${city}"/> 2-f"f DL2U  
6IlK>~%M  
将对象cust.address的city属性值保存到变量city中 y Ad_NF  
3Y+e>_0`  
<c:remove> P\apl?"\Ut  
<c:remove>标签用于删除数据,它有如下属性 属 性 描 述 是否必须 缺省值 6},j2`  
var 要删除的变量 是 无 q2m<$DT  
scope 被删除变量的范围 否 所有范围,包括page、request、session、application等 ] dzBK* r  
= B\j (Q  
例子: <c:remove var="test2" scope="session"/> Vb9ayJ.1g}  
Y0k$|dK5  
从session中删除test2变量。 -a +M  
|2[ '60'Z  
2、 流控制标签 XWl%@KN  
= =H1eso  
<c:if> - RH'8D  
EPd#HCtI  
<c:if>标签有如下属性 属 性 描 述 是否必须 缺省值 $+Xa.H   
test 需要评价的条件,相当于if (...){}语句中的条件 是 无 wsm"8x/m  
var 要求保存条件结果的变量名 否 无 rVTGx (|!  
scope 保存条件结果的变量范围 否 page Gz0oHA0  
1t9@  
ki*DRo0,|  
<c:choose> \ .F<bM  
这个标签不接受任何属性 .iU3|g7|  
2.eZY>Ylg  
<c:when> jm3*m,\{  
<c:when>标签有以下属性 属 性 描 述 是否必须 缺省值 4[=^@;   
test 需要评价的条件 是 无 2/?m;ZbM  
UCa8  
T(oMHb[K  
<c:otherwise> VLwg"F~I  
这个标签同样不接受任何属性 'U:2 x9 }  
/8fT8Btn}  
例子: <c:if test="${user.wealthy}"> DT]Gr=QDE  
user.wealthy is true. 87x|}epb;  
</c:if> 3/$ mn  
ABSz"'}  
如果user.wealthy值true,则显示user.wealthy is true. * 'P$In  
APob A?Y  
<c:choose> uB|ber>  
<c:when test="${user.generous}"> \XLIX?}  
user.generous is true. ,J[;y1Zg[  
</c:when> [/.t+JBF[  
<c:when test="${user.stingy}"> B?xbd6#u  
user.stingy is true. k0asbH!R  
</c:when> d.>\(Mc  
<c:otherwise> |)R6O _~^  
user.generous and user.stingy are false. ou.Tzob2P  
</c:otherwise> biy7JBAbj  
</c:choose> h()bB$t`}i  
]5 \H'_  
只有当条件user.generous返回值是true时,才显示user.generous is true. fC5qRD`  
只有当条件user.stingy返回值是true时,才显示user.stingy is true. c=>>Q^`  
其它所有的情况(即user.generous和user.stingy的值都不为true)全部显示user.generous and user.stingy are false. 4Ljr\J~  
/ p${X  
由于JSTL没有形如if (){…} else {…}的条件语句,所以这种形式的语句只能用<c:choose>、<c:when>和<c:otherwise>标签共同来完成了。 &[_@|K 7  
~/ 9&D7-  
3、 循环控制标签 Q`Utgs~  
cOm] F  
<c:forEach>  ;Ltp  
<c:forEach>标签用于通用数据,它有以下属性 属 性 描 述 是否必须 缺省值 8R[ %I{\  
items 进行循环的项目 否 无 ztKo  <U  
begin 开始条件 否 0 ,k_#`L:"9{  
end 结束条件 否 集合中的最后一个项目 -Xs__R?  
step 步长 否 1 }^vL f  
var 代表当前项目的变量名 否 无 *=t*1lgUj  
varStatus 显示循环状态的变量 否 无 :J/nGU{/  
BAmP?#mcjP  
<RmzJ  
例子: <c:forEach items="${vectors}" var="vector"> h"*psBt ;%  
<c:out value="${vector}"/> @cF .$"T/l  
</c:forEach> I]X-r"  
X|t'@w'  
相当于java语句 for (int i=0;i<vectors.size();i++) { @W^Y"g  
out.println(vectors.get(i)); \giZUa6~P  
} cN|AxbZ  
pa"@HZ  
在这里vectors是一个java.util.Vector对象,里面存放的是String数据,vector是当前循环条件下String对象。实际上这里的vectors可以是任何实现了java.util. Collection接口的对象。 Z(<$UuX  
<c:forEach begin="0" end="100" var="i" step="1"> 5W{AI~tkL  
count=<c:out value="${i}"/><br> *p_tq{22  
</c:forEach> )OY!stq  
!K>@n8BX<  
3 N1:yV~c  
输出: h? K)I  
count=0 nL0abRSO  
...  '|$[g_  
count=100 R=h t^  
acG:l^#  
<c:forTokens> fw3e*Y\\<  
<c:forTokens>标签有以下属性 属 性 描 述 是否必须 缺省值 g8KFGJ!  
items 进行循环的项目 是 无 Zv@mTdHC!  
delims 分割符 是 无 .*m$u[P`5B  
begin 开始条件 否 0 '`w;J,`  
end 结束条件 否 集合中的最后一个项目 &~8w*pvz  
step 步长 否 1 M7wZ71}gN=  
var 代表当前项目的变量名 否 无 /Y)p@H  
varStatus 显示循环状态的变量 否 无 H!v&p6`F*  
= <7x3a8  
~hc)PXcR  
例子 0),d^R  
<c:forTokens items="a:b:c:d" delims=":" var="token"> T-MZ'&q-[  
<c:out value="${token}"/> uCXIh8KdO  
</c:forTokens> 7\3jCb_-  
p"?T\#~&  
d76;TTJC`  
这个标签的使用相当于java.util.StringTokenizer类。在这里将字符串a:b:c:d以:分开循环四次,token是循环到当前分割到的字符串。 !:ik#c'$N  
Dp*lz %$  
4.导入文件和URL U(w,%   
@nzg2RP;  
JSTL核心标签库支持使用<c:import>来包含文件,使用<c:url>来打印和格式化URL,使用<c:redirect>来重定向URL。 7mhDswn  
&}e:k  
<c:import> 1ElyXPQ..  
<c:import>标签包含另外一个页面代码到当前页,它有以下属性 属 性 描 述 是否必须 缺省值 GQ'C3Y) T  
url 需要导入页面的url 是 无 Lbpoa  
context /后跟本地web应用程序的名字 否 当前应用程序 kVE cfU  
charEncoding 用于导入数据的字符集 否 ISO-8859-1 nyTUJ#s1  
var 接受导入文本的变量名 否 page odtdYCkE  
scope 接受导入文本的变量的变量范围 否 1 &d+X5M 0NH  
varReader 用于接受导入文本的java.io.Reader变量名 否 无 T'O J$  
varStatus 显示循环状态的变量 否 无 &R|s@9GIN@  
;X{0sii^  
~ QT]vz;  
<c:url> )apis|J(  
<c:url>标签输出一个url地址,它有以下属性 属 性 描 述 是否必须 缺省值 "6f:#"zEo  
url url地址 是 无 WZ y^42?e  
context /后跟本地web应用程序的名字 否 当前应用程序 &Eo9DJN  
charEncoding 用于导入数据的字符集 否 ISO-8859-1 c2Fm9hJ  
var 接受处理过的url变量名,该变量存储url 否 输出到页  {~ h3Ga  
scope 存储url的变量名的变量范围 否 page oDDJ,id67  
tS Kz2nd8  
M/ $<l  
例子: ^QMoyb  
<c:import url="http://www.url.com/edit.js" var="newsfeed"/> cdX,#WF9  
35v]ZQ  
N TmW<  
将url http://www.url.com/edit.js包含到当前页的当前位置,并将url保存到newsfeed变量中 ` p_oxFG  
<a href="<c:url url="/index.jsp"/>"/> G8guIPu  
[=T|yL  
CR{`s|d  
在当前页的当前位置输出<a href="http://www.yourname.com/index.jsp"/>,http://www.yourname.com是当前页的所在的位置。 h1=n ]  
++(d~E ["  
=!q3 n`TJ  
<c:redirect> `O0Bkht  
<c:redirect>标签将请求重新定向到另外一个页面,它有以下属性 属 性 描 述 是否必须 缺省值 @}-|qEbgf  
url url地址 是 无 pQQ; s1f  
context /后跟本地web应用程序的名字 否 当前应用程序 gSaBDBE0  
k)j(%OF  
例子: }C+ EaD7  
<c:redirect url="http://www.yourname.com/login.jsp"/> =wc~=E  
&7pK (|  
4m{:O4[R  
将请求重新定向到http://www.yourname.com/login.jsp页,相当于response.setRedirect("http://www.yourname.com/login.jsp"); I}II+wR s  
\ # <_zs  
<c:param> >Y=7yvej  
<c:param>标签用来传递参数给一个重定向或包含页面,它有以下属性 属 性 描 述 是否必须 缺省值 dns%_Y^=  
name 在request参数中设置的变量名 是 无 G=f19  
value 在request参数中设置的变量值 否 无 $/r1la5  
.o{buk  
例子: gw6O|DuC  
<c:redirect url="login.jsp"> F I({ZbJC  
<c:param name="id" value="888"/> ch$k~Fhs  
</c:redirect> }O jS:a1  
%#9{sY+  
rnHm>(n^  
将参数888以id为名字传递到login.jsp页面,相当于login.jsp?id=888 }!|qUf  
9(sc+rwF  
] ! ]WZ  
JSTL的优点 .HXBC.<x  
1、 在应用程序服务器之间提供了一致的接口,最大程序地提高了WEB应用在各应用服务器之间的移植。 K<_/~g  
2、 简化了JSP和WEB应用程序的开发。 \3Wp7%o[  
3、 以一种统一的方式减少了JSP中的scriptlet代码数量,可以达到没有任何scriptlet代码的程序。在我们公司的项目中是不允许有任何的scriptlet代码出现在JSP中。 )A]=vb\b/  
4、 允许JSP设计工具与WEB应用程序开发的进一步集成。相信不久就会有支持JSTL的IDE开发工具出现。 M]1Fg\Q&  
<9}Yo~&T  
总结 _5r0a$11  
上面介绍的仅仅是JSTL的一部分,如果有时间我会继续把其它部分写出来分享给大家。如果要使用JSTL,则必须将jstl.jar和standard.jar文件放到classpath中,如果你还需要使用XML processing及Database access (SQL)标签,还要将相关JAR文件放到classpath中,这些JAR文件全部存在于下载回来的zip文件中。这个zip文件可以从http://jakarta.apache.org/builds/jakarta-taglibs/releases/standard/jakarta-taglibs-standard-1.0.zip下载。 4DJZ?m4o"  
DM.OT ,sE  
参考资料 O0C! q!Y  
1、 http://java.sun.com/products/jsp/jstl/ fI V0"  
sun公司的JSTL站点 ,AC:cJox^  
2、 http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html Jd Ydaw  
jakarta小组的JSTL站点 ~W|P`a  
3、 http://www.manning.com/bayern/appendixA.pdf F"!@9f+Nr  
JSTL的参考文档,本文很多内容都是从这个PDF文件里翻译的。 #XL3pM  
4、 <<J2EE编程指南(1.3版)>> }RHz0;|  
介绍了JSTL的雏形,wrox的书都是精品。
查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章