﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-落叶归根-文章分类-JSTL</title><link>http://www.blogjava.net/allan-oy/category/8579.html</link><description>一个人首先要尊重别人，然后才能得到别人的尊重；一个人首先要对自己负责，然后才有资格去对别人负责。</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 05:02:52 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 05:02:52 GMT</pubDate><ttl>60</ttl><item><title>JSTL（JSP标准标签库）介绍</title><link>http://www.blogjava.net/allan-oy/articles/35686.html</link><dc:creator>落叶归根</dc:creator><author>落叶归根</author><pubDate>Thu, 16 Mar 2006 09:25:00 GMT</pubDate><guid>http://www.blogjava.net/allan-oy/articles/35686.html</guid><wfw:comment>http://www.blogjava.net/allan-oy/comments/35686.html</wfw:comment><comments>http://www.blogjava.net/allan-oy/articles/35686.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/allan-oy/comments/commentRss/35686.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/allan-oy/services/trackbacks/35686.html</trackback:ping><description><![CDATA[<STRONG>JSTL（JSP标准标签库）介绍<BR></STRONG>作者:令少爷(<A href="mailto:shaoye@dev-club.com">shaoye@dev-club.com</A>) <BR><BR><B>前言</B><BR><BR>从JSP　1.1规范开始，JSP就支持在JSP中使用自定义标签了，自定义标签的广泛使用造成了程序员重复定义，这样就促成了JSTL（JavaServer Pages Standard Tag Library）的诞生。<BR>因为工作中需要用到JSTL，但网上却苦于找不到有关JSTL的中文资料，所以就有了这篇文章。<BR><BR><B>JSTL简介</B><BR><BR>JSTL是一个不断完善的开放源代码的JSP标签库，是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上，如tomcat 4.x。但是在即将推出的JSP 2.0中是作为标准支持的。<BR>JSTL目前的最新版本为1.02，最终发布版为1.0。JSTL包含两个部分：标签库和EL（Expression Language表达式语言）语言。标签库目前支持四种标签： 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>标签</TD>
<TD class=ubb>URI</TD>
<TD class=ubb>前缀</TD>
<TD class=ubb>示例</TD></TR>
<TR>
<TD class=ubb>Core</TD>
<TD class=ubb>http://java.sun.com/jstl/core</TD>
<TD class=ubb>c</TD>
<TD class=ubb>&lt;c:tagname ...&gt;</TD></TR>
<TR>
<TD class=ubb>XML processing</TD>
<TD class=ubb>http://java.sun.com/jstl/xml</TD>
<TD class=ubb>x</TD>
<TD class=ubb>&lt;x:tagname ...&gt;</TD></TR>
<TR>
<TD class=ubb>I18N capable formatting</TD>
<TD class=ubb>http://java.sun.com/jstl/fmt</TD>
<TD class=ubb>fmt</TD>
<TD class=ubb>&lt;fmt:tagname ...&gt;</TD></TR>
<TR>
<TD class=ubb>Database access (SQL)</TD>
<TD class=ubb>http://java.sun.com/jstl/sql</TD>
<TD class=ubb>sql</TD>
<TD class=ubb>&lt;sql:tagname ...&gt;</TD></TR></TBODY></TABLE><BR><BR>Core支持JSP中的一些基本的操作；<BR>XML processing支持XML文档的处理；<BR>I18N capable formatting支持对JSP页面的国际化；<BR>Database access (SQL)支持JSP对数据库的操作。<BR><BR>由于本人水平有限，本文仅介绍Core标签，如有兴趣，可一起探讨其它三种标签的使用与扩充。<BR><BR><B>EL语言介绍</B><BR><BR>EL语言是JSTL输出（输入）一个JAVA表达式的表示形式。<BR>在JSTL中，EL语言只能在属性值中使用。EL语言只能通过建立表达式${exp1}来进行调用。在属性值中使用表达式有三种方式。<BR><BR>1、 value属性包含一个表达式<BR>&lt;some:tag value="${expr}"/&gt;<BR>在这种情况下，表达式值被计算出来并根据类型转换规则赋值给value属性。比如：&lt;c:out value="${username}" /&gt;中的${username}就是一个EL，它相当于JSP语句&lt;%=request.getAttribute(“username”)%&gt;或&lt;%=session.getAttribute(“username”)%&gt;<BR><BR>2、 value属性包含一个或多个属性，这些属性被文本分割或围绕<BR>&lt;some:tag value="some${expr}${expr}text${expr}"/&gt;<BR>在这种情况下，表达式从左到右进行计算，并将结果转换为字符串型（根据类型转换规则），并将结果赋值给value属性<BR><BR>3、 value属性仅仅包含文本<BR>&lt;some:tag value="sometext"/&gt;<BR>在这种情况下，字符串型属性value将根据类型转换规则转换为标签所希望的类型。<BR><BR><B>EL语言的操作符</B><BR>取得某个对象或集合中的属性值<BR>为了获得集合中的属性，EL支持以下两种操作<BR>1． 使用.操作符来获得有名字的属性。例如表达式${user.username}表明对象user的username属性<BR>2． 使用[]操作符来获得有名字或按数字排列的属性。<BR>表达式${user["username"]}和表达式${user. username }含义相同<BR>表达式${row[0]} 表明row集合的第一个条目。<BR>在这里user是一个类的对象，它的属性username必须符合标准JavaBean的规范，即必须为username属性定义相应的getter、setter方法。<BR><BR>Empty操作符(空值检查)<BR><BR>使用empty操作符来决定对象、集合或字符串变量是否为空或null。例如：<BR>${empty param.username}<BR>如果request的参数列表中的username值为null，则表达式的值为true。 EL也可以直接使用比较操作符与null进行比较。如${param.firstname == null}。<BR>比较操作符 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>操作符</TD>
<TD class=ubb>描述</TD></TR>
<TR>
<TD class=ubb>==或eq</TD>
<TD class=ubb>相等检查</TD></TR>
<TR>
<TD class=ubb>!=或ne</TD>
<TD class=ubb>不等检查</TD></TR>
<TR>
<TD class=ubb>&lt;或lt</TD>
<TD class=ubb>小于检查</TD></TR>
<TR>
<TD class=ubb>&gt;或gt</TD>
<TD class=ubb>大于检查</TD></TR>
<TR>
<TD class=ubb>&lt;=或le</TD>
<TD class=ubb>小于等于检查</TD></TR>
<TR>
<TD class=ubb>&gt;=或ge</TD>
<TD class=ubb>大于等于检查</TD></TR></TBODY></TABLE><BR>数字运算符与逻辑运算符均与JAVA语言相同，不再列表。<BR><BR><B>Core标签库</B><BR><BR><B>1、 通用标签</B><BR><BR><B>&lt;c:out&gt;</B><BR>&lt;c:out&gt;标签用于在JSP中显示数据，它有如下属性 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>属 性</TD>
<TD class=ubb>描 述</TD>
<TD class=ubb>是否必须</TD>
<TD class=ubb>缺省值</TD></TR>
<TR>
<TD class=ubb>value</TD>
<TD class=ubb>输出的信息，可以是EL表达式或常量</TD>
<TD class=ubb>是</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>default </TD>
<TD class=ubb>value为空时显示信息</TD>
<TD class=ubb>否</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>escapeXml</TD>
<TD class=ubb>为true则避开特殊的xml字符集</TD>
<TD class=ubb>否</TD>
<TD class=ubb>true</TD></TR></TBODY></TABLE><BR><BR><BR>例子: 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>您的用户名是: &lt;c:out value=”${user.username}” default=”guest”/&gt;</TD></TR></TBODY></TABLE><BR>显示用户的用户名，如为空则显示guest<BR>
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>&lt;c:out value="${sessionScope.username}"/&gt;</TD></TR></TBODY></TABLE><BR>指定从session中获取username的值显示；<BR>
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>&lt;c:out value="${username}" /&gt;</TD></TR></TBODY></TABLE><BR>显示username的值，默认是从request(page)中取，如果request中没有名为username的对象则从session中取，session中没有则从application(servletContext)中取，如果没有取到任何值则不显示。<BR><BR><B>&lt;c:set&gt;</B><BR>&lt;c:set&gt;标签用于保存数据，它有如下属性 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>属 性</TD>
<TD class=ubb>描 述</TD>
<TD class=ubb>是否必须</TD>
<TD class=ubb>缺省值</TD></TR>
<TR>
<TD class=ubb>value</TD>
<TD class=ubb>要保存的信息，可以是EL表达式或常量</TD>
<TD class=ubb>否</TD>
<TD class=ubb></TD></TR>
<TR>
<TD class=ubb>target</TD>
<TD class=ubb>需要修改属性的变量名，一般为javabean的实例</TD>
<TD class=ubb>否</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>property</TD>
<TD class=ubb>需要修改的javabean属性</TD>
<TD class=ubb>否</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>var</TD>
<TD class=ubb>需要保存信息的变量</TD>
<TD class=ubb>否</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>scope</TD>
<TD class=ubb>保存信息的变量的范围</TD>
<TD class=ubb>否</TD>
<TD class=ubb>page</TD></TR></TBODY></TABLE><BR>如果指定了target属性, 那么property属性也必须指定。<BR>例子： 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>&lt;c:set value="${test.testinfo}" var="test2" scope=”session” /&gt;</TD></TR></TBODY></TABLE><BR>将test.testinfo的值保存到session的test2中，其中test是一个javabean的实例，testinfo是test对象的属性。<BR>
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>&lt;c:set target="${cust.address}" property="city" value="${city}"/&gt;</TD></TR></TBODY></TABLE><BR>将对象cust.address的city属性值保存到变量city中<BR><BR><B>&lt;c:remove&gt;</B><BR>&lt;c:remove&gt;标签用于删除数据，它有如下属性 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>属 性</TD>
<TD class=ubb>描 述</TD>
<TD class=ubb>是否必须</TD>
<TD class=ubb>缺省值</TD></TR>
<TR>
<TD class=ubb>var</TD>
<TD class=ubb>要删除的变量</TD>
<TD class=ubb>是</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>scope</TD>
<TD class=ubb>被删除变量的范围</TD>
<TD class=ubb>否</TD>
<TD class=ubb>所有范围，包括page、request、session、application等</TD></TR></TBODY></TABLE><BR>例子: 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>&lt;c:remove var="test2" scope="session"/&gt;</TD></TR></TBODY></TABLE><BR>从session中删除test2变量。<BR><BR><B>2、 流控制标签</B><BR><BR><B>&lt;c:if&gt;</B><BR><BR>&lt;c:if&gt;标签有如下属性 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>属 性</TD>
<TD class=ubb>描 述</TD>
<TD class=ubb>是否必须</TD>
<TD class=ubb>缺省值</TD></TR>
<TR>
<TD class=ubb>test</TD>
<TD class=ubb>需要评价的条件，相当于if (...){}语句中的条件</TD>
<TD class=ubb>是</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>var</TD>
<TD class=ubb>要求保存条件结果的变量名</TD>
<TD class=ubb>否</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>scope</TD>
<TD class=ubb>保存条件结果的变量范围</TD>
<TD class=ubb>否</TD>
<TD class=ubb>page</TD></TR></TBODY></TABLE><BR><BR><B>&lt;c:choose&gt;</B><BR>这个标签不接受任何属性<BR><BR><B>&lt;c:when&gt;</B><BR>&lt;c:when&gt;标签有以下属性 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>属 性</TD>
<TD class=ubb>描 述</TD>
<TD class=ubb>是否必须</TD>
<TD class=ubb>缺省值</TD></TR>
<TR>
<TD class=ubb>test</TD>
<TD class=ubb>需要评价的条件</TD>
<TD class=ubb>是</TD>
<TD class=ubb>无</TD></TR></TBODY></TABLE><BR><BR><B>&lt;c:otherwise&gt;</B><BR>这个标签同样不接受任何属性<BR><BR>例子： 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>&lt;c:if test="${user.wealthy}"&gt;<BR>user.wealthy is true.<BR>&lt;/c:if&gt;</TD></TR></TBODY></TABLE><BR>如果user.wealthy值true，则显示user.wealthy is true.<BR><BR>
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>&lt;c:choose&gt;<BR>&lt;c:when test="${user.generous}"&gt;<BR>user.generous　is true.<BR>&lt;/c:when&gt; <BR>&lt;c:when test="${user.stingy}"&gt;<BR>user.stingy is true.<BR>&lt;/c:when&gt;<BR>&lt;c:otherwise&gt;<BR>user.generous and user.stingy are false.<BR>&lt;/c:otherwise&gt;<BR>&lt;/c:choose&gt;</TD></TR></TBODY></TABLE><BR>只有当条件user.generous返回值是true时，才显示user.generous　is true.<BR>只有当条件user.stingy返回值是true时，才显示user.stingy　is true.<BR>其它所有的情况（即user.generous和user.stingy的值都不为true）全部显示user.generous and user.stingy are false.<BR><BR>由于JSTL没有形如if (){…} else {…}的条件语句，所以这种形式的语句只能用&lt;c:choose&gt;、&lt;c:when&gt;和&lt;c:otherwise&gt;标签共同来完成了。<BR><BR><B>3、 循环控制标签</B><BR><BR><B>&lt;c:forEach&gt;</B><BR>&lt;c:forEach&gt;标签用于通用数据，它有以下属性 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>属 性</TD>
<TD class=ubb>描 述</TD>
<TD class=ubb>是否必须</TD>
<TD class=ubb>缺省值</TD></TR>
<TR>
<TD class=ubb>items</TD>
<TD class=ubb>进行循环的项目</TD>
<TD class=ubb>否</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>begin</TD>
<TD class=ubb>开始条件</TD>
<TD class=ubb>否</TD>
<TD class=ubb>0</TD></TR>
<TR>
<TD class=ubb>end</TD>
<TD class=ubb>结束条件</TD>
<TD class=ubb>否</TD>
<TD class=ubb>集合中的最后一个项目</TD></TR>
<TR>
<TD class=ubb>step</TD>
<TD class=ubb>步长</TD>
<TD class=ubb>否</TD>
<TD class=ubb>1</TD></TR>
<TR>
<TD class=ubb>var</TD>
<TD class=ubb>代表当前项目的变量名</TD>
<TD class=ubb>否</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>varStatus</TD>
<TD class=ubb>显示循环状态的变量</TD>
<TD class=ubb>否</TD>
<TD class=ubb>无</TD></TR></TBODY></TABLE><BR><BR>例子： 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>&lt;c:forEach items="${vectors}" var="vector"&gt;<BR>&lt;c:out value="${vector}"/&gt;<BR>&lt;/c:forEach&gt;</TD></TR></TBODY></TABLE><BR>相当于java语句 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>for (int i=0;i&lt;vectors.size();i++) {<BR>out.println(vectors.get(i));<BR>}</TD></TR></TBODY></TABLE><BR>在这里vectors是一个java.util.Vector对象，里面存放的是String数据，vector是当前循环条件下String对象。实际上这里的vectors可以是任何实现了java.util. Collection接口的对象。 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb><BR>&lt;c:forEach begin="0" end="100" var="i" step="1"&gt;<BR>count=&lt;c:out value="${i}"/&gt;&lt;br&gt;<BR>&lt;/c:forEach&gt;<BR></TD></TR></TBODY></TABLE><BR>输出:<BR>count=0<BR>...<BR>count=100<BR><BR><B>&lt;c:forTokens&gt;</B><BR>&lt;c:forTokens&gt;标签有以下属性 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>属 性</TD>
<TD class=ubb>描 述</TD>
<TD class=ubb>是否必须</TD>
<TD class=ubb>缺省值</TD></TR>
<TR>
<TD class=ubb>items</TD>
<TD class=ubb>进行循环的项目</TD>
<TD class=ubb>是</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>delims</TD>
<TD class=ubb>分割符</TD>
<TD class=ubb>是</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>begin</TD>
<TD class=ubb>开始条件</TD>
<TD class=ubb>否</TD>
<TD class=ubb>0</TD></TR>
<TR>
<TD class=ubb>end</TD>
<TD class=ubb>结束条件</TD>
<TD class=ubb>否</TD>
<TD class=ubb>集合中的最后一个项目</TD></TR>
<TR>
<TD class=ubb>step</TD>
<TD class=ubb>步长</TD>
<TD class=ubb>否</TD>
<TD class=ubb>1</TD></TR>
<TR>
<TD class=ubb>var</TD>
<TD class=ubb>代表当前项目的变量名</TD>
<TD class=ubb>否</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>varStatus</TD>
<TD class=ubb>显示循环状态的变量</TD>
<TD class=ubb>否</TD>
<TD class=ubb>无</TD></TR></TBODY></TABLE><BR><BR>例子 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb><BR>&lt;c:forTokens items="a:b:c:d" delims=":" var="token"&gt;<BR>&lt;c:out value="${token}"/&gt;<BR>&lt;/c:forTokens&gt;<BR></TD></TR></TBODY></TABLE><BR>这个标签的使用相当于java.util.StringTokenizer类。在这里将字符串a:b:c:d以：分开循环四次，token是循环到当前分割到的字符串。<BR><BR><B>4.导入文件和URL</B><BR><BR>JSTL核心标签库支持使用&lt;c:import&gt;来包含文件，使用&lt;c:url&gt;来打印和格式化URL,使用&lt;c:redirect&gt;来重定向URL。<BR><BR><B>&lt;c:import&gt;</B><BR>&lt;c:import&gt;标签包含另外一个页面代码到当前页，它有以下属性 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>属 性</TD>
<TD class=ubb>描 述</TD>
<TD class=ubb>是否必须</TD>
<TD class=ubb>缺省值</TD></TR>
<TR>
<TD class=ubb>url</TD>
<TD class=ubb>需要导入页面的url</TD>
<TD class=ubb>是</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>context</TD>
<TD class=ubb>/后跟本地web应用程序的名字</TD>
<TD class=ubb>否</TD>
<TD class=ubb>当前应用程序</TD></TR>
<TR>
<TD class=ubb>charEncoding</TD>
<TD class=ubb>用于导入数据的字符集</TD>
<TD class=ubb>否</TD>
<TD class=ubb>ISO-8859-1</TD></TR>
<TR>
<TD class=ubb>var</TD>
<TD class=ubb>接受导入文本的变量名</TD>
<TD class=ubb>否</TD>
<TD class=ubb>page</TD></TR>
<TR>
<TD class=ubb>scope</TD>
<TD class=ubb>接受导入文本的变量的变量范围</TD>
<TD class=ubb>否</TD>
<TD class=ubb>1</TD></TR>
<TR>
<TD class=ubb>varReader</TD>
<TD class=ubb>用于接受导入文本的java.io.Reader变量名</TD>
<TD class=ubb>否</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>varStatus</TD>
<TD class=ubb>显示循环状态的变量</TD>
<TD class=ubb>否</TD>
<TD class=ubb>无</TD></TR></TBODY></TABLE><BR><BR><B>&lt;c:url&gt;</B><BR>&lt;c:url&gt;标签输出一个url地址，它有以下属性 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>属 性</TD>
<TD class=ubb>描 述</TD>
<TD class=ubb>是否必须</TD>
<TD class=ubb>缺省值</TD></TR>
<TR>
<TD class=ubb>url</TD>
<TD class=ubb>url地址</TD>
<TD class=ubb>是</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>context</TD>
<TD class=ubb>/后跟本地web应用程序的名字</TD>
<TD class=ubb>否</TD>
<TD class=ubb>当前应用程序</TD></TR>
<TR>
<TD class=ubb>charEncoding</TD>
<TD class=ubb>用于导入数据的字符集</TD>
<TD class=ubb>否</TD>
<TD class=ubb>ISO-8859-1</TD></TR>
<TR>
<TD class=ubb>var</TD>
<TD class=ubb>接受处理过的url变量名，该变量存储url</TD>
<TD class=ubb>否</TD>
<TD class=ubb>输出到页</TD></TR>
<TR>
<TD class=ubb>scope</TD>
<TD class=ubb>存储url的变量名的变量范围</TD>
<TD class=ubb>否</TD>
<TD class=ubb>page</TD></TR></TBODY></TABLE><BR><BR>例子： 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb><BR>&lt;c:import url="http://www.url.com/edit.js" var="newsfeed"/&gt;<BR></TD></TR></TBODY></TABLE><BR>将url http://www.url.com/edit.js包含到当前页的当前位置，并将url保存到newsfeed变量中 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb><BR>&lt;a href="&lt;c:url url="/index.jsp"/&gt;"/&gt;<BR></TD></TR></TBODY></TABLE><BR>在当前页的当前位置输出&lt;a href="http://www.yourname.com/index.jsp"/&gt;，http://www.yourname.com是当前页的所在的位置。<BR><BR><BR><B>&lt;c:redirect&gt;</B><BR>&lt;c:redirect&gt;标签将请求重新定向到另外一个页面，它有以下属性 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>属 性</TD>
<TD class=ubb>描 述</TD>
<TD class=ubb>是否必须</TD>
<TD class=ubb>缺省值</TD></TR>
<TR>
<TD class=ubb>url</TD>
<TD class=ubb>url地址</TD>
<TD class=ubb>是</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>context</TD>
<TD class=ubb>/后跟本地web应用程序的名字</TD>
<TD class=ubb>否</TD>
<TD class=ubb>当前应用程序</TD></TR></TBODY></TABLE><BR>例子： 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb><BR>&lt;c:redirect url="http://www.yourname.com/login.jsp"/&gt;<BR></TD></TR></TBODY></TABLE><BR>将请求重新定向到http://www.yourname.com/login.jsp页，相当于response.setRedirect("http://www.yourname.com/login.jsp");<BR><BR><B>&lt;c:param&gt;</B><BR>&lt;c:param&gt;标签用来传递参数给一个重定向或包含页面，它有以下属性 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb>属 性</TD>
<TD class=ubb>描 述</TD>
<TD class=ubb>是否必须</TD>
<TD class=ubb>缺省值</TD></TR>
<TR>
<TD class=ubb>name</TD>
<TD class=ubb>在request参数中设置的变量名</TD>
<TD class=ubb>是</TD>
<TD class=ubb>无</TD></TR>
<TR>
<TD class=ubb>value</TD>
<TD class=ubb>在request参数中设置的变量值</TD>
<TD class=ubb>否</TD>
<TD class=ubb>无</TD></TR></TBODY></TABLE><BR>例子： 
<TABLE class=ubb cellSpacing=0>
<TBODY>
<TR>
<TD class=ubb><BR>&lt;c:redirect url="login.jsp"&gt;<BR>&lt;c:param name="id" value="888"/&gt;<BR>&lt;/c:redirect&gt;<BR></TD></TR></TBODY></TABLE><BR>将参数888以id为名字传递到login.jsp页面，相当于login.jsp?id=888<BR><BR><BR><B>JSTL的优点</B><BR>1、 在应用程序服务器之间提供了一致的接口，最大程序地提高了WEB应用在各应用服务器之间的移植。<BR>2、 简化了JSP和WEB应用程序的开发。<BR>3、 以一种统一的方式减少了JSP中的scriptlet代码数量，可以达到没有任何scriptlet代码的程序。在我们公司的项目中是不允许有任何的scriptlet代码出现在JSP中。<BR>4、 允许JSP设计工具与WEB应用程序开发的进一步集成。相信不久就会有支持JSTL的IDE开发工具出现。<BR><BR><B>总结</B><BR>上面介绍的仅仅是JSTL的一部分，如果有时间我会继续把其它部分写出来分享给大家。如果要使用JSTL，则必须将jstl.jar和standard.jar文件放到classpath中，如果你还需要使用XML processing及Database access (SQL)标签，还要将相关JAR文件放到classpath中，这些JAR文件全部存在于下载回来的zip文件中。这个zip文件可以从<A href="http://jakarta.apache.org/builds/jakarta-taglibs/releases/standard/jakarta-taglibs-standard-1.0.zip" target=_blank>http://jakarta.apache.org/builds/jakarta-taglibs/releases/standard/jakarta-taglibs-standard-1.0.zip</A>下载。<BR><BR><B>参考资料</B><BR>1、 <A href="http://java.sun.com/products/jsp/jstl/" target=_blank>http://java.sun.com/products/jsp/jstl/</A><BR>sun公司的JSTL站点<BR>2、 <A href="http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html" target=_blank>http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html</A><BR>jakarta小组的JSTL站点<BR>3、 <A href="http://www.manning.com/bayern/appendixA.pdf" target=_blank>http://www.manning.com/bayern/appendixA.pdf</A><BR>JSTL的参考文档，本文很多内容都是从这个PDF文件里翻译的。<BR>4、 ＜＜J2EE编程指南（1.3版）＞＞<BR>介绍了JSTL的雏形，wrox的书都是精品。<BR><BR>来源：<A href="http://www.iyuanma.com/info/8/7126_200592633739.htm">http://www.iyuanma.com/info/8/7126_200592633739.htm</A><BR><img src ="http://www.blogjava.net/allan-oy/aggbug/35686.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/allan-oy/" target="_blank">落叶归根</a> 2006-03-16 17:25 <a href="http://www.blogjava.net/allan-oy/articles/35686.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>