﻿<?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之海</title><link>http://www.blogjava.net/xianeizhu/</link><description>java之海</description><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 10:36:31 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 10:36:31 GMT</pubDate><ttl>60</ttl><item><title>java中怎样得到当前时间</title><link>http://www.blogjava.net/xianeizhu/archive/2006/03/24/37141.html</link><dc:creator>java之海</dc:creator><author>java之海</author><pubDate>Fri, 24 Mar 2006 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/xianeizhu/archive/2006/03/24/37141.html</guid><wfw:comment>http://www.blogjava.net/xianeizhu/comments/37141.html</wfw:comment><comments>http://www.blogjava.net/xianeizhu/archive/2006/03/24/37141.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xianeizhu/comments/commentRss/37141.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xianeizhu/services/trackbacks/37141.html</trackback:ping><description><![CDATA[
		<pre>1:<br />java.sql.Timestamp a = new java.sql.Timestamp(System.currentTimeMillis());<br /><br />2:<br />java.util.Date a = new java.util.Date();<br /><br />3:<br />java.util.Date a;<br />a.setTime(System.currentTimeMillis());</pre>
<img src ="http://www.blogjava.net/xianeizhu/aggbug/37141.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-24 09:41 <a href="http://www.blogjava.net/xianeizhu/archive/2006/03/24/37141.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><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>6</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><item><title>java GUI设计的极品网站</title><link>http://www.blogjava.net/xianeizhu/archive/2006/03/07/33979.html</link><dc:creator>java之海</dc:creator><author>java之海</author><pubDate>Tue, 07 Mar 2006 01:46:00 GMT</pubDate><guid>http://www.blogjava.net/xianeizhu/archive/2006/03/07/33979.html</guid><wfw:comment>http://www.blogjava.net/xianeizhu/comments/33979.html</wfw:comment><comments>http://www.blogjava.net/xianeizhu/archive/2006/03/07/33979.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xianeizhu/comments/commentRss/33979.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xianeizhu/services/trackbacks/33979.html</trackback:ping><description><![CDATA[<div class="postTitle">推荐一个java&nbsp;GUI设计的极品网站 
</div>



<p>look and feel: <a href="http://www.javootoo.com/">http://www.javootoo.com/</a><br>java开源： <a href="http://www.open-open.com/">http://www.open-open.com/</a></p>
<table style="table-layout: fixed;" border="0"><tbody><tr><td><li><a href="http://javootoo.l2fprod.com/plaf/3dlf/index.php">3D Look And Feel</a> 
</li><li><a href="http://javootoo.l2fprod.com/plaf/audio/index.php">Audio Look And Feel</a> 
</li><li><a href="http://javootoo.l2fprod.com/plaf/kunststoff/index.php">Kunststoff Look&amp;Feel</a> 
</li><li><a href="http://javootoo.l2fprod.com/plaf/metouia/index.php">Metouia Look &amp; Feel</a> 
</li><li><a href="http://javootoo.l2fprod.com/plaf/next/index.php">NextStep Look And Feel</a> 
</li><li><a href="http://javootoo.l2fprod.com/plaf/teknolust/index.php">Teknolust Look And Feel</a> 
</li><li><a href="http://javootoo.l2fprod.com/plaf/xp/index.php">xp look and feel</a> </li>
<p><br></p></td></tr></tbody></table><img src ="http://www.blogjava.net/xianeizhu/aggbug/33979.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-07 09:46 <a href="http://www.blogjava.net/xianeizhu/archive/2006/03/07/33979.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Table of ASCII Characters</title><link>http://www.blogjava.net/xianeizhu/archive/2006/03/07/33978.html</link><dc:creator>java之海</dc:creator><author>java之海</author><pubDate>Tue, 07 Mar 2006 01:45:00 GMT</pubDate><guid>http://www.blogjava.net/xianeizhu/archive/2006/03/07/33978.html</guid><wfw:comment>http://www.blogjava.net/xianeizhu/comments/33978.html</wfw:comment><comments>http://www.blogjava.net/xianeizhu/archive/2006/03/07/33978.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xianeizhu/comments/commentRss/33978.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xianeizhu/services/trackbacks/33978.html</trackback:ping><description><![CDATA[&nbsp;<h1>Table of ASCII Characters</h1>
<p>This table lists the ASCII characters and their decimal, octal and
hexadecimal numbers. Characters which appear as names in parentheses (<i>e.g.</i>, <code><font face="新宋体">(nl)</font></code>) are non-printing characters. A table of the common non-printing characters appears after this table. </p><pre>Char  Dec  Oct  Hex | Char  Dec  Oct  Hex | Char  Dec  Oct  Hex | Char Dec  Oct   Hex<br>-------------------------------------------------------------------------------------<br>(nul)   0 0000 0x00 | (sp)   32 0040 0x20 | @      64 0100 0x40 | `      96 0140 0x60<br>(soh)   1 0001 0x01 | !      33 0041 0x21 | A      65 0101 0x41 | a      97 0141 0x61<br>(stx)   2 0002 0x02 | "      34 0042 0x22 | B      66 0102 0x42 | b      98 0142 0x62<br>(etx)   3 0003 0x03 | #      35 0043 0x23 | C      67 0103 0x43 | c      99 0143 0x63<br>(eot)   4 0004 0x04 | $      36 0044 0x24 | D      68 0104 0x44 | d     100 0144 0x64<br>(enq)   5 0005 0x05 | %      37 0045 0x25 | E      69 0105 0x45 | e     101 0145 0x65<br>(ack)   6 0006 0x06 | &amp;      38 0046 0x26 | F      70 0106 0x46 | f     102 0146 0x66<br>(bel)   7 0007 0x07 | '      39 0047 0x27 | G      71 0107 0x47 | g     103 0147 0x67<br>(bs)    8 0010 0x08 | (      40 0050 0x28 | H      72 0110 0x48 | h     104 0150 0x68<br>(ht)    9 0011 0x09 | )      41 0051 0x29 | I      73 0111 0x49 | i     105 0151 0x69<br>(nl)   10 0012 0x0a | *      42 0052 0x2a | J      74 0112 0x4a | j     106 0152 0x6a<br>(vt)   11 0013 0x0b | +      43 0053 0x2b | K      75 0113 0x4b | k     107 0153 0x6b<br>(np)   12 0014 0x0c | ,      44 0054 0x2c | L      76 0114 0x4c | l     108 0154 0x6c<br>(cr)   13 0015 0x0d | -      45 0055 0x2d | M      77 0115 0x4d | m     109 0155 0x6d<br>(so)   14 0016 0x0e | .      46 0056 0x2e | N      78 0116 0x4e | n     110 0156 0x6e<br>(si)   15 0017 0x0f | /      47 0057 0x2f | O      79 0117 0x4f | o     111 0157 0x6f<br>(dle)  16 0020 0x10 | 0      48 0060 0x30 | P      80 0120 0x50 | p     112 0160 0x70<br>(dc1)  17 0021 0x11 | 1      49 0061 0x31 | Q      81 0121 0x51 | q     113 0161 0x71<br>(dc2)  18 0022 0x12 | 2      50 0062 0x32 | R      82 0122 0x52 | r     114 0162 0x72<br>(dc3)  19 0023 0x13 | 3      51 0063 0x33 | S      83 0123 0x53 | s     115 0163 0x73<br>(dc4)  20 0024 0x14 | 4      52 0064 0x34 | T      84 0124 0x54 | t     116 0164 0x74<br>(nak)  21 0025 0x15 | 5      53 0065 0x35 | U      85 0125 0x55 | u     117 0165 0x75<br>(syn)  22 0026 0x16 | 6      54 0066 0x36 | V      86 0126 0x56 | v     118 0166 0x76<br>(etb)  23 0027 0x17 | 7      55 0067 0x37 | W      87 0127 0x57 | w     119 0167 0x77<br>(can)  24 0030 0x18 | 8      56 0070 0x38 | X      88 0130 0x58 | x     120 0170 0x78<br>(em)   25 0031 0x19 | 9      57 0071 0x39 | Y      89 0131 0x59 | y     121 0171 0x79<br>(sub)  26 0032 0x1a | :      58 0072 0x3a | Z      90 0132 0x5a | z     122 0172 0x7a<br>(esc)  27 0033 0x1b | ;      59 0073 0x3b | [      91 0133 0x5b | {     123 0173 0x7b<br>(fs)   28 0034 0x1c | &lt;      60 0074 0x3c | \      92 0134 0x5c | |     124 0174 0x7c<br>(gs)   29 0035 0x1d | =      61 0075 0x3d | ]      93 0135 0x5d | }     125 0175 0x7d<br>(rs)   30 0036 0x1e | &gt;      62 0076 0x3e | ^      94 0136 0x5e | ~     126 0176 0x7e<br>(us)   31 0037 0x1f | ?      63 0077 0x3f | _      95 0137 0x5f | (del) 127 0177 0x7f</pre><pre><table><tbody><tr><th>ASCII Name </th><th align="left">Description </th><th>C Escape Sequence </th></tr><tr><td>nul </td><td>null byte </td><td align="center">\0 </td></tr><tr><td>bel </td><td>bell character </td><td align="center">\a </td></tr><tr><td>bs </td><td>backspace </td><td align="center">\b </td></tr><tr><td>ht </td><td>horizontal tab </td><td align="center">\t </td></tr><tr><td>np </td><td>formfeed </td><td align="center">\f </td></tr><tr><td>nl </td><td>newline </td><td align="center">\n </td></tr><tr><td>cr </td><td>carriage return </td><td align="center">\r </td></tr><tr><td>vt </td><td>vertical tab </td><td><br></td></tr><tr><td>esc </td><td>escape </td><td><br></td></tr><tr><td>sp </td><td>space</td></tr></tbody></table></pre><img src ="http://www.blogjava.net/xianeizhu/aggbug/33978.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-07 09:45 <a href="http://www.blogjava.net/xianeizhu/archive/2006/03/07/33978.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MYSQL创建外键失败的问题</title><link>http://www.blogjava.net/xianeizhu/archive/2006/03/03/33503.html</link><dc:creator>java之海</dc:creator><author>java之海</author><pubDate>Fri, 03 Mar 2006 09:09:00 GMT</pubDate><guid>http://www.blogjava.net/xianeizhu/archive/2006/03/03/33503.html</guid><wfw:comment>http://www.blogjava.net/xianeizhu/comments/33503.html</wfw:comment><comments>http://www.blogjava.net/xianeizhu/archive/2006/03/03/33503.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xianeizhu/comments/commentRss/33503.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xianeizhu/services/trackbacks/33503.html</trackback:ping><description><![CDATA[mysql error number 1005 can't create table errno: 150<br><br>这是建外键的列与要关联的列类型不匹配造成的。<br>一个表用powerdesigner导入的整型长度为11<br>另一个直接再mysql中建立的表默认整型长度是10<br><br>造成不能建立外键<br><img src ="http://www.blogjava.net/xianeizhu/aggbug/33503.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-03 17:09 <a href="http://www.blogjava.net/xianeizhu/archive/2006/03/03/33503.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat服务器配置参考-路径指向</title><link>http://www.blogjava.net/xianeizhu/archive/2006/02/16/31084.html</link><dc:creator>java之海</dc:creator><author>java之海</author><pubDate>Thu, 16 Feb 2006 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/xianeizhu/archive/2006/02/16/31084.html</guid><wfw:comment>http://www.blogjava.net/xianeizhu/comments/31084.html</wfw:comment><comments>http://www.blogjava.net/xianeizhu/archive/2006/02/16/31084.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xianeizhu/comments/commentRss/31084.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xianeizhu/services/trackbacks/31084.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=4 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=top align=left true>
<H1>Tomcat服务器配置参考</H1>
<H2>Host容器</H2></TD>
<TD vAlign=top align=right true><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=2 border=0>
<TBODY>
<TR>
<TD bgColor=#525d76><FONT face=arial,helvetica.sanserif color=#ffffff><A name=Introduction><STRONG>概述</STRONG></A></FONT></TD></TR>
<TR>
<TD vAlign=top>
<BLOCKQUOTE>
<P>Host元素代表一个虚拟主机，虚拟主机将服务器的网络名（比如www.mycompany.com）和运行Catalinade的某个特定服务器联系起来。为了生效，网络名称必须在管理你所在的Internet域的DNS服务器进行登记---请联系你的网络管理员。</P>
<P></P>
<P>在许多情况下，系统管理员可能希望为同一个虚拟主机或应用关联多个网络名称（比如www.mycompany.com和company.com）。这可以利用下面讨论的Host Name Alias特征来完成。</P>
<P>在Engine元素中可以嵌套一个或多个Host元素。在Host元素中可以嵌套context元素。在与每个Engine相关联的所有Host中，必须有一个Host的名称与Engine的defaultHost属性匹配。</P>
<P><I>以下的描述使用变量</I><EM>$CATALINA_HOME来指Tomcat 5安装的目录。大多数的相对路径都是以该目录为基准。但是，通过设置CATALINA_BASE目录，可以运行多个Tomcat 5实例，这时你应该使用$CATALINA_BASE来作为目录基准，而不是使用$CATALINA_HOME。</EM></P></BLOCKQUOTE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=2 border=0>
<TBODY>
<TR>
<TD bgColor=#525d76><FONT face=arial,helvetica.sanserif color=#ffffff><A name=Attributes><STRONG>属性</STRONG></A></FONT></TD></TR>
<TR>
<TD>
<BLOCKQUOTE>
<TABLE cellSpacing=0 cellPadding=2 border=0>
<TBODY>
<TR>
<TD bgColor=#828da6><FONT face=arial,helvetica.sanserif color=#ffffff><A name="Common Attributes"><STRONG>公共属性</STRONG></A></FONT></TD></TR>
<TR>
<TD>
<P>所有Host的实现必须支持如下属性：</P>
<TABLE cellPadding=5 border=1>
<TBODY>
<TR>
<TH width="15%" bgColor=#023264><FONT color=#ffffff>属性</FONT></TH>
<TH width="85%" bgColor=#023264><FONT color=#ffffff>描述</FONT></TH></TR>
<TR>
<TD vAlign=center align=left><STRONG><CODE>appBase</CODE></STRONG></TD>
<TD vAlign=center align=left>
<P>虚拟主机的Applicaton Base目录。这是在该虚拟主机上发布web应用的目录路径。你可以指定绝对路径，或者使用相对于<CODE>$CATALINA_HOME</CODE>的路径。有关web应用的自动识别和发布的更多信息，请参考应用自动发布。</P></TD></TR>
<TR>
<TD vAlign=center align=left><CODE>autoDeploy</CODE></TD>
<TD vAlign=center align=left>
<P>这个标志表示，在Tomcat运行的时候，放到appBase目录下的新的web应用是否自动发布。缺省为true。这方面的更多信息参考应用自动发布</P></TD></TR>
<TR>
<TD vAlign=center align=left><CODE>backgroundProcessorDelay</CODE></TD>
<TD vAlign=top align=left>
<P><CODE>这个</CODE>值代表在该host及其子容器（包括所有的wrappers）上调用backgroundProcess方法的延时，以秒为单位。如果延时值非负，子容器不会被调用，这意味着子容器使用自己的处理线程。如果该值为正，会创建一个新的线程。在等待指定的时间以后，该线程在Host及其子容器上调用backgroundProcess方法。Host使用后台处理进行与web应用实时发布有关的操作。如果没有指定，缺省值是－1，说明host依赖其所属的Engine的后台处理。</P></TD></TR>
<TR>
<TD vAlign=center align=left><CODE>className</CODE></TD>
<TD vAlign=top align=left>
<P>实现的Java类名。该类必须实现org.apache.catalina.Host接口。如果没有指定，使用标准实现（在下面定义）</P></TD></TR>
<TR>
<TD vAlign=center align=left><CODE>deployOnStartup</CODE></TD>
<TD vAlign=center align=left>
<P>这个标志表明这个host的web应用是否由host configurator 自动发布。缺省为true。这方面的更多信息参考自动应用发布。</P></TD></TR>
<TR>
<TD vAlign=center align=left><STRONG><CODE>name</CODE></STRONG></TD>
<TD vAlign=center align=left>
<P>虚拟主机的网络名称，也就是在DNS服务器上注册的名称。嵌套在Engine的所有Host中，必须有一个Host的名字与Engine的defaultHost属性相同。如果想为同一个虚拟主机指定多个网络名称，参考主机名别名。</P>
<P>&nbsp;</P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=2 border=0>
<TBODY>
<TR>
<TD bgColor=#828da6><FONT face=arial,helvetica.sanserif color=#ffffff><A name="Standard Implementation"><STRONG>标准实现</STRONG></A></FONT></TD></TR>
<TR>
<TD>
<BLOCKQUOTE>
<P>Host的标准实现是org.apache.catalina.core.StandardHost。它还支持如下的附加属性</P>
<P></P>
<TABLE cellPadding=5 border=1>
<TBODY>
<TR>
<TH width="15%" bgColor=#023264><FONT color=#ffffff>属性</FONT></TH>
<TH width="85%" bgColor=#023264><FONT color=#ffffff>描述</FONT></TH></TR>
<TR>
<TD vAlign=center align=left><CODE>debug</CODE></TD>
<TD vAlign=center align=left>
<P>与Engine相关联的Logger的调试信息的详细程度。数字越大，输出越详细。如果没有指定，缺省值为0。</P></TD></TR>
<TR>
<TD vAlign=center align=left><CODE>deployXML</CODE></TD>
<TD vAlign=center align=left>
<P>如果不想使用Context XML配置文件来发布web应用，设为false。同时也失去了利用manager应用程序安装web应用或者“.war”文件的能力（这些web应用或.war文件不在Host的配置基准目录<CODE>$CATALINA_HOME/conf/[engine_name]/[host_name]</CODE>下面）</P>
<P>web应用使用catalina的安全许可发布，如果需要让不可信的用户管理web应用，这个值可以设为false。缺省为true。</P></TD></TR>
<TR>
<TD vAlign=center align=left><CODE>errorReportValveClass</CODE></TD>
<TD vAlign=center align=left>
<P>Host使用的错误报告valve的Java类名。这个valve的责任是输出错误报告。设置这个值可以定制Tomcat产生的错误页面的格式。这个类必须实现org.apache.catalina.Valve接口。如果没有指定，使用缺省值</P>
<P>og.apache.catalina.valvees.ErrorReportValve.</P></TD></TR>
<TR>
<TD vAlign=center align=left><CODE>unpackWARs</CODE></TD>
<TD vAlign=center align=left>
<P>如果希望将位于appBase目录下的WAR文件解压缩成对应的目录结构，设为true。如果希望直接从WAR文件运行web应用，设为false。更多信息参考应用自动发布。</P></TD></TR>
<TR>
<TD vAlign=center align=left><CODE>workDir</CODE></TD>
<TD vAlign=center align=left>
<P>Host的web应用使用的临时目录的路径。每个应用都有自己的子目录，用于临时的读写。如果在Context中设置了workDir属性，它将会覆盖Host的workDir属性。如Servlet Specification中所述，通过servlet context的属性javax.servlet.context.tempdir，这个目录可以被servlet使用。如果没有指定，使用<CODE>$CATALINA_HOME/work</CODE>下面的合适的目录。</P></TD></TR></TBODY></TABLE></BLOCKQUOTE></TD></TR></TBODY></TABLE></BLOCKQUOTE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=2 border=0>
<TBODY>
<TR>
<TD bgColor=#525d76><FONT face=arial,helvetica.sanserif color=#ffffff><A name="Nested Components"><STRONG>嵌套组件</STRONG></A></FONT></TD></TR>
<TR>
<TD vAlign=top>
<BLOCKQUOTE>
<P>可以在Host元素中嵌套一个或者多个Context元素，每个Context元素代表这个虚拟主机下的一个不同的web应用。同时，你可以嵌套一个DefaultContext元素，用来定义后续发布的web应用的缺省值</P>
<P>可以在Host元素中选择嵌套一个DefaultContext元素，用来定义自动发布的web应用的缺省特性。</P>
<P>下列元素可以嵌套在Host元素中，但至多只能嵌套一个实例：</P>
<UL>
<LI><A href="http://www.cnjsp.org/document/user/tuman/logger.html"><STRONG>Logger</STRONG></A> - 配置一个logger，用来接收和处理Host的所有日志消息，以及这个Host的所有Context的日志消息（除非被低一级的Logger配置覆盖） 
<LI><A href="http://www.cnjsp.org/document/user/tuman/realm.html"><STRONG>Realm</STRONG></A> -配置一个realm，Realm的用户数据库以及用户角色被这个Host的所有Context共享（除非被低一级的Realm配置覆盖） </LI></UL></BLOCKQUOTE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=2 border=0>
<TBODY>
<TR>
<TD vAlign=top bgColor=#525d76><FONT face=arial,helvetica.sanserif color=#ffffff><A name="Special Features"><STRONG>专有特征</STRONG></A></FONT></TD></TR>
<TR>
<TD>
<BLOCKQUOTE>
<TABLE cellSpacing=0 cellPadding=2 border=0>
<TBODY>
<TR>
<TD bgColor=#828da6><FONT face=arial,helvetica.sanserif color=#ffffff><A name="Access Logs"><STRONG>访问日志</STRONG></A></FONT></TD></TR>
<TR>
<TD vAlign=top>
<BLOCKQUOTE>
<P>正常情况下，运行web服务器会生成访问日志。访问日志以标准格式为每个请求输出一行信息。Catalina包含一个可选的Valve实现，可以用标准格式生成日志,还可以使用任意定制的格式。</P>
<P>通过在Engine，Host或者Context中嵌套一个Valve元素，Catalina会为该容器处理的所有请求创建访问日志，如下所示：</P>
<TABLE cellSpacing=4 cellPadding=0 border=0>
<TBODY>
<TR>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR>
<TR>
<TD width=1 bgColor=#023264><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#ffffff height=1><PRE>&lt;Host name="localhost" ...&gt;
  ...
  &lt;Valve className="org.apache.catalina.valves.AccessLogValve"
         prefix="localhost_access_log." suffix=".txt"
         pattern="common"/&gt;
  ...
&lt;/Host&gt;
</PRE></TD>
<TD width=1 bgColor=#023264><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR>
<TR>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR></TBODY></TABLE>参考Access Log Valve，以获得更多配置属性的信息；</BLOCKQUOTE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=2 border=0>
<TBODY>
<TR>
<TD bgColor=#828da6><FONT face=arial,helvetica.sanserif color=#ffffff><A name="Automatic Application Deployment"><STRONG>应用自动发布</STRONG></A></FONT></TD></TR>
<TR>
<TD vAlign=top>
<BLOCKQUOTE>
<P>如果使用标准的Host实现，当Catalina第一次启动时，如果deployOnStartup属性为true，tomcat会自动采取如下的步骤：</P>
<UL>
<LI>假定<CODE>$CATALINA_HOME/conf/[engine_name]/[host_name]</CODE>目录中的任何XML文件都包含一个Context元素（以及它的相关的子元素），通常情况下，这个&lt;Context&gt;的docBase属性指向一个web应用目录的绝对路径，或者是WAR文件的绝对路径。 
<LI>如果WAR文件对应的目录不存在，则这个WAR文件会被自动展开，除非unpackWARs属性设为false。在重新发布更新后的WAR文件时，重新启动Tomcat之前一定要删除展开后的目录，这样更新后的WAR文件才会被重新展开（如果使能了auto deployer，它会自动完成这项工作） 
<LI>application base目录下的任何子目录，如果包含/WEB-INF/web.xml文件，Tomcat认为这个一个展开后的web应用，会为这个目录自动产生一个Context元素，即使这个目录没有在conf/server.xml文件中出现。产生的Context会使用DefaultContext中的属性来配置。自动产生的Context的context路径是“/”后面跟上目录名，除非目录名是ROOT，这种情况下context路径是空字符串（“”）； </LI></UL>
<P>除了启动时候的自动发布以外，在Tomcat运行的时候，当新的XML 配置文件，WAR文件或者子目录（包含新的web应用）放到appBase目录下，或者当XML配置文件放到<CODE>$CATALINA_HOME/conf/[engine_name]/[host_name]目录</CODE>）的时候，该web应用被自动发布。auto deployer也负责跟踪web应用的如下变化： 
<UL>
<LI>如果更新了WEB-INF/web.xml文件，会触发web应用的重载； 
<LI>如果WAR文件被更新，并且WAR文件已经展开，首先删除展开的web应用，然后发布更新的WAR文件； 
<LI>如果XML配置文件被更新，首先删除该应用（但是不删除任何展开以后的目录），然后发布相关的web应用 </LI></UL></BLOCKQUOTE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=2 border=0>
<TBODY>
<TR>
<TD bgColor=#828da6><FONT face=arial,helvetica.sanserif color=#ffffff><A name="Host Name Aliases"><STRONG>主机名别名</STRONG></A></FONT></TD></TR>
<TR>
<TD>
<BLOCKQUOTE>
<P>在许多服务器环境中，多个网络名称可能指向同一个IP地址（比如，www.mycompany.com和company.com都指向192.168.1.1）。正常情况下，每个网络名称应该在conf/server.xml中对应一个Host元素，每个Host元素有自己的一套web应用。</P>
<P>但是，有些情况下，可能希望两个或者更多网络名称解析到同一个虚拟主机上，运行相同的一套web应用。这种情况的典型用途是公司网站。用户可以使用www.mycompany.com和company.com访问同样的内容和应用。</P>
<P>通过在Host元素中嵌套一个或者多个Alias元素，可以完成上述功能。</P>
<P>&nbsp;</P>
<DIV align=left>
<TABLE cellSpacing=4 cellPadding=0 border=0>
<TBODY>
<TR>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR>
<TR>
<TD width=1 bgColor=#023264><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#ffffff height=1><PRE>&lt;Host name="www.mycompany.com" ...&gt;
  ...
  &lt;Alias&gt;mycompany.com&lt;/Alias&gt;
  ...
&lt;/Host&gt;
</PRE></TD>
<TD width=1 bgColor=#023264><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR>
<TR>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR></TBODY></TABLE></DIV>
<P>为了使这个策略生效，所有的网络名称必须在DNS服务器登记，指向运行Catalina实例的同一台计算机。</P>
<P>&nbsp;</P></BLOCKQUOTE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=2 border=0>
<TBODY>
<TR>
<TD bgColor=#828da6><FONT face=arial,helvetica.sanserif color=#ffffff><A name="Lifecycle Listeners"><STRONG>生命期Listeners</STRONG></A></FONT></TD></TR>
<TR>
<TD vAlign=top>
<BLOCKQUOTE>
<P>如果一个Java对象需要知道Context什么时候启动，什么时候停止，可以在这个对象中嵌套一个Listener元素。该Listener元素必须实现了org.apache.catalina.LifecycleListener接口，在发生对应的生命期事件的时候，通知该Listener。可以按照如下的格式配置这样的Listener：</P>
<P></P>
<DIV align=left>
<TABLE cellSpacing=4 cellPadding=0 border=0>
<TBODY>
<TR>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR>
<TR>
<TD width=1 bgColor=#023264><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#ffffff height=1><PRE>&lt;Host name="localhost" ...&gt;
  ...
  &lt;Listener className="com.mycompany.mypackage.MyListener" ... &gt;
  ...
&lt;/Host&gt;
</PRE></TD>
<TD width=1 bgColor=#023264><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR>
<TR>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR></TBODY></TABLE>注意，一个listener可以具有任意多的附加属性。属性名与JavaBean的属性名相对应，使用标准的属性命名方法。<BR></DIV></BLOCKQUOTE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=2 border=0>
<TBODY>
<TR>
<TD bgColor=#828da6><FONT face=arial,helvetica.sanserif color=#ffffff><A name="Request Filters"><STRONG>请求过滤器</STRONG></A></FONT></TD></TR>
<TR>
<TD>
<BLOCKQUOTE>对每个发送到Engine，Host或者Context的请求，可以要求Catalina检查IP地址或主机名称。Catalina使用一系列配置好的“接受”或者“拒绝”过滤器对客户端的地址或者主机名进行检查，过滤器是按照正则表达式语法定义的，由Jakarta Regexp正则表达式库支持。不被接受的请求会返回一个HTTP“Forbidden”错误。下面是过滤器的定义。 
<DIV align=left>
<TABLE cellSpacing=4 cellPadding=0 border=0>
<TBODY>
<TR>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR>
<TR>
<TD width=1 bgColor=#023264><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#ffffff height=1><PRE>&lt;Host name="localhost" ...&gt;
  ...
  &lt;Valve className="org.apache.catalina.valves.RemoteHostValve"
         allow="*.mycompany.com,www.yourcompany.com"/&gt;
  &lt;Valve className="org.apache.catalina.valves.RemoteAddrValve"
         deny="192.168.1.*"/&gt;
  ...
&lt;/Host&gt;
</PRE></TD>
<TD width=1 bgColor=#023264><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR>
<TR>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR></TBODY></TABLE></DIV>
<P>&nbsp;</P>
<P>如果想知道过滤器支持的更多选项的信息，参考Remote Address Filter和Remote Host Filter</P></BLOCKQUOTE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=2 border=0>
<TBODY>
<TR>
<TD bgColor=#828da6><FONT face=arial,helvetica.sanserif color=#ffffff><A name="Single Sign On"><STRONG>单次登录（Single Sign On</STRONG></A>）</FONT></TD></TR>
<TR>
<TD vAlign=top>
<BLOCKQUOTE>
<P>在许多环境尤其是门户环境下，对特定虚拟主机上的一套web应用，只希望对用户进行一次认证。这可以在Host元素中嵌套如下的元素完成：</P>
<DIV align=left>
<TABLE cellSpacing=4 cellPadding=0 border=0>
<TBODY>
<TR>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR>
<TR>
<TD width=1 bgColor=#023264><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#ffffff height=1><PRE>&lt;Host name="localhost" ...&gt;
  ...
  &lt;Valve className="org.apache.catalina.authenticator.SingleSignOn"
         debug="0"/&gt;
  ...
&lt;/Host&gt;
</PRE></TD>
<TD width=1 bgColor=#023264><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR>
<TR>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR></TBODY></TABLE></DIV>
<P>单次登录根据如下规则运作：</P>
<UL>
<LI>这个虚拟主机的所有web应用必须共享同一个Realm。在实际情况中，这意味着你可以在这个Host元素中嵌套Realm元素（或者是Engine元素），但不能在web应用对应的Context中嵌套Realm元素 
<LI>如果用户只访问这个虚拟主机上任意web应用的没有加保护的资源，他们不会被要求认证； 
<LI>一旦用户访问这个虚拟主机下的<B>任意</B>web应用的保护资源，用户会被要求认证。使用正在访问的web应用的login方法； 
<LI>一旦认证通过，与这个用户相关联的角色决定了它对所有的web应用的访问控制权限；而不需要对每个应用单独认证； 
<LI>一旦用户从某个web应用注销（比如，如果使用了基于表单的login，对应的session过期或者无效），用户在所有web应用的session都会失效；任何后续的对保护资源的访问会要求对用户重新认证； 
<LI>单次登录特征使用HTTP cookies传输令牌，将每个请求和用户身份联系起来，因此客户端必须支持cookies； </LI></UL></BLOCKQUOTE></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=2 border=0>
<TBODY>
<TR>
<TD bgColor=#828da6><FONT face=arial,helvetica.sanserif color=#ffffff><A name="User Web Applications"><STRONG>用户Web应用</STRONG></A></FONT></TD></TR>
<TR>
<TD vAlign=top>
<BLOCKQUOTE>
<P>许多web服务器会自动将以"~"和用户名开始的URI映射到用户主目录下的某个目录（通常为public_html）。在Catalina中，通过使用特殊的Listener元素，可以完成上述功能</P>
<P>在利用/etc/password来标识有效用户的Unix系统下使用如下配置：</P>
<DIV align=left>
<TABLE cellSpacing=4 cellPadding=0 border=0>
<TBODY>
<TR>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR>
<TR>
<TD width=1 bgColor=#023264><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#ffffff height=1><PRE>&lt;Host name="localhost" ...&gt;
  ...
  &lt;Listener className="org.apache.catalina.startup.UserConfig"
            directoryName="public_html"
            userClass="org.apache.catalina.startup.PasswdUserDatabase"/&gt;
  ...
&lt;/Host&gt;
</PRE></TD>
<TD width=1 bgColor=#023264><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR>
<TR>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR></TBODY></TABLE></DIV>
<P>在不使用/etc/password的服务器上，可以要求Catalina将指定的基准目录下的所有目录（比如c:\homes）看成是用户主目录：</P>
<DIV align=left>
<TABLE cellSpacing=4 cellPadding=0 border=0>
<TBODY>
<TR>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR>
<TR>
<TD width=1 bgColor=#023264><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#ffffff height=1><PRE>&lt;Host name="localhost" ...&gt;
  ...
  &lt;Listener className="org.apache.catalina.startup.UserConfig"
            directoryName="public_html"
            homeBase=c:\Homes"
            userClass="org.apache.catalina.startup.HomesUserDatabase"/&gt;
  ...
&lt;/Host&gt;
</PRE></TD>
<TD width=1 bgColor=#023264><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR>
<TR>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR></TBODY></TABLE></DIV>
<P>如果某个名为craigmcc的用户的主目录已经设置好，通过使用如下URL，可以浏览它的内容：</P>
<DIV align=left>
<TABLE cellSpacing=4 cellPadding=0 border=0>
<TBODY>
<TR>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR>
<TR>
<TD width=1 bgColor=#023264><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#ffffff height=1><PRE>http://www.mycompany.com:8080/~craigmcc
</PRE></TD>
<TD width=1 bgColor=#023264><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR>
<TR>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD>
<TD width=1 bgColor=#023264 height=1><IMG height=1 hspace=0 src="http://www.cnjsp.org/document/images/void.gif" width=1 border=0></TD></TR></TBODY></TABLE>
<P>&nbsp;</P></DIV>
<P>使用这个特征需要注意如下几个问题：</P>
<UL>
<LI>每个用户web应用会使用该Host的DefaultContext元素定义的特征发布； 
<LI>包含多个Listener元素的实例也是有效的。但是，这只在你希望配置多个homeBase目录情况下才有意义； 
<LI>执行Catalina的用户名对每个用户的web应用目录以及它的所有内容必须有读的权限；</LI></UL></BLOCKQUOTE></TD></TR></TBODY></TABLE></BLOCKQUOTE></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/xianeizhu/aggbug/31084.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-02-16 17:05 <a href="http://www.blogjava.net/xianeizhu/archive/2006/02/16/31084.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts编辑记录</title><link>http://www.blogjava.net/xianeizhu/archive/2006/02/15/30781.html</link><dc:creator>java之海</dc:creator><author>java之海</author><pubDate>Wed, 15 Feb 2006 03:51:00 GMT</pubDate><guid>http://www.blogjava.net/xianeizhu/archive/2006/02/15/30781.html</guid><wfw:comment>http://www.blogjava.net/xianeizhu/comments/30781.html</wfw:comment><comments>http://www.blogjava.net/xianeizhu/archive/2006/02/15/30781.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xianeizhu/comments/commentRss/30781.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xianeizhu/services/trackbacks/30781.html</trackback:ping><description><![CDATA[<P>首先在数据访问层读取一条记录并返回该类的Form<BR><BR>&nbsp;&nbsp;&nbsp;if ("request".equals(mapping.getScope())) {</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;request.setAttribute(mapping.getAttribute(), articleForm);<BR>&nbsp;&nbsp;&nbsp;} else {</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;session.setAttribute(mapping.getAttribute(), articleForm);<BR>&nbsp;&nbsp;&nbsp;}<BR>上面的代码把Form放入Request并返回给客户端<BR><BR>在界面显示的jsp中有如下声明<BR><BR>&nbsp;&nbsp;&lt;html:form action="/articleEdit" name="articleForm" type="com.xianeizhu.struts.form.ArticleForm" <STRONG>scope="request"&gt;<BR>....<BR></STRONG>&lt;html:text property="title" /&gt;<BR>显示该Form的title属性<BR><BR><BR><STRONG>scope="request"如果漏掉，会造成数据显示为空</STRONG></P><img src ="http://www.blogjava.net/xianeizhu/aggbug/30781.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-02-15 11:51 <a href="http://www.blogjava.net/xianeizhu/archive/2006/02/15/30781.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>