??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩一中文字幕,精品不卡视频,精品国产二区在线http://www.aygfsteel.com/sunbaby/articles/108940.htmlsunbabysunbabyFri, 06 Apr 2007 06:56:00 GMThttp://www.aygfsteel.com/sunbaby/articles/108940.html前言

从JSP 1.1规范开始,JSP支持在JSP中用自定义标签了,自定义标{q泛使用造成了程序员重复定义Q这样就促成了JSTLQJavaServer Pages Standard Tag LibraryQ的诞生?br>因ؓ工作中需要用到JSTLQ但|上却苦于找不到有关JSTL的中文资料,所以就有了q篇文章?br>
JSTL?br>
JSTL是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta组来维护的。JSTL只能q行在支持JSP1.2和Servlet2.3规范的容器上Q如tomcat 4.x。但是在卛_推出的JSP 2.0中是作ؓ标准支持的?br>JSTL目前的最新版本ؓ1.02Q最l发布版?.0。JSTL包含两个部分Q标{ֺ和ELQExpression Language表达式语aQ语a。标{ֺ目前支持四种标签Q标{?nbsp;URI 前缀 CZ 
Core http://java.sun.com/jstl/core c <c:tagname ...> 
XML processing http://java.sun.com/jstl/xml x <x:tagname ...> 
I18N capable formatting http://java.sun.com/jstl/fmt fmt <fmt:tagname ...> 
Database access (SQL) http://java.sun.com/jstl/sql sql <sql:tagname ...> 


Core支持JSP中的一些基本的操作Q?br>XML processing支持XML文档的处理;
I18N capable formatting支持对JSP面的国际化Q?br>Database access (SQL)支持JSPҎ据库的操作?br>
׃本h水^有限Q本文仅介绍Core标签Q如有兴,可一h讨其它三U标{使用与扩充?br>
EL语言介绍

EL语言是JSTL输出Q输入)一个JAVA表达式的表示形式?br>在JSTL中,EL语言只能在属性g使用。EL语言只能通过建立表达?{exp1}来进行调用。在属性g使用表达式有三种方式?br>
1?nbsp;value属性包含一个表辑ּ
<some:tag value="${expr}"/>
在这U情况下Q表辑ּD计算出来q根据类型{换规则赋值给value属性。比如:<c:out value="${username}" />中的${username}是一个ELQ它相当于JSP语句<%=request.getAttribute(“username”)%>?lt;%=session.getAttribute(“username”)%>

2?nbsp;value属性包含一个或多个属性,q些属性被文本分割或围l?br><some:tag value="some${expr}${expr}text${expr}"/>
在这U情况下Q表辑ּ从左到右q行计算Qƈ结果{换ؓ字符串型Q根据类型{换规则)Qƈ结果赋值给value属?br>
3?nbsp;value属性仅仅包含文?br><some:tag value="sometext"/>
在这U情况下Q字W串型属性value根据类型{换规则{换ؓ标签所希望的类型?br>
EL语言的操作符
取得某个对象或集合中的属性?br>Z获得集合中的属性,EL支持以下两种操作
1Q?nbsp;使用.操作W来获得有名字的属性。例如表辑ּ${user.username}表明对象user的username属?br>2Q?nbsp;使用[]操作W来获得有名字或按数字排列的属性?br>表达?{user["username"]}和表辑ּ${user. username }含义相同
表达?{row[0]} 表明row集合的第一个条目?br>在这里user是一个类的对象,它的属性username必须W合标准JavaBean的规范,卛_Mؓusername属性定义相应的getter、setterҎ?br>
Empty操作W?I值检?

使用empty操作W来军_对象、集合或字符串变量是否ؓI或null。例如:
${empty param.username}
如果request的参数列表中的usernamegؓnullQ则表达式的gؓtrue?nbsp;EL也可以直接用比较操作符与nullq行比较。如${param.firstname == null}?br>比较操作W操作符 描述 
==或eq 相等?nbsp;
!=或ne 不等?nbsp;
<或lt 于?nbsp;
>或gt 大于?nbsp;
<=或le 于{于?nbsp;
>=或ge 大于{于?nbsp;

数字q算W与逻辑q算W均与JAVA语言相同Q不再列表?br>
Core标签?br>
1?nbsp;通用标签

<c:out>
<c:out>标签用于在JSP中显C数据,它有如下属性属 ?nbsp;?nbsp;q?nbsp;是否必须 ~省?nbsp;
value 输出的信息,可以是EL表达式或帔R ?nbsp;?nbsp;
default  value为空时显CZ?nbsp;?nbsp;?nbsp;
escapeXml 为true则避开Ҏ的xml字符?nbsp;?nbsp;true 



例子:您的用户名是: <c:out value=”${user.username}” default=”guest”/> 

昄用户的用户名Q如为空则显Cguest
<c:out value="${sessionScope.username}"/> 

指定从session中获取username的值显C;
<c:out value="${username}" /> 

昄username的|默认是从request(page)中取Q如果request中没有名为username的对象则从session中取Qsession中没有则从application(servletContext)中取Q如果没有取CQ何值则不显C?br>
<c:set>
<c:set>标签用于保存数据Q它有如下属性属 ?nbsp;?nbsp;q?nbsp;是否必须 ~省?nbsp;
value 要保存的信息Q可以是EL表达式或帔R ?nbsp; 
target 需要修改属性的变量名,一般ؓjavabean的实?nbsp;?nbsp;?nbsp;
property 需要修改的javabean属?nbsp;?nbsp;?nbsp;
var 需要保存信息的变量 ?nbsp;?nbsp;
scope 保存信息的变量的范围 ?nbsp;page 

如果指定了target属? 那么property属性也必须指定?br>例子Q?lt;c:set value="${test.testinfo}" var="test2" scope=”session” /> 

test.testinfo的g存到session的test2中,其中test是一个javabean的实例,testinfo是test对象的属性?br><c:set target="${cust.address}" property="city" value="${city}"/> 

对象cust.address的city属性g存到变量city?br>
<c:remove>
<c:remove>标签用于删除数据Q它有如下属性属 ?nbsp;?nbsp;q?nbsp;是否必须 ~省?nbsp;
var 要删除的变量 ?nbsp;?nbsp;
scope 被删除变量的范围 ?nbsp;所有范_包括page、request、session、application{?nbsp;

例子:<c:remove var="test2" scope="session"/> 

从session中删除test2变量?br>
2?nbsp;控制标{?br>
<c:if>

<c:if>标签有如下属性属 ?nbsp;?nbsp;q?nbsp;是否必须 ~省?nbsp;
test 需要评L条gQ相当于if (...){}语句中的条g ?nbsp;?nbsp;
var 要求保存条gl果的变量名 ?nbsp;?nbsp;
scope 保存条gl果的变量范?nbsp;?nbsp;page 


<c:choose>
q个标签不接受Q何属?br>
<c:when>
<c:when>标签有以下属性属 ?nbsp;?nbsp;q?nbsp;是否必须 ~省?nbsp;
test 需要评L条g ?nbsp;?nbsp;


<c:otherwise>
q个标签同样不接受Q何属?br>
例子Q?lt;c:if test="${user.wealthy}">
user.wealthy is true.
</c:if> 

如果user.wealthy值trueQ则昄user.wealthy is true.

<c:choose>
<c:when test="${user.generous}">
user.generous is true.
</c:when> 
<c:when test="${user.stingy}">
user.stingy is true.
</c:when>
<c:otherwise>
user.generous and user.stingy are false.
</c:otherwise>
</c:choose> 

只有当条件user.generousq回值是trueӞ才显Cuser.generous is true.
只有当条件user.stingyq回值是trueӞ才显Cuser.stingy is true.
其它所有的情况Q即user.generous和user.stingy的值都不ؓtrueQ全部显Cuser.generous and user.stingy are false.

׃JSTL没有形如if (){…} else {…}的条件语句,所以这UŞ式的语句只能?lt;c:choose>?lt;c:when>?lt;c:otherwise>标签共同来完成了?br>
3?nbsp;循环控制标签

<c:forEach>
<c:forEach>标签用于通用数据Q它有以下属性属 ?nbsp;?nbsp;q?nbsp;是否必须 ~省?nbsp;
items q行循环的项?nbsp;?nbsp;?nbsp;
begin 开始条?nbsp;?nbsp;0 
end l束条g ?nbsp;集合中的最后一个项?nbsp;
step 步长 ?nbsp;1 
var 代表当前目的变量名 ?nbsp;?nbsp;
varStatus 昄循环状态的变量 ?nbsp;?nbsp;


例子Q?lt;c:forEach items="${vectors}" var="vector">
<c:out value="${vector}"/>
</c:forEach> 

相当于java语句for (int i=0;i<vectors.size();i++) {
out.println(vectors.get(i));


在这里vectors是一个java.util.Vector对象Q里面存攄是String数据Qvector是当前@环条件下String对象。实际上q里的vectors可以是Q何实Cjava.util. Collection接口的对象?br><c:forEach begin="0" end="100" var="i" step="1">
count=<c:out value="${i}"/><br>
</c:forEach>


输出:
count=0
...
count=100

<c:forTokens>
<c:forTokens>标签有以下属性属 ?nbsp;?nbsp;q?nbsp;是否必须 ~省?nbsp;
items q行循环的项?nbsp;?nbsp;?nbsp;
delims 分割W?nbsp;?nbsp;?nbsp;
begin 开始条?nbsp;?nbsp;0 
end l束条g ?nbsp;集合中的最后一个项?nbsp;
step 步长 ?nbsp;1 
var 代表当前目的变量名 ?nbsp;?nbsp;
varStatus 昄循环状态的变量 ?nbsp;?nbsp;


例子
<c:forTokens items="a:b:c:d" delims=":" var="token">
<c:out value="${token}"/>
</c:forTokens>


q个标签的用相当于java.util.StringTokenizercR在q里字W串a:b:c:d以:分开循环四次Qtoken是@环到当前分割到的字符丌Ӏ?br>
4.导入文g和URL

JSTL核心标签库支持?lt;c:import>来包含文Ӟ使用<c:url>来打印和格式化URL,使用<c:redirect>来重定向URL?br>
<c:import>
<c:import>标签包含另外一个页面代码到当前,它有以下属性属 ?nbsp;?nbsp;q?nbsp;是否必须 ~省?nbsp;
url 需要导入页面的url ?nbsp;?nbsp;
context /后跟本地web应用E序的名?nbsp;?nbsp;当前应用E序 
charEncoding 用于导入数据的字W集 ?nbsp;ISO-8859-1 
var 接受导入文本的变量名 ?nbsp;page 
scope 接受导入文本的变量的变量范围 ?nbsp;1 
varReader 用于接受导入文本的java.io.Reader变量?nbsp;?nbsp;?nbsp;
varStatus 昄循环状态的变量 ?nbsp;?nbsp;


<c:url>
<c:url>标签输出一个url地址Q它有以下属性属 ?nbsp;?nbsp;q?nbsp;是否必须 ~省?nbsp;
url url地址 ?nbsp;?nbsp;
context /后跟本地web应用E序的名?nbsp;?nbsp;当前应用E序 
charEncoding 用于导入数据的字W集 ?nbsp;ISO-8859-1 
var 接受处理q的url变量名,该变量存储url ?nbsp;输出到页 
scope 存储url的变量名的变量范?nbsp;?nbsp;page 


例子Q?br><c:import url="http://www.url.com/edit.js" var="newsfeed"/>


url http://www.url.com/edit.js包含到当前页的当前位|,q将url保存到newsfeed变量?br><a href="<c:url url="/index.jsp"/>"/>


在当前页的当前位|输?lt;a />
</c:redirect>


参?88以id为名字传递到login.jsp面Q相当于login.jsp?id=888


JSTL的优?br>1?nbsp;在应用程序服务器之间提供了一致的接口Q最大程序地提高了WEB应用在各应用服务器之间的UL?br>2?nbsp;化了JSP和WEB应用E序的开发?br>3?nbsp;以一U统一的方式减了JSP中的scriptlet代码数量Q可以达到没有Q何scriptlet代码的程序。在我们公司的项目中是不允许有Q何的scriptlet代码出现在JSP中?br>4?nbsp;允许JSP设计工具与WEB应用E序开发的q一步集成。相信不久就会有支持JSTL的IDE开发工具出现?br>
ȝ
上面介绍的仅仅是JSTL的一部分Q如果有旉我会l箋把其它部分写出来分nl大家。如果要使用JSTLQ则必须jstl.jar和standard.jar文g攑ֈclasspath中,如果你还需要用XML processing及Database access (SQL)标签Q还要将相关JAR文g攑ֈclasspath中,q些JAR文g全部存在于下载回来的zip文g中。这个zip文g可以从http://jakarta.apache.org/builds ... bs-standard-1.0.zip下蝲?br>
参考资?br>1?nbsp;http://java.sun.com/products/jsp/jstl/
sun公司的JSTL站点
2?nbsp;http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html
jakarta组的JSTL站点
3?nbsp;http://www.manning.com/bayern/appendixA.pdf
JSTL的参考文档,本文很多内容都是从这个PDF文g里翻译的?br>4?nbsp;Q<J2EE~程指南Q?.3版)Q>
介绍了JSTL的雏形,wrox的书都是_֓?

sunbaby 2007-04-06 14:56 发表评论
]]>
վ֩ģ壺 | | ͨ| | | ũ| | ǿ| ϳ| ֻ| | | | ¤| | ӻ| | Ͳ| | | | ˳| ƽ| | | | | ƽԶ| ʯɽ| | | ;| ˮ| | ʯ| Ϫ| ʩ| | | ͬ| |