﻿<?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-java之海-随笔分类-struts</title><link>http://www.blogjava.net/xianeizhu/category/8064.html</link><description>java之海</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 20:14:08 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 20:14:08 GMT</pubDate><ttl>60</ttl><item><title>J2EE1.4新特性之JSP 2.0的新特性</title><link>http://www.blogjava.net/xianeizhu/archive/2006/03/23/36989.html</link><dc:creator>java之海</dc:creator><author>java之海</author><pubDate>Thu, 23 Mar 2006 01:54:00 GMT</pubDate><guid>http://www.blogjava.net/xianeizhu/archive/2006/03/23/36989.html</guid><wfw:comment>http://www.blogjava.net/xianeizhu/comments/36989.html</wfw:comment><comments>http://www.blogjava.net/xianeizhu/archive/2006/03/23/36989.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xianeizhu/comments/commentRss/36989.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xianeizhu/services/trackbacks/36989.html</trackback:ping><description><![CDATA[
		<table class="MsoNormalTable" style="width: 96%;" border="0" cellpadding="0" cellspacing="0" width="96%">
				<tbody>
						<tr style="">
								<td style="padding: 1.5pt;">
										<p class="MsoNormal" style="text-align: center;" align="center">
												<b>
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">J2EE1.4</span>
												</b>
												<b>
														<span style="font-size: 12pt; font-family: 宋体;">新特性之<span lang="EN-US">JSP 2.0</span>的新特性 </span>
												</b>
												<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
														<o:p>
														</o:p>
												</span>
										</p>
								</td>
						</tr>
						<tr style="">
								<td style="padding: 1.5pt;">
										<p class="MsoNormal" style="text-align: center;" align="center">
												<span style="font-size: 12pt; font-family: 宋体; color: rgb(251, 81, 4);">作者：务实工作室</span>
												<span style="font-size: 12pt; font-family: 宋体;"> 发文时间：<span lang="EN-US">2003.10.27<o:p></o:p></span></span>
										</p>
								</td>
						</tr>
						<tr style="">
								<td style="padding: 1.5pt;">
										<p class="MsoNormal" style="text-align: center;" align="center">
												<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
														<!--[if gte vml 1]><v:shapetype id="_x0000_t75"
   coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"
   filled="f" stroked="f">
   <v:stroke joinstyle="miter"/>
   <v:formulas>
    <v:f eqn="if lineDrawn pixelLineWidth 0"/>
    <v:f eqn="sum @0 1 0"/>
    <v:f eqn="sum 0 0 @1"/>
    <v:f eqn="prod @2 1 2"/>
    <v:f eqn="prod @3 21600 pixelWidth"/>
    <v:f eqn="prod @3 21600 pixelHeight"/>
    <v:f eqn="sum @0 0 1"/>
    <v:f eqn="prod @6 1 2"/>
    <v:f eqn="prod @7 21600 pixelWidth"/>
    <v:f eqn="sum @8 21600 0"/>
    <v:f eqn="prod @7 21600 pixelHeight"/>
    <v:f eqn="sum @10 21600 0"/>
   </v:formulas>
   <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
   <o:lock v:ext="edit" aspectratio="t"/>
  </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" alt="" style='width:600pt;
   height:3pt'>
   <v:imagedata src="file:///C:\DOCUME~1\Cream\LOCALS~1\Temp\msohtml1\01\clip_image001.jpg"
    o:href="http://tech.ccidnet.com/col/images/tech/line_4.jpg"/>
  </v:shape><![endif]-->
														<!--[if !vml]-->
														<img src="file:///C:/DOCUME%7E1/Cream/LOCALS%7E1/Temp/msohtml1/01/clip_image002.jpg" _base_href="http://tech.ccidnet.com/art/1110/20031027/68718_1.html" v:shapes="_x0000_i1025" height="4" width="800" />
														<!--[endif]-->
														<o:p>
														</o:p>
												</span>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
		<p class="MsoNormal" style="text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">SUN </span>
				<span style="font-size: 12pt; font-family: 宋体;">的新版<span lang="EN-US">J2EE1.4</span>提供了在<span lang="EN-US">J2EE</span>中开发<span lang="EN-US">Web Service</span>的基础，对开发工具做了一些重要的增强，在应用程序部署和服务器管理方面也提供了新的标准，在集成性和安全性方面有所增强，提升了<span lang="EN-US">J2EE </span>开发<span lang="EN-US">Web</span>应用程序的能力；在编程模型方面的重要变化包括<span lang="EN-US">JSP</span>表达式语言、简化的标记库等；<span lang="EN-US">EJB 2.1</span>中提供了新的<span lang="EN-US">timer</span>服务，查询语言（<span lang="EN-US">QL</span>）也有所增强；<span lang="EN-US">Jdbc3.0 API</span>把通常的<span lang="EN-US">Jdbc API</span>与扩充<span lang="EN-US">API</span>结合起来；<span lang="EN-US">J2EE Connectors</span>规范和独立于消息类型的<span lang="EN-US">EJB</span>提供了对双向通信的支持。下面给大家重点介绍<span lang="EN-US">J2EE1.4</span>中包含的<span lang="EN-US">JSP2.0</span>、<span lang="EN-US"> Servlet2.4</span>、<span lang="EN-US">Jdbc3.0</span>以及<span lang="EN-US">EJB2.1</span>方面的新特性。 <span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="text-align: center;" align="center">
				<b>
						<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
								<br />
						</span>
				</b>
				<b>
						<span style="font-size: 12pt; font-family: 宋体;">一、<span lang="EN-US">JSP 2.0</span>的新特性</span>
				</b>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<br />
						<br />
JSP 2.0</span>
				<span style="font-size: 12pt; font-family: 宋体;">属于<span lang="EN-US">J2EE 1.4</span>平台，它在<span lang="EN-US">JSP 1.2</span>基础之上增加了新的功能。它保证了向下兼容，原先使用的<span lang="EN-US">JSP</span>技术在<span lang="EN-US">JSP 2.0</span>中都可以支持。<span lang="EN-US">JSP 2.0</span>的新功能主要包括下面几部分：<span lang="EN-US"><br /><br /><b>(</b></span><b>一<span lang="EN-US">)</span>运行环境变化</b><span lang="EN-US"><br /><br />
1</span>、<span lang="EN-US">web.xml</span>格式变化<span lang="EN-US"><br /><br /></span>我们知道<span lang="EN-US">JSP 1.2</span>可以在<span lang="EN-US">Java 2</span>标准版<span lang="EN-US">1.3</span>版本运行，而<span lang="EN-US">JSP 2.0</span>要求使用<span lang="EN-US">Java
2</span>标准版<span lang="EN-US">1.4</span>或更新版本，<span lang="EN-US">JSP 2.0</span>使用由<span lang="EN-US">Servlet 2.4</span>规定的<span lang="EN-US">Web</span>程序部署描述格式。<span lang="EN-US"><br /><br /></span>在<span lang="EN-US">Web</span>程序描述文件<span lang="EN-US">web.xml</span>中需要使用<span lang="EN-US">xml schema</span>打头的格式。在<span lang="EN-US">web.xml</span>中主要的变化是所有有关<span lang="EN-US">JSP</span>的设置信息要放在标记中。下面程序例<span lang="EN-US">1</span>显示了一个<span lang="EN-US">web.xml</span>大致的样子。<span lang="EN-US"><br /><br /></span>例<span lang="EN-US">1</span>：<span lang="EN-US"><br /><br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--><o:p></o:p></span></span>
		</p>
		<div align="center">
				<table class="MsoNormalTable" style="width: 300pt;" border="1" cellpadding="0" cellspacing="0" width="400">
						<tbody>
								<tr style="">
										<td style="padding: 1.5pt; background: rgb(230, 230, 230) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
												<p class="MsoNormal" style="text-align: left;" align="left">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
																<br />
																<br />
																<span style="">    </span>.......<br /><br /><br /><br /><span style="">   
  </span>http://www.icconcept.com/ics/sample-taglib<br /><br /><br /><span style="">    </span>/WEB-INF/jsp/sample-taglib.tld<br /><br /><br /><span style="">    </span>........<br /><br /><br /><span style="">    </span>For config the ICW sample
  application<br /><br />
  JSPConfiguration<br />
  /jsp/datareset.jsp<br />
  true&lt;</span>
														<span style="font-size: 12pt; font-family: 宋体;">／<span lang="EN-US">el-ignored&gt;<br />
  ISO-8859-1<br />
  true<br />
  /jsp/prelude.jspf<br />
  /jsp/coda.jspf<br /><br /><br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--><o:p></o:p></span></span>
												</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p class="MsoNormal" style="text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<br />
						<br />
2</span>
				<span style="font-size: 12pt; font-family: 宋体;">、<span lang="EN-US">JSP</span>设置<span lang="EN-US"><br /><br /></span>在标记提供了<span lang="EN-US">Web</span>程序中<span lang="EN-US">JSP</span>程序的设置信息。包括和两类元素。定义了<span lang="EN-US">Web</span>程序使用的<span lang="EN-US">custom tag</span>，它的用法和以前<span lang="EN-US">JSP 1.2</span>中的用法相同。定义了一组<span lang="EN-US">JSP</span>的特性。这些特性实际上对应<span lang="EN-US">JSP</span>的<span lang="EN-US">page directive</span>定义的特性。通过只不过可以方便地对多个具有相同属性的<span lang="EN-US">JSP</span>统一定义。<span lang="EN-US"><br /><br /></span>定义一个或多个<span lang="EN-US">URL</span>样式，在中定义的属性会适用于匹配这些<span lang="EN-US">URL</span>样式的所有<span lang="EN-US">JSP</span>文件。在中的属性可以定义以下设置：<span lang="EN-US"><br /><br />
(1)</span>允许或禁止使用表达式语言<span lang="EN-US">(EL) <br /><br /></span>在中可以设定是否允许对应的<span lang="EN-US">JSP</span>使用<span lang="EN-US">JSTL</span>表达式语言<span lang="EN-US">(EL)</span>。如果属性标记被设定为<span lang="EN-US">false</span>，<span lang="EN-US">JSP</span>中的<span lang="EN-US">EL</span>表达式会被处理；如果是<span lang="EN-US">true</span>，<span lang="EN-US">Web</span>容器会在转换<span lang="EN-US">JSP</span>时忽略<span lang="EN-US">EL</span>表达式。<span lang="EN-US"><br /><br />
(2)</span>允许或禁止使用<span lang="EN-US">scripting <br /><br /></span>属性可以允许或禁止使用<span lang="EN-US">JSP</span>的脚本语言<span lang="EN-US">(scripting)</span>。如果这个属性标记对应为<span lang="EN-US"> true</span>，即<span lang="EN-US">scripting</span>元素被禁止，则<span lang="EN-US">JSP</span>中不能使用<span lang="EN-US">scriptlet</span>，<span lang="EN-US">scripting</span>表达式和<span lang="EN-US">declaration</span>，否则会有转换错 误。当这个属性标记为<span lang="EN-US">false</span>时，<span lang="EN-US">JSP</span>可以像在<span lang="EN-US">1.2</span>版本之前那样使用脚本语言。<span lang="EN-US"><br /><br />
(3)</span>声明<span lang="EN-US">JSP</span>编码<span lang="EN-US"><br /><br /></span>通过标记可以设置对应的<span lang="EN-US">JSP</span>网页的编码。这个属性对应每个<span lang="EN-US">JSP</span>中的<span lang="EN-US">pageEncoding</span>属性，<span lang="EN-US">Web</span>容器将根据这个属性对<span lang="EN-US">JSP</span>内容进行编码。<span lang="EN-US"><br /><br />
(4)</span>对应隐含包括<span lang="EN-US">(Implicit Includes) <br /><br /></span>在中可以在对应<span lang="EN-US">JSP</span>中加入抬头<span lang="EN-US">(preludes)</span>和结尾<span lang="EN-US">(coda)</span>，使用和属性可以设定在<span lang="EN-US">JSP</span>网页中包括的<span lang="EN-US">preludes</span>和<span lang="EN-US">coda</span>的<span lang="EN-US">jspf</span>文件。这些文件的位置相对于当前<span lang="EN-US">Web</span>程序的<span lang="EN-US">context</span>。当有超过一个<span lang="EN-US">preludes</span>或<span lang="EN-US">coda</span>元素在中时，<span lang="EN-US">JSP</span>会按照其顺序加入到内容中。<span lang="EN-US"><br /><br /><b>(</b></span><b>二<span lang="EN-US">)</span>引入表达式语言<span lang="EN-US">(EL)</span></b><span lang="EN-US"><br /><br />
JSP 2.0</span>的一个主要特点是它支持表达语言<span lang="EN-US">(expression language)</span>。<span lang="EN-US">JSTL</span>表达式语言可以使用标记格式方便地访问<span lang="EN-US">JSP</span>的隐含对象和<span lang="EN-US">JavaBeans</span>组件，<span lang="EN-US">JSTL</span>的核心标记提供了流程和循环控制 功能。自制标记也有自定义函数的功能，因此基本上所有<span lang="EN-US">seriptlet</span>能实现的功能都可以由<span lang="EN-US">JSP</span>替代。在<span lang="EN-US">JSP 2.0</span>中，建议尽量使用<span lang="EN-US">EL</span>而使<span lang="EN-US">JSP</span>的格式更一致。<span lang="EN-US"><br /><br /></span>在<span lang="EN-US">web.xml</span>的中可以控制一组<span lang="EN-US">JSP</span>是否使用<span lang="EN-US">EL</span>，在每个<span lang="EN-US">JSP</span>中也可以指定是否该<span lang="EN-US">JSP</span>使用<span lang="EN-US">EL</span>。在<span lang="EN-US">page directive</span>中的<a name="0"></a><b><span style="background: rgb(255, 255, 102) none repeat scroll 0%; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" lang="EN-US">isELIgnored</span></b>属性用来指定是否忽略。格式为：<span lang="EN-US"><br /><br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--><o:p></o:p></span></span>
		</p>
		<div align="center">
				<table class="MsoNormalTable" style="width: 300pt;" border="1" cellpadding="0" cellspacing="0" width="400">
						<tbody>
								<tr style="">
										<td style="padding: 1.5pt; background: rgb(230, 230, 230) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
												<p class="MsoNormal" style="text-align: left;" align="left">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&lt;%@ page isELIgnored</span>
														<span style="font-size: 12pt; font-family: 宋体;">＝<span lang="EN-US">"true|false"%&gt;<o:p></o:p></span></span>
												</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p class="MsoNormal" style="text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<br />
						<br />
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">如果设定为真，那么<span lang="EN-US">JSP</span>中的表达式被当成字符串处理。比如下面这个表达式<span lang="EN-US"><o:p></o:p></span></span>
		</p>
		<p class="MsoNormal" style="text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">${2000 % 20}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;">在<b><span style="background: rgb(255, 255, 102) none repeat scroll 0%; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" lang="EN-US">isELIgnored</span></b>＝<span lang="EN-US">"true"</span>时输出为<span lang="EN-US">${2000 % 20}</span>，而<b><span style="background: rgb(255, 255, 102) none repeat scroll 0%; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" lang="EN-US">isELIgnored</span></b>＝<span lang="EN-US">"false"</span>时输出为<span lang="EN-US">100</span>。<span lang="EN-US">Web</span>容器默认<b><span style="background: rgb(255, 255, 102) none repeat scroll 0%; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" lang="EN-US">isELIgnored</span></b>＝<span lang="EN-US">"false"</span>。<span lang="EN-US"><br /><br /></span>虽然<span lang="EN-US">JSP 2.0</span>可以使<span lang="EN-US">JSP</span>中完全使用表达语言而避免<span lang="EN-US">scriptlet</span>，在实际编程中，应该根据程序的功能要求和编程人员的自身条件选择合适的方式。使用表达语 言的<span lang="EN-US">JSP</span>比较方便规整，但是由于需要将标记进行转换，在第一次被调用时会比较慢；有些编程人员由于对<span lang="EN-US">Java</span>比较了解，因而更习惯<span lang="EN-US">JSP 1.2</span>之前的编程方式，因此，在使用中应因地制宜地选择适用的编程方法。<span lang="EN-US"><br /><br /><b>(</b></span><b>三<span lang="EN-US">)SimpleTag</span></b><span lang="EN-US"><br /><br />
JSP 2.0</span>中加入了新的创建自制标记的<span lang="EN-US">API</span>，<span lang="EN-US">javax.servlet.jsp.tagext.SimpleTag</span>定义了用来实现简单标记的接口。和<span lang="EN-US"> JSP 1.2</span>中的已有接口不同的是，<span lang="EN-US">SimpleTag</span>接口不使用<span lang="EN-US">doStartTag()</span>和<span lang="EN-US">doEndTag()</span>方法，而提供了一个简单的<span lang="EN-US">doTag()</span>方 法。这个方法在调用该标记时只被使用一次。而需要在一个自制标记中实现的所有逻辑过程、循环和对标记体的评估等都在这个方法中实现。从这个方面来讲，<span lang="EN-US"> SimpleTag</span>和<span lang="EN-US">IterationTag</span>可以达到同等的作用。但<span lang="EN-US">SimpleTag</span>的方法和处理周期要简单得多。在<span lang="EN-US">SimpleTag</span>中还有用来设
置<span lang="EN-US">JSP</span>内容的<span lang="EN-US">seUspBody()</span>和<span lang="EN-US">getJspBody()</span>方法。<span lang="EN-US">Web</span>容器会使用<span lang="EN-US">setJspBody()</span>方法定义一个代表<span lang="EN-US">JSP</span>内容的<span lang="EN-US"> JspFragment</span>对象。实现<span lang="EN-US">SimpleTag</span>标记的程序可以在<span lang="EN-US">doTag</span>方法中根据需要多次调用<span lang="EN-US">getJspBody().invoke()</span>方法
以处理<span lang="EN-US">JSP</span>内容。<span lang="EN-US"><br /><br /></span>例如，程序例<span lang="EN-US">2 SimpleTag</span>根据指定的次数<span lang="EN-US">(times)</span>进行循环并输出当前序号<span lang="EN-US">(sequence)</span>。程序的结构比较简单，所有逻辑都在<span lang="EN-US">doTag</span>方法中实现。<span lang="EN-US"><br /><br /></span>例<span lang="EN-US">2</span>：<span lang="EN-US"><br /><br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--><o:p></o:p></span></span>
		</p>
		<div align="center">
				<table class="MsoNormalTable" style="width: 300pt;" border="1" cellpadding="0" cellspacing="0" width="400">
						<tbody>
								<tr style="">
										<td style="padding: 1.5pt; background: rgb(230, 230, 230) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
												<p class="MsoNormal" style="text-align: left;" align="left">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">package ICW.taglib;<br /><span style="">  </span>import
  javax.servlet.jsp.JspException;<br /><span style="">  </span>import
  javax.servlet.jsp.tagext.SimpleTagSupport;<br /><span style="">  </span>import java.util.HashMap;<br /><span style="">  </span>import java.io.IOException;<br /><span style="">  </span>public class IterationSimpleTag
  extends SimpleTagSupport{<br /><span style="">  </span>private int times;<br />
  public void setTimes(int_times){<br /><span style="">    </span>this.times=_times;<br /><span style="">        </span>}<br /><span style="">    </span>public void doTag() throws
  JspException,IOException{<br /><span style="">    </span>HashMap params=new HashMap();<br /><span style="">    </span>for(int i=0; i<o:p></o:p></span>
												</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p class="MsoNormal" style="text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<br />
						<br />
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">这个标记的<span lang="EN-US">TLD</span>文件内容如下，它使用了<span lang="EN-US">XML schcma</span>定义标记的使用方法。<span lang="EN-US"><br /><br /></span>程序例<span lang="EN-US">3</span>如下：<span lang="EN-US"><br /><br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--><o:p></o:p></span></span>
		</p>
		<div align="center">
				<table class="MsoNormalTable" style="width: 300pt;" border="1" cellpadding="0" cellspacing="0" width="400">
						<tbody>
								<tr style="">
										<td style="padding: 1.5pt; background: rgb(230, 230, 230) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
												<p class="MsoNormal" style="text-align: left;" align="left">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
																<br />
																<br />
																<br />
  1.0<br />
  Jwad book simple tag<br />
  /JwadSimpleTag<br />
  Simple Tag Handler<br /><br />
  iteration<br />
  ICW.taglib.IterationSimpleTag<br />
  scriptless<br />
  Iteration Tag<br /><br />
  Current iterationnumber<br />
  sequence<br /><br /><br />
  times<br />
  true<br />
  true<br /><br /><br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--><o:p></o:p></span>
												</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p class="MsoNormal" style="text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<br />
						<br />
				</span>
				<span style="font-size: 12pt; font-family: 宋体;">程序例<span lang="EN-US">4</span>中的<span lang="EN-US">JSP</span>使用上面例<span lang="EN-US">3</span>中定义的<span lang="EN-US">IterationSimpleTag</span>，它根据<span lang="EN-US">Web</span>请求参数中给定的<span lang="EN-US">“times”</span>的值进行一定次数的循环。在每次循环中将输出<span lang="EN-US">"sequence"</span>的值。<span lang="EN-US"><br /><br /></span>例<span lang="EN-US">4</span>：<span lang="EN-US"><br /><br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--><o:p></o:p></span></span>
		</p>
		<div align="center">
				<table class="MsoNormalTable" style="width: 300pt;" border="1" cellpadding="0" cellspacing="0" width="400">
						<tbody>
								<tr style="">
										<td style="padding: 1.5pt; background: rgb(230, 230, 230) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
												<p class="MsoNormal" style="text-align: left;" align="left">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&lt;%@ taglib prefix="ictag"
  uri="/WEB-INF/ics-jsp2.tld" %&gt;<br /><br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--><o:p></o:p></span>
												</p>
												<p class="MsoNormal" style="margin-bottom: 12pt; text-align: center;" align="center">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
																<br />
														</span>
														<span style="font-size: 13.5pt; font-family: Arial; color: rgb(0, 153, 153);" lang="EN-US">
																<br />
														</span>
														<b>
																<span style="font-size: 13.5pt; font-family: Arial; color: rgb(0, 153, 153);" lang="EN-US">Interation Simple Tag</span>
														</b>
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
																<o:p>
																</o:p>
														</span>
												</p>
												<p class="MsoNormal" style="text-align: left;" align="left">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
																<o:p> </o:p>
														</span>
												</p>
												<div class="MsoNormal" style="text-align: center;" align="center">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
																<hr align="center" size="2" width="100%" />
														</span>
												</div>
												<p class="MsoNormal" style="text-align: left;" align="left">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
																<br />
																<br style="" />
																<!--[if !supportLineBreakNewLine]-->
																<br style="" />
																<!--[endif]-->
																<o:p>
																</o:p>
														</span>
												</p>
												<p class="MsoNormal" style="text-align: left;" align="left">
														<b>
																<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Reminder:</span>
														</b>
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
																<o:p>
																</o:p>
														</span>
												</p>
												<p class="MsoNormal" style="text-align: left;" align="left">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
																<br />
																<br />
																<br />
																<span style="">    </span>This is the ${sequence} Of ${times}
  times of reminder<br /><br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--><o:p></o:p></span>
												</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p class="MsoNormal" style="text-align: left;" align="left">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<br />
						<br />
						<b>(</b>
				</span>
				<b>
						<span style="font-size: 12pt; font-family: 宋体;">四<span lang="EN-US">)</span>使用<span lang="EN-US">JSP
fragment</span></span>
				</b>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<br />
						<br />
JSP 2.0</span>
				<span style="font-size: 12pt; font-family: 宋体;">中的一个主要功能是<span lang="EN-US">JSP fragment</span>，它的基本特点是可以使处理<span lang="EN-US">JSP</span>的容器推迟评估<span lang="EN-US">JSP</span>标记属性。我们知道一般<span lang="EN-US">JSP</span>是首先评估<span lang="EN-US">JSP</span>标记的属性，然后在处理<span lang="EN-US">JSP</span>标记 时使用这些属性，而<span lang="EN-US">JSP fragment</span>提供了动态的属性。也就是说，这些属性在<span lang="EN-US">JSP</span>处理其标记体时是可以被改变的。<span lang="EN-US">JSP</span>需要将这样的属性定义为<span lang="EN-US"> javax.servlet.jsp.tagext.JspFragment</span>类型。当<span lang="EN-US">JSP</span>标记设置成这种形式时，这种标记属性实际上的处理方法类似于标
记体。在实现标记的程序中，标记属性可以被反复评估多次。这种用法称为<span lang="EN-US">JSP fragment</span>。<span lang="EN-US">JSP fragment</span>还可以定义在一个<span lang="EN-US">SimpleTag</span>处理程序中使用的自制标记动作。像前面例子说明的，<span lang="EN-US">getJspBody</span>返回一个<span lang="EN-US"> JspFragment</span>对象并可以在<span lang="EN-US">doTag</span>方法中多次使用。需要注意的是，使用<span lang="EN-US">JSP fragment</span>的<span lang="EN-US">JSP</span>只能有一般的文本和<span lang="EN-US">JSP action</span>，不能有<span lang="EN-US">scriptlet</span>和<span lang="EN-US">scriptlet</span>表达式。<span lang="EN-US"><br /><br /></span>我们可以简单地认为<span lang="EN-US">JSP fragment</span>是一段可以重复使用的<span lang="EN-US">JSP</span>。一段<span lang="EN-US">JSP fragment</span>可以被传递到另一个<span lang="EN-US">JSP</span>中并被使用。与<span lang="EN-US">JSP include</span>概念不同的是，<span lang="EN-US">JSP fragment</span>一般功能比较短小简单而且重复使用率高。<span lang="EN-US"><br /><br />
JSP fragment</span>一般在标记体内或标记体内定义。每次当含有<span lang="EN-US">JSP fragment</span>的标记被使用时，<span lang="EN-US">Web</span>容器生成一个<span lang="EN-US">JspFragment</span>对象，这个对象和当前<span lang="EN-US">JSP</span>的<span lang="EN-US">page scope</span>联系起来。同时，这个<span lang="EN-US">JspFragment</span>对象和包含它的父标记建立联系。<span lang="EN-US">JspFragment</span>对象可以有两种调用方式：使用<span lang="EN-US">Java</span>编写 的标记处理程序，或者使用标记文件<span lang="EN-US">(tag file)</span>。标记文件可以使用，或者动作使用<span lang="EN-US">JSP fragment</span>。<span lang="EN-US"> JSP</span>标记文件可以和<span lang="EN-US">JSP fragment</span>共同工作。<span lang="EN-US">CustomTag</span>都是以编程方式实现的。<span lang="EN-US">JSP</span>标记文件是用文本文件格式<span lang="EN-US">(JSP</span>语法<span lang="EN-US">)</span>实现自制标记，这也是<span lang="EN-US">JSP 2.0</span>的一个主要新功能。一个标记文件可以对应一个标记，可以不需<span lang="EN-US">tld</span>文件定义该标记的方法。这样，即使编程人员不熟悉<span lang="EN-US">Java</span>，也可以使用<span lang="EN-US">JSP</span>语法 定义自己的标记。标记文件一般使用<span lang="EN-US">.tag</span>为后缀并放在<span lang="EN-US">Web</span>程序的<span lang="EN-US">/WEB-INF</span>目录下。<span lang="EN-US"><br /><br /></span>程序例<span lang="EN-US">5</span>中的<span lang="EN-US">taskstatus.jsp</span>使用了两个<span lang="EN-US">JSP fragment</span>。这个<span lang="EN-US">JSP</span>的功能是显示一组<span lang="EN-US">Task</span>的名称和完成日期，它通过定义了两段<span lang="EN-US">JSPfragment(</span>名称为<span lang="EN-US">onSehedule</span>和<span lang="EN-US">delayed)</span>。在标记内的<span lang="EN-US">JSP</span>就是<span lang="EN-US">JSPfragment</span>，而标记被一个包围。这个标记是一个通过标记文件定义的自制标记，它的定义文件在<span lang="EN-US">/WEB-INF/tags</span>目录下。标记文件的名称和标记名称一致为<span lang="EN-US">“listTasks.tag"</span>。这个标记会使用到前面定义的两个<span lang="EN-US">JSP fragment</span>。<span lang="EN-US"><br /><br /></span>例<span lang="EN-US">5: <br /><br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--><o:p></o:p></span></span>
		</p>
		<div align="center">
				<table class="MsoNormalTable" style="width: 300pt;" border="1" cellpadding="0" cellspacing="0" width="400">
						<tbody>
								<tr style="">
										<td style="padding: 1.5pt; background: rgb(230, 230, 230) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
												<p class="MsoNormal" style="text-align: left;" align="left">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">&lt;%@ taglib prefix="ictag"
  tagdir="/WEB-INF/tags" %&gt;<br /><br style="" /><!--[if !supportLineBreakNewLine]--><br style="" /><!--[endif]--><o:p></o:p></span>
												</p>
												<p class="MsoNormal" style="margin-bottom: 12pt; text-align: center;" align="center">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
																<br />
														</span>
														<span style="font-size: 13.5pt; font-family: Arial; color: rgb(0, 153, 153);" lang="EN-US">
																<br />
														</span>
														<b>
																<span style="font-size: 13.5pt; font-family: Arial; color: rgb(0, 153, 153);" lang="EN-US">JSP Fragment Sample
  Using Tag Files</span>
														</b>
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
																<o:p>
																</o:p>
														</span>
												</p>
												<p class="MsoNormal" style="text-align: left;" align="left">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
																<o:p> </o:p>
														</span>
												</p>
												<div class="MsoNormal" style="text-align: center;" align="center">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
																<hr align="center" size="2" width="100%" />
														</span>
												</div>
												<p class="MsoNormal" style="text-align: left;" align="left">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
																<o:p> </o:p>
														</span>
												</p>
												<p class="MsoNormal" style="text-align: left;" align="left">
														<b>
																<span style="font-size: 18pt; font-family: 宋体;" lang="EN-US">Tasks<o:p></o:p></span>
														</b>
												</p>
												<p class="MsoNormal" style="text-align: left;" align="left">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
																<br />
																<br />
																<br style="" />
																<!--[if !supportLineBreakNewLine]-->
																<br style="" />
																<!--[endif]-->
																<o:p>
																</o:p>
														</span>
												</p>
										</td>
										<td style="padding: 1.5pt;">
												<p class="MsoNormal" style="text-align: left;" align="left">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Name:${name}<o:p></o:p></span>
												</p>
										</td>
										<td style="padding: 1.5pt;">
												<p class="MsoNormal" style="text-align: left;" align="left">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Date:${date} <o:p></o:p></span>
												</p>
										</td>
										<td style="padding: 1.5pt;">
												<p class="MsoNormal" style="text-align: left;" align="left">
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">Name:${name}<o:p></o:p></span>
												</p>
										</td>
										<td style="padding: 1.5pt;">
												<p class="MsoNormal" style="text-align: left;" align="left">
														<span style="font-size: 12pt; font-family: 宋体; color: red;" lang="EN-US">Plan:<s> ${pianDate}</s></span>
														<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
																<br />
																<b>Actural:${actDate}</b>
																<o:p>
																</o:p>
														</span>
												</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p class="MsoNormal">
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<br />
						<br />
						<b>(</b>
				</span>
				<b>
						<span style="font-size: 12pt; font-family: 宋体;">五<span lang="EN-US">)</span>其他特性</span>
				</b>
				<span style="font-size: 12pt; font-family: 宋体;" lang="EN-US">
						<br />
						<br />
JSP2.0</span>
				<span style="font-size: 12pt; font-family: 宋体;">还有一些其他特性变化，比如严格修正了<span lang="EN-US">I18N</span>的语法规则，改进<span lang="EN-US">JSP</span>对应<span lang="EN-US">XML</span>语法从而允许使用<span lang="EN-US">namespaces</span>等。这些并不是核心功能，大家可以参照<span lang="EN-US">java.sun.com</span>的有关资料了解功能的细节，这里就不再阐述。</span>
		</p>
<img src ="http://www.blogjava.net/xianeizhu/aggbug/36989.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xianeizhu/" target="_blank">java之海</a> 2006-03-23 09:54 <a href="http://www.blogjava.net/xianeizhu/archive/2006/03/23/36989.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP简单的表达式语言</title><link>http://www.blogjava.net/xianeizhu/archive/2006/03/23/36988.html</link><dc:creator>java之海</dc:creator><author>java之海</author><pubDate>Thu, 23 Mar 2006 01:51:00 GMT</pubDate><guid>http://www.blogjava.net/xianeizhu/archive/2006/03/23/36988.html</guid><wfw:comment>http://www.blogjava.net/xianeizhu/comments/36988.html</wfw:comment><comments>http://www.blogjava.net/xianeizhu/archive/2006/03/23/36988.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xianeizhu/comments/commentRss/36988.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xianeizhu/services/trackbacks/36988.html</trackback:ping><description><![CDATA[
		<h1 class="topstoryhead" bodycopy="" align="center">简单的表达式语言</h1>
		<hr />
		<p class="bodycopy" bodycopy="" align="left">Sun Microsystems 在 1997
年下半年推出了 Servlet API，将它定位为 CGI 开发人员使用的一种功能强大的工具，这些开发人员正在寻找比
CGI（通用网关接口）编程更高效和轻便的优秀解决方案。但是，开发人员很快就发现 Servlet API
有其自身的缺点，从代码的可维护性和可扩展性方面来看，该解决方案难以实施。在某种程度上，这种缺点促使团队开发一种允许在 HTML 中嵌入
Java 代码的解决方案 — JavaServer Pages (JSP) 因此而出现。</p>
		<p class="bodycopy">不久以后，开发人员意识到将表达与商务逻辑混合在一起的复杂 JSP 页不易于理解和维护。不能编写
scriplet 的页面制作人员所面临的另一个问题是由于标准标记集而带来的 JSP 限制。这些限制使得难点变成利用 JSP
实施自定义标记的机制来创建 JSP 自定义标记。 </p>
		<p class="bodycopy">JSP 标准标记库 (JSTL) 是自定义标记库的集合，它将许多 JSP 应用程序通用的核心功能封装为简单的标记。它不再需要使用 JSP scriptlet<br />
和表达式，而使用表达式的更高级语法。它还实现了通用目的的功能，如迭代和条件化、数据管理格式化、XML
操作、数据库访问、国际化和对本地化信息敏感的格式化标记以及 SQL 标记。JSTL 1.0 推出了 EL 的概念，但只限于 JSTL 标记。在
JSP 2.0 中，您可以使用带模板文本的 EL，甚至可以通过 javax.servlet.jsp.el 获得编程方式的访问。<br /><br />在我们了解 JSTL 如何适应环境以及与 JSTL 表达式语言相关的限制以后，我们来看 JSP 2.0 的重要优点之一 — JSP 表达式语言 (EL)。我们将特别涉及到以下内容：<br /><br /><a href="http://www.oracle.com/technology/global/cn/sample_code/tutorials/jsp20/simpleel.html#jeld">JSP 表达式语言定义</a><br /><a href="http://www.oracle.com/technology/global/cn/sample_code/tutorials/jsp20/simpleel.html#mteeisjp">在无脚本的 JSP 页面中支持 EL 的机制</a><br /><a href="http://www.oracle.com/technology/global/cn/sample_code/tutorials/jsp20/simpleel.html#els">表达式语言语法</a><br /><a href="http://www.oracle.com/technology/global/cn/sample_code/tutorials/jsp20/simpleel.html#veitje">JSP EL 中有效的表达式</a><br /><a href="http://www.oracle.com/technology/global/cn/sample_code/tutorials/jsp20/simpleel.html#uee">使用 EL 表达式</a><br /><br /></p>
		<h2>
				<a name="jeld">
				</a>JSP 表达式语言定义</h2>
		<p class="bodycopy">表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言，它提供了在 JSP
中简化表达式的方法。它是一种简单的语言，基于可用的命名空间（PageContext
属性）、嵌套属性和对集合、操作符（算术型、关系型和逻辑型）的访问符、映射到 Java 类中静态方法的可扩展函数以及一组隐式对象。<br /><br />EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能。脚本编制元素是指页面中能够用于在 JSP 文件中嵌入 Java 代码的元素。它们通常用于对象操作以及执行那些影响所生成内容的计算。JSP 2.0 将 EL 表达式添加为一种脚本编制元素。<br /><br />脚本编制元素具有三个从属形式： <br /><br /></p>
		<table background="/technology/portalimages/pobtrans.gif" border="0" cellpadding="0" cellspacing="0" width="100%">
				<tbody>
						<tr align="left">
								<td valign="top" width="100%">
								</td>
						</tr>
				</tbody>
				<li class="bodycopy">声明
</li>
				<li class="bodycopy"> Scriptlet
</li>
				<li class="bodycopy"> 表达式。<br /><br />让我们来看代码中的这三种从属形式：
<p class="bodycopy"></p><div align="center"><div align="left"><pre>&lt;%! int i = 1; %&gt; &lt;% -- <b>Declaration</b> --%&gt;<br />&lt;% for (int i =0; i &lt; 10; i++) { %&gt; &lt;% -- <b>Scriptlets</b> --%&gt;<br /><jsp:expression> table.getColumn( ) </jsp:expression> &lt;% -- <b>Expression</b> --%&gt;</pre></div></div><p class="bodycopy">在将 EL 添加到 JSP 工具包以后，可以使用更简单的语法来编写以上的代码，而获得与以上 JSP
元素相同的结果。EL 表达式的另一个优势是，可以在不允许使用上述任何脚本编制元素从属形式的无脚本的 JSP
页中使用它。但是必须注意，可以不使用三种脚本编制元素从属形式中的任一种来编写 JSP 页，而对 JSP
页是否应该为无脚本形式的选择则完全基于应用程序的需求。如果您希望明确分开表达与商务逻辑，则还可以选择将页面强制为无脚本形式。通过强制成为无脚本页
面，必须通过其他元素（如 JavaBean、EL 表达式、自定义操作和标准标记库）提供 JSP 页的动态行为。 </p><h2><a name="mteeisjp"></a>在无脚本的 JSP 页中支持 EL 的机制</h2><p class="bodycopy">有两种机制可以确保页面不包含任何脚本编制元素。每种机制还提供在无脚本的 JSP 页中支持 EL 的方法。 
  </p><ul><li class="bodycopy"><b><h4>使用页面指示：</h4></b> 在使用页面指示时，您可以通过将 isELEnabled 指示的值相应地设为“true”或“false”，指定是否支持 EL，如下所示：<br /><br /><pre>&lt;%@ page isScriptingEnabled="true|false" <b>isELEnabled="true|false</b>"%&gt;<br /></pre></li></ul><div align="left"></div><ul><li class="bodycopy"><b><h4>使用部署描述符的元素：</h4></b> 当使用部署描述符的元素时，您可以通过在 <el-enabled> 标记间包含布尔值“true”或“false”，指定是否支持 EL，如下所示：<br /></el-enabled><pre>...<br /><jsp-config><br /><jsp-property-group><br /><url-pattern>*.jsp</url-pattern><br /><b><el-enabled>true</el-enabled></b><br /><scripting-enabled>true</scripting-enabled><br /></jsp-property-group><br /></jsp-config><br />....</pre></li></ul><h2><a name="els"></a>表达式语言语法</h2><p class="bodycopy">JSP 表达式语言允许页面制作人员使用简单语法访问组件，如： <br /></p><pre><br />${expr}</pre><p class="bodycopy"> 在以上的语法中，expr 代表有效的表达式。必须注意，该表达式可以与静态文本混合，还可以与其他表达式结合成更大的表达式。 
</p><h2><a name="veitje"></a>JSP EL 中的有效表达式</h2><p class="bodycopy">有效表达式可以包含文字、操作符、变量（对象引用）和函数调用。我们将分别了解这些有效表达式中的每一种： 
</p><h3>文字 </h3><p class="bodycopy">JSP 表达式语言定义可在表达式中使用的以下文字：<br /><br /></p><table border="1" cellpadding="5" cellspacing="0" width="949"><tbody><tr align="center" bgcolor="#cccccc"><th class="bodycopy">文字</th><th class="bodycopy">文字的值</th></tr><tr><td class="bodycopy"><p class="bodycopy">Boolean</p></td><td class="bodycopy"><p class="bodycopy"> true 和 false</p></td></tr><tr><td class="bodycopy"><p class="bodycopy"> Integer</p></td><td class="bodycopy"><p class="bodycopy"> 与 Java 类似。可以包含任何正数或负数，例如 24、-45、567</p></td></tr><tr><td class="bodycopy"><p class="bodycopy"> Floating Point</p></td><td class="bodycopy"><p class="bodycopy"> 与 Java 类似。可以包含任何正的或负的浮点数，例如 -1.8E-45、4.567</p></td></tr><tr><td class="bodycopy"><p class="bodycopy"> String</p></td><td class="bodycopy"><p class="bodycopy"> 任何由单引号或双引号限定的字符串。对于单引号、双引号和反斜杠，使用反斜杠字符作为转义序列。必须注意，如果在字符串两端使用双引号，则单引号不需要转义。</p></td></tr><tr><td class="bodycopy">Null</td><td class="bodycopy">null</td></tr></tbody></table><p class="bodycopy">让我们来看一些使用文字作为有效表达式的示例：<br /><br /></p><pre>${false} &lt;%-- evaluates to false --%&gt;<br />${3*8)</pre><h3>操作符</h3><p class="bodycopy">JSP 表达式语言提供以下操作符，其中大部分是 Java 中常用的操作符：</p><table border="1" cellpadding="5" cellspacing="0"><tbody><tr align="center" bgcolor="#cccccc"><th class="bodycopy">术语</th><th class="bodycopy">定义</th></tr><tr><td class="bodycopy"><p> 算术型</p></td><td class="bodycopy"><p> +、-（二元）、*、/、div、%、mod、-（一元）</p></td></tr><tr><td class="bodycopy"><p> 逻辑型</p></td><td class="bodycopy"><p> and、&amp;&amp;、or、||、!、not</p></td></tr><tr><td class="bodycopy"><p> 关系型</p></td><td class="bodycopy"><p> ==、eq、!=、ne、<lt>、gt、&lt;=、le、&gt;=、ge。可以与其他值进行比较，或与布尔型、字符串型、整型或浮点型文字进行比较。</lt></p></td></tr><tr><td class="bodycopy"><p> 空</p></td><td class="bodycopy"><p> 空操作符是前缀操作，可用于确定值是否为空。</p></td></tr><tr><td class="bodycopy">条件型</td><td class="bodycopy">A ?B :C。根据 A 赋值的结果来赋值 B 或 C。 </td></tr></tbody></table><p class="bodycopy">让我们来看一些使用操作符作为有效表达式的示例： </p><pre>${ (6 * 5) + 5 } &lt;%-- evaluates to 35 --%&gt;<br />${empty name}</pre><h3>隐式对象</h3><p class="bodycopy">JSP 表达式语言定义了一组隐式对象，其中许多对象在 JSP scriplet 和表达式中可用：</p><table border="1" cellpadding="5" cellspacing="0" width="959"><tbody><tr align="center" bgcolor="#cccccc"><th class="bodycopy">术语</th><th class="bodycopy">定义</th></tr><tr><td class="bodycopy"><p> pageContext</p></td><td class="bodycopy"><p class="bodycopy"> JSP 页的上下文。它可以用于访问 JSP 隐式对象，如请求、响应、会话、输出、servletContext 等。例如，${pageContext.response} 为页面的响应对象赋值。</p></td></tr></tbody></table><p class="bodycopy">此外，还提供几个隐式对象，允许对以下对象进行简易访问： </p><table border="1" cellpadding="5" cellspacing="0" width="961"><tbody><tr align="center" bgcolor="#cccccc"><th class="bodycopy">术语</th><th class="bodycopy">定义</th></tr><tr><td class="bodycopy"><p class="bodycopy"> param</p></td><td class="bodycopy"><p class="bodycopy"> 将请求参数名称映射到单个字符串参数值（通过调用
ServletRequest.getParameter (String name) 获得）。getParameter (String)
方法返回带有特定名称的参数。表达式 $(param.name) 相当于 request.getParameter (name)。</p></td></tr><tr><td class="bodycopy"><p class="bodycopy"> paramValues</p></td><td class="bodycopy"><p class="bodycopy"> 将请求参数名称映射到一个数值数组（通过调用 ServletRequest.getParameter
(String name) 获得）。它与 param 隐式对象非常类似，但它检索一个字符串数组而不是单个值。表达式
${paramvalues.name) 相当于 request.getParamterValues(name)。</p></td></tr><tr><td class="bodycopy"><p class="bodycopy"> header</p></td><td class="bodycopy"><p class="bodycopy"> 将请求头名称映射到单个字符串头值（通过调用 ServletRequest.getHeader(String name) 获得）。表达式 ${header.name} 相当于 request.getHeader(name)。</p></td></tr><tr><td class="bodycopy"><p class="bodycopy"> headerValues</p></td><td class="bodycopy"><p class="bodycopy"> 将请求头名称映射到一个数值数组（通过调用
ServletRequest.getHeaders(String) 获得）。它与头隐式对象非常类似。表达式
${headerValues.name} 相当于 request.getHeaderValues(name)。</p></td></tr><tr><td class="bodycopy">cookie</td><td class="bodycopy">将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求可以获得一个或多个
cookie。表达式 ${cookie.name.value} 返回带有特定名称的第一个 cookie 值。如果请求包含多个同名的
cookie，则应该使用 ${headerValues.name} 表达式。</td></tr><tr><td class="bodycopy">initParam</td><td class="bodycopy">将上下文初始化参数名称映射到单个值（通过调用 ServletContext.getInitparameter(String name) 获得）。 
      </td></tr></tbody></table><p class="bodycopy">除了上述两种类型的隐式对象之外，还有些对象允许访问多种范围的变量，如 Web 上下文、会话、请求、页面：</p><table border="1" cellpadding="5" cellspacing="0" width="963"><tbody><tr align="center" bgcolor="#cccccc"><th class="bodycopy">术语</th><th class="bodycopy">定义</th></tr><tr><td class="bodycopy"><p class="bodycopy"> pageScope</p></td><td class="bodycopy"><p class="bodycopy"> 将页面范围的变量名称映射到其值。例如，EL 表达式可以使用 ${pageScope.objectName} 访问一个 JSP 中页面范围的对象，还可以使用 ${pageScope.objectName.attributeName} 访问对象的属性。</p></td></tr><tr><td class="bodycopy"><p class="bodycopy"> requestScope</p></td><td class="bodycopy"><p class="bodycopy"> 将请求范围的变量名称映射到其值。该对象允许访问请求对象的属性。例如，EL 表达式可以使用
${requestScope.objectName} 访问一个 JSP 请求范围的对象，还可以使用
${requestScope.objectName.attributeName} 访问对象的属性。</p></td></tr><tr><td class="bodycopy"><p class="bodycopy"> sessionScope</p></td><td class="bodycopy"><p class="bodycopy"> 将会话范围的变量名称映射到其值。该对象允许访问会话对象的属性。例如：</p><p class="bodycopy">&lt;% session.put (name", "John Doe"); %&gt;<br /> $sessionScope.name} &lt;%-- evaluates to John Doe --%&gt;<br /> &lt;%= session.get("name"); %&gt; &lt;%-- This is an equivalent scripting expression --%&gt;</p></td></tr><tr><td class="bodycopy"><p class="bodycopy"> applicationScope</p></td><td class="bodycopy"><p class="bodycopy"> 将应用程序范围的变量名称映射到其值。该隐式对象允许访问应用程序范围的对象。</p></td></tr></tbody></table><p class="bodycopy">必须注意，当表达式根据名称引用这些对象之一时，返回的是相应的对象而不是相应的属性。例如：即使现有的 pageContext 属性包含某些其他值，${pageContext} 也返回 PageContext 对象。 </p><h2><a name="uee"></a>使用 EL 表达式</h2><p class="bodycopy">EL 表达式可用于两种情况：</p><ul><li class="bodycopy">作为标准操作和自定义操作中的属性值<br /><br /></li><li class="bodycopy">在 JSP 文件的模板文本中，如 HTML 或非 JSP 元素 — 在这种情况下，模板文本中的表达式被赋值并插入到当前的输出中。但是，必须注意，如果标记的主体被声明为与标记相关，则不会对表达式赋值。 </li></ul></li>
		</table>
<img src ="http://www.blogjava.net/xianeizhu/aggbug/36988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xianeizhu/" target="_blank">java之海</a> 2006-03-23 09:51 <a href="http://www.blogjava.net/xianeizhu/archive/2006/03/23/36988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Cannot find bean blacktags in any scope</title><link>http://www.blogjava.net/xianeizhu/archive/2006/03/21/36649.html</link><dc:creator>java之海</dc:creator><author>java之海</author><pubDate>Tue, 21 Mar 2006 08:06:00 GMT</pubDate><guid>http://www.blogjava.net/xianeizhu/archive/2006/03/21/36649.html</guid><wfw:comment>http://www.blogjava.net/xianeizhu/comments/36649.html</wfw:comment><comments>http://www.blogjava.net/xianeizhu/archive/2006/03/21/36649.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xianeizhu/comments/commentRss/36649.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xianeizhu/services/trackbacks/36649.html</trackback:ping><description><![CDATA[&lt;action path="/articleEdit" attribute="articleForm" input="/ArticleEdit.jsp" name="articleForm"                                          type="com.xianeizhu.struts.action.ArticleEditAction"&gt;<br />&lt;forward name="articleList" path="/articleList.do" redirect="true" /&gt;<br />&lt;/action&gt;<br /><br />redirect="true"造成错误<br />Cannot find bean blacktags in any scope<br /><img src ="http://www.blogjava.net/xianeizhu/aggbug/36649.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xianeizhu/" target="_blank">java之海</a> 2006-03-21 16:06 <a href="http://www.blogjava.net/xianeizhu/archive/2006/03/21/36649.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>web.xml加入taglib报错</title><link>http://www.blogjava.net/xianeizhu/archive/2006/03/14/35248.html</link><dc:creator>java之海</dc:creator><author>java之海</author><pubDate>Tue, 14 Mar 2006 08:02:00 GMT</pubDate><guid>http://www.blogjava.net/xianeizhu/archive/2006/03/14/35248.html</guid><wfw:comment>http://www.blogjava.net/xianeizhu/comments/35248.html</wfw:comment><comments>http://www.blogjava.net/xianeizhu/archive/2006/03/14/35248.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/xianeizhu/comments/commentRss/35248.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xianeizhu/services/trackbacks/35248.html</trackback:ping><description><![CDATA[使用MyEclipse开发web项目,所生成的web.xml头部如下:<br><span class="m">&lt;</span><span class="t">web-app</span><span class="ns"> 
xmlns</span><span class="m">="</span><b class="ns">http://java.sun.com/xml/ns/j2ee</b><span class="m">"</span><span class="ns"> xmlns:xsi</span><span class="m">="</span><b class="ns">http://www.w3.org/2001/XMLSchema-instance</b><span class="m">"</span><span class="t"> version</span><span class="m">="</span><b>2.4</b><span class="m">"</span><span class="t"> 
xsi:schemaLocation</span><span class="m">="</span><b>http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</b><span class="m">"</span><span class="m">&gt;<br><br>等到要在web.xml加入taglib<br>&nbsp;&nbsp;&nbsp; &lt;taglib&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;taglib-uri&gt;/WEB-INF/tiles.tld&lt;/taglib-uri&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;taglib-location&gt;/WEB-INF/tiles.tld&lt;/taglib-location&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/taglib&gt;<br>始终会报错<br>后来把头部改为<br>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>&lt;!DOCTYPE web-app<br>&nbsp; PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br>&nbsp; "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd"&gt;<br><br>&lt;web-app&gt;<br>......<br></span><span class="m">&lt;/web-app&gt;<br>终于可以加taglib了,但原来的filter又报错,最后把</span><span class="m">filter和filter-mapping放在最前面,终于ok.</span><br><span class="m"><br></span><img src ="http://www.blogjava.net/xianeizhu/aggbug/35248.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xianeizhu/" target="_blank">java之海</a> 2006-03-14 16:02 <a href="http://www.blogjava.net/xianeizhu/archive/2006/03/14/35248.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>