﻿<?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-xiekai-blog-随笔分类-JAVA相关技术</title><link>http://www.blogjava.net/xiekai-blog/category/12517.html</link><description>北冥有鱼，其名为鲲。鲲之大，不知其几千里也。化而为鸟，其名为鹏。鹏之背，不知其几千里也。怒而飞，其翼若垂天之云。是鸟也，海运则将徙于南冥。南冥者，天池也。
</description><language>zh-cn</language><lastBuildDate>Fri, 30 Nov 2007 13:38:52 GMT</lastBuildDate><pubDate>Fri, 30 Nov 2007 13:38:52 GMT</pubDate><ttl>60</ttl><item><title>利用MAP进行排序</title><link>http://www.blogjava.net/xiekai-blog/archive/2007/11/29/164009.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Thu, 29 Nov 2007 07:40:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2007/11/29/164009.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/164009.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2007/11/29/164009.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/164009.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/164009.html</trackback:ping><description><![CDATA[<p>假设List myList 中存放了n个数据对象，每个数据对象包含m个属性。现在要将这n个数据对象按照某一个或几个属性值重新排序，得到排序后的List。为此，可以利用java中的TreeMap来方便地实现。<br />
再具体一些，假设这n个数据对象类型为MyEntity, 其中有A, B, C, D, E五个属性，现要依次按照A, &nbsp;E, B的升序来排序。<br />
<br />
//排序<br />
Map map = sortMyEntity(myList);<br />
//得到排序后的List<br />
myList = convertMapToList(map);<br />
<br />
/**<br />
&nbsp;*sortMyEntity方法的实现<br />
&nbsp;*/<br />
public Map sortMyEntity(List myList) {<br />
&nbsp;&nbsp;&nbsp; Map sortMap = new TreeMap();<br />
&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; myList.size(); i++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyEntity entity = (MyEntity)myList.get(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String key = entity.getA().toString() + ":" + entity.getE().toString()&nbsp;+ ":" + entity.getB().toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sortMap.put(key, entity);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return sortMap;<br />
}</p>
<br />
/**<br />
&nbsp;*将排序后的Map转换回List<br />
&nbsp;*/<br />
public List convertMapToList(Map sortMap) {<br />
&nbsp;&nbsp;&nbsp; List resultList = new ArrayList();<br />
&nbsp;&nbsp;&nbsp; Iterator itKey = sortMap.keySet().iterator();<br />
&nbsp;&nbsp;&nbsp; while (itKey.hasNext()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String key = (String)itKey.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyEntity entity = (MyEntity)sortMap.get(key);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resultList.add(entity);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return resultList;<br />
}
<img src ="http://www.blogjava.net/xiekai-blog/aggbug/164009.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2007-11-29 15:40 <a href="http://www.blogjava.net/xiekai-blog/archive/2007/11/29/164009.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Weblogic远程重启动命令</title><link>http://www.blogjava.net/xiekai-blog/archive/2007/07/02/127602.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Mon, 02 Jul 2007 08:42:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2007/07/02/127602.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/127602.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2007/07/02/127602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/127602.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/127602.html</trackback:ping><description><![CDATA[Deploy的时候，有时需要重启weblogic，方法如下：<br><br>1）通过Tera Term Pro这样的工具，连接服务器。端口23。<br>※也可以直接用cmd命令行窗口，输入telnet&nbsp;IP 。例如：telnet 11.111.11.11 <br>2）按照提示，输入用户名和口令<br>3）登陆成功后，就可以输入停止、启动weblogic的命令了，如下：<br>&nbsp;&nbsp;&nbsp;&nbsp; stop:<br>&nbsp;&nbsp;&nbsp;&nbsp; sudo /etc/init.d/weblogic stop&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp; start:<br>&nbsp;&nbsp;&nbsp;&nbsp; sudo /etc/init.d/weblogic start&nbsp;&nbsp;<br><br>4）有时，stop之后，进程还没有结束，还在停止中状态，这时需要等待。可通过下面的命令查看进程是否停止了：<br>&nbsp;&nbsp;&nbsp;&nbsp; ps ax|grep&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;例如： ps ax|grep "mfserver\|myserver"
<img src ="http://www.blogjava.net/xiekai-blog/aggbug/127602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2007-07-02 16:42 <a href="http://www.blogjava.net/xiekai-blog/archive/2007/07/02/127602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>取得最小开始日期，JAVA中Set和Iterator的使用一例</title><link>http://www.blogjava.net/xiekai-blog/archive/2007/05/23/119385.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Wed, 23 May 2007 05:34:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2007/05/23/119385.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/119385.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2007/05/23/119385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/119385.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/119385.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">画面表示する開始日を判断する為のSET</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&nbsp;strYmdSet&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;HashSet();<br><br>&nbsp;&nbsp;&nbsp;&nbsp; strYmdSet.add(strYmd1().toString());<br>&nbsp;&nbsp;&nbsp;&nbsp; strYmdSet.add(strYmd2().toString());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;。。。<br>&nbsp;&nbsp;&nbsp;&nbsp; strYmdSet.add(strYmdn().toString());</span></div>
<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;セットから最小の開始日を取得します。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;strYmdSet&nbsp;開始日のセット<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000">&nbsp;最小の開始日<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;String&nbsp;getMinStrYtiYmd(Set&nbsp;strYmdSet)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;minStrYmd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">99999999</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator&nbsp;itr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;strYmdSet.iterator();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(itr.hasNext())&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;strYmd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(String)&nbsp;itr.next();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(strYmd&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strYmd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(minStrYmd.compareTo(strYmd)&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minStrYmd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;strYmd;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;minStrYmd;<br>&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<img src ="http://www.blogjava.net/xiekai-blog/aggbug/119385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2007-05-23 13:34 <a href="http://www.blogjava.net/xiekai-blog/archive/2007/05/23/119385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebLogic 如何设置session超时时间 </title><link>http://www.blogjava.net/xiekai-blog/archive/2007/02/13/99695.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Tue, 13 Feb 2007 07:17:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2007/02/13/99695.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/99695.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2007/02/13/99695.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/99695.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/99695.html</trackback:ping><description><![CDATA[
		<p>1 web.xml </p>
		<p>设置WEB应用程序描述符web.xml里的&lt;session-timeout&gt;元素。这个值以分钟为<br />单位，并覆盖weblogic.xml中的TimeoutSecs属性<br />  &lt;session-config&gt;<br />    &lt;session-timeout&gt;54&lt;/session-timeout&gt;<br />  &lt;/session-config&gt;<br />此例表示Session将在54分钟后过期<br />当&lt;session-timeout&gt;设置为－2，表示将使用在weblogic.xml中设置的<br />TimeoutSecs这个属性值。<br />当&lt;session-timeout&gt;设置为－1，表示Session将永不过期，而忽略在<br />weblogic.xml中设置的TimeoutSecs属性值。<br />该属性值可以通过console控制台来设置<br /><br />2 weblogic.xml</p>
		<p>设置WebLogic特有部署描述符weblogic.xml的&lt;session-descriptor&gt;元素的<br />TimeoutSecs属性。这个值以秒为单位<br />&lt;session-descriptor&gt;<br />   &lt;session-param&gt;<br />      &lt;param-name&gt;TimeoutSecs&lt;/param-name&gt;<br />      &lt;param-value&gt;3600&lt;/param-value&gt;<br />   &lt;/session-param&gt;<br />&lt;/session-descriptor&gt;<br />默认值是3600</p>
<img src ="http://www.blogjava.net/xiekai-blog/aggbug/99695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2007-02-13 15:17 <a href="http://www.blogjava.net/xiekai-blog/archive/2007/02/13/99695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RiA：Rich Internet Application（C/B/S架构）</title><link>http://www.blogjava.net/xiekai-blog/archive/2006/09/15/69956.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Fri, 15 Sep 2006 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2006/09/15/69956.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/69956.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2006/09/15/69956.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/69956.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/69956.html</trackback:ping><description><![CDATA[
		<h3>RiA：Rich Internet Application（C/B/S架构）<br /></h3>
		<p>Coofucoo  <a href="http://blog.csdn.net/coofucoo/archive/2006/03/17/626909.aspx">http://blog.csdn.net/coofucoo/archive/2006/03/17/626909.aspx</a></p>
		<p>RiA就是Rich Internet Application的缩写。<br />“Rich”代表功能强大，高交互性，高用户体验。<br />“Internet”代表方便。应用程序部署方便，用户使用方便。跨系统，跨语言。</p>
		<p>其实RiA实际上一种基于Web的C/S架构（我称之为C/B/S）。由于有一个客户端，所以RiA应用可以提供强大的功能，让用户体验到高交互性，高用户体验。同时，RiA又是基于Internet浏览器的应用，所以，用户使用RiA非常方便。理想来说，用户使用RiA应当像现在使用普通网页一样方便。用户不需要安装任何的客户端软件，只要拥有浏览器。当用户通过浏览器发出指令，希望运行某种RiA应用程序时，一切都会飞快的建立在客户端机器上，就像你在Web上点击一个页面一样。</p>
		<p>目前，典型的RiA的代表有如下几种技术：<br />MS ClickOnce     <br />Sun Java Web Start<br />Adobe Flash  <br />Ajax</p>
		<p>RiA实际上代表的是一种回归。</p>
		<p>最开始流行的C/S结构，因为功能强大，而且范围有限，不需要害怕部署问题。之后随着用户的增加，部署问题越来越大，导致B/S模式的产生。<br />B/S模式虽然功能有限，但是却使用非常方便。从长期来看，方便的作用还是非常巨大的。功能可以不断增强，但是如果不方便，将吓走所有的客户。实际上观察一下Web的发展，就会发现，如今百花齐放的Web开发技术，其目的都是为了提高B/S架构的交互性，让他更能适应需要而已。<br />不过，随着目前越来越多的应用需要一直到Web上，人们终于发现B/S模式的缺点。各种技术上的硬性问题均限制着B/S模式的发展。从最基本的请求/相应模型，HTTP协议，到所有负载均运行在服务器上的事实，让我们迫切需要一种方式来提高Web的交互能力，但同时又不能丧失它的使用方便性。<br />于是，RiA诞生了。RiA就是基于浏览器的C/S结构。它将部分的服务器负载转移到客户端，同时又不会丧失使用和部署上的方便性。<br />所以说，RiA就是一次回归，只不过这次回归我们没有原地不动，相反，我们找到了最佳结合点，也就是C/S和B/S的交集。</p>
<img src ="http://www.blogjava.net/xiekai-blog/aggbug/69956.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2006-09-15 17:46 <a href="http://www.blogjava.net/xiekai-blog/archive/2006/09/15/69956.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Ant构建Java项目（续）</title><link>http://www.blogjava.net/xiekai-blog/archive/2006/08/31/66820.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Thu, 31 Aug 2006 03:42:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2006/08/31/66820.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/66820.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2006/08/31/66820.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/66820.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/66820.html</trackback:ping><description><![CDATA[这一篇讲述如何自动运行JUnit测试进行自动化测试。我们将JUnit测试放在test目录。<br /><strong>第一步：编译测试</strong><br />首先，在build.xml文件里定义一个单独的构建目标，以便编译测试源文件。<br />  <font color="#0000ff">&lt;target name="compile-tests" depends="compile"&gt;<br />    &lt;javac srcdir="${test.dir}" destdir="${build.test.dir}"&gt;<br />      &lt;classpath refid="project.classpath" /&gt;<br />    &lt;/javac&gt;<br />  &lt;/target&gt;<br /></font>compile-tests目标用&lt;javac&gt;任务在test.dir目录编译测试源文件，并将结果类文件放入build.test.dir目录，用project.classpath路径作为测试代码的类路径。<br /><strong>第二步：运行测试</strong><br />在build.xml文件里定义构建目标，使所有的JUnit测试自动运行。<br />  <font color="#0000ff">&lt;target name="test" depends="compile-tests"&gt;<br />    &lt;junit haltonfailure="true"&gt;<br />      &lt;classpath refid="project.classpath" /&gt;<br />      &lt;formatter type="brief" usefile="false" /&gt;<br />      &lt;batchtest&gt;<br />        &lt;fileset dir="${build.test.dir}" <br />          includes="**/*Test.class" /&gt;<br />      &lt;/batchtest&gt;<br />      &lt;sysproperty key="doc.dir"   value="${doc.dir}" /&gt;<br />      &lt;sysproperty key="index.dir" value="${index.dir}" /&gt;<br />    &lt;/junit&gt;<br />  &lt;/target&gt;<br /></font>test目标的depends属性生成与刚定义的compile-tests目标的依存关系。<br />如果构建成功，意味着所有的东西不仅都编译过，还都通过了测试。<br />将haltonfailure属性设为true会使构建随着任何测试失败而失败。<br />这里我们再次用project.classpath定义了运行JUnit测试的类路径。<br />下面定义了一个输出格式化器，在&lt;formatter&gt; 元素中，使用brief类型来输出每个运行的测试用例的名称及其统计信息，仅当测试失败时才有更详细的信息（plain类型默认比brief类型输出信息多一些；xml类型将测试结果以XML格式输出）。将usefile属性值设为false会将测试结果送往控制台，而不是写入文件。<br />&lt;batchtest&gt;任务收集从封闭&lt;fileset&gt;元素中返回的所有测试，并自动创建包含了所有测试的测试suite。我们将对所有的测试类用*Test.java命名约定取名，这些文件将编译成*Test.class文件，放在&lt;fileset&gt;的build.test.dir性质指向的目录中。<br />最后，&lt;sysproperty&gt;元素定义系统性质为一个键值对，这些性质可以在测试代码中访问。这里，测试需要知道从哪里找到文档，以及向哪里放入文档的索引结果，在运行测试时我们将传递这些结果，例如，测试在运行时查看送入的doc.dir系统性质来定位项目目录结构中doc目录的绝对路径。<br />要运行测试，请执行test目标：<br />$ ant test<br /><strong>最后，打扫战场<br /></strong>我们可以定义一个删除所有构建输出的Ant目标。<br />  <font color="#0000ff">&lt;target name="clean"&gt;<br />    &lt;delete dir="${build.dir}" /&gt;<br />  &lt;/target&gt;<br /></font>clean目标使用&lt;delete&gt;任务来删除build.dir所指的目录。要删除目录，请运行clean目标：<br />$ ant clean<br />冲掉这些构建输出有积极的作用：从头开始生成构建，可以发现可能被累积构建掩盖的错误。<br /><br />完整的build.xml：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml version="1.0"</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  Excerpted from the book, "Pragmatic Project Automation"<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  ISBN 0-9745140-3-9<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  Copyright 2004 The Pragmatic Programmers, LLC.  All Rights Reserved.<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  Visit www.PragmaticProgrammer.com<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">project </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="dms"</span><span style="COLOR: #ff0000"> default</span><span style="COLOR: #0000ff">="compile"</span><span style="COLOR: #ff0000"> basedir</span><span style="COLOR: #0000ff">="."</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="build.dir"</span><span style="COLOR: #ff0000">      location</span><span style="COLOR: #0000ff">="build"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="build.prod.dir"</span><span style="COLOR: #ff0000"> location</span><span style="COLOR: #0000ff">="${build.dir}/prod"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="build.test.dir"</span><span style="COLOR: #ff0000"> location</span><span style="COLOR: #0000ff">="${build.dir}/test"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="doc.dir"</span><span style="COLOR: #ff0000">        location</span><span style="COLOR: #0000ff">="doc"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="index.dir"</span><span style="COLOR: #ff0000">      location</span><span style="COLOR: #0000ff">="index"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="src.dir"</span><span style="COLOR: #ff0000">        location</span><span style="COLOR: #0000ff">="src"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="test.dir"</span><span style="COLOR: #ff0000">       location</span><span style="COLOR: #0000ff">="test"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="vendor.lib.dir"</span><span style="COLOR: #ff0000"> location</span><span style="COLOR: #0000ff">="vendor/lib"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">path </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="project.classpath"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">pathelement </span><span style="COLOR: #ff0000">location</span><span style="COLOR: #0000ff">="${build.prod.dir}"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">pathelement </span><span style="COLOR: #ff0000">location</span><span style="COLOR: #0000ff">="${build.test.dir}"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">fileset </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${vendor.lib.dir}"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">include </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="*.jar"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">fileset</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">path</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="prepare"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">mkdir </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${build.prod.dir}"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">mkdir </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${build.test.dir}"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="compile"</span><span style="COLOR: #ff0000"> depends</span><span style="COLOR: #0000ff">="prepare"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">javac </span><span style="COLOR: #ff0000">srcdir</span><span style="COLOR: #0000ff">="${src.dir}"</span><span style="COLOR: #ff0000"> destdir</span><span style="COLOR: #0000ff">="${build.prod.dir}"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">classpath </span><span style="COLOR: #ff0000">refid</span><span style="COLOR: #0000ff">="project.classpath"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">javac</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="compile-tests"</span><span style="COLOR: #ff0000"> depends</span><span style="COLOR: #0000ff">="compile"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">javac </span><span style="COLOR: #ff0000">srcdir</span><span style="COLOR: #0000ff">="${test.dir}"</span><span style="COLOR: #ff0000"> destdir</span><span style="COLOR: #0000ff">="${build.test.dir}"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">classpath </span><span style="COLOR: #ff0000">refid</span><span style="COLOR: #0000ff">="project.classpath"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">javac</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="test"</span><span style="COLOR: #ff0000"> depends</span><span style="COLOR: #0000ff">="compile-tests"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">junit </span><span style="COLOR: #ff0000">haltonfailure</span><span style="COLOR: #0000ff">="true"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">classpath </span><span style="COLOR: #ff0000">refid</span><span style="COLOR: #0000ff">="project.classpath"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">formatter </span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="brief"</span><span style="COLOR: #ff0000"> usefile</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">batchtest</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">fileset </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${build.test.dir}"</span><span style="COLOR: #ff0000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />          includes</span><span style="COLOR: #0000ff">="**/*Test.class"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">batchtest</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">sysproperty </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="doc.dir"</span><span style="COLOR: #ff0000">   value</span><span style="COLOR: #0000ff">="${doc.dir}"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">sysproperty </span><span style="COLOR: #ff0000">key</span><span style="COLOR: #0000ff">="index.dir"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="${index.dir}"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">junit</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="clean"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">delete </span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="${build.dir}"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">project</span><span style="COLOR: #0000ff">&gt;</span></div><br />下面再举一个实际项目中用到的构建文件的例子：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml version="1.0" </span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">project </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="JSBook"</span><span style="COLOR: #ff0000"> default</span><span style="COLOR: #0000ff">="compile"</span><span style="COLOR: #ff0000"> basedir</span><span style="COLOR: #0000ff">="."</span><span style="COLOR: #0000ff">&gt;<br /></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">environment</span><span style="COLOR: #0000ff">="env"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="src"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="WEB-INF/src"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="classes"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="WEB-INF/classes"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="lib"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="WEB-INF/lib"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">property </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="dist"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="dist"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">path </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="task.classpath"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">pathelement </span><span style="COLOR: #ff0000">location</span><span style="COLOR: #0000ff">="${classes}"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">pathelement </span><span style="COLOR: #ff0000">location</span><span style="COLOR: #0000ff">="${lib}"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> Tomcat 5.0.16 Servlet 2.4 API </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">pathelement </span><span style="COLOR: #ff0000">location</span><span style="COLOR: #0000ff">="${lib}/servlet-api.jar"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000"> Tomcat 5.0.16 JSP 2.0 API </span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">pathelement </span><span style="COLOR: #ff0000">location</span><span style="COLOR: #0000ff">="${lib}/jsp-api.jar"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">path</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="init"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">echo</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Init Complete !</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">echo</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">echo</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">ant home = ${ant.home} </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">echo</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">echo</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">java home = ${java.home} </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">echo</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">echo</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">user home = ${user.home} </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">echo</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">      <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="compile"</span><span style="COLOR: #ff0000"> depends</span><span style="COLOR: #0000ff">="init"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">javac </span><span style="COLOR: #ff0000">classpathref</span><span style="COLOR: #0000ff">="task.classpath"</span><span style="COLOR: #ff0000"> srcdir</span><span style="COLOR: #0000ff">="${src}"</span><span style="COLOR: #ff0000"> destdir</span><span style="COLOR: #0000ff">="${classes}"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">echo </span><span style="COLOR: #ff0000">level</span><span style="COLOR: #0000ff">="verbose"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Seen with -verbose</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">echo</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">echo </span><span style="COLOR: #ff0000">level</span><span style="COLOR: #0000ff">="debug"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Seen with -debug</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">echo</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">echo</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">Compilation Complete !</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">echo</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="war"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">jar </span><span style="COLOR: #ff0000">jarfile</span><span style="COLOR: #0000ff">="${dist}/JSPBook.war"</span><span style="COLOR: #ff0000"> basedir</span><span style="COLOR: #0000ff">="."</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">project</span><span style="COLOR: #0000ff">&gt;</span></div>    <br />也许你已经看出来了，这就是〈〈jsp2.0技术手册〉〉里面的build.xml文件啦！<img src ="http://www.blogjava.net/xiekai-blog/aggbug/66820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2006-08-31 11:42 <a href="http://www.blogjava.net/xiekai-blog/archive/2006/08/31/66820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Ant构建Java项目</title><link>http://www.blogjava.net/xiekai-blog/archive/2006/08/30/66696.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Wed, 30 Aug 2006 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2006/08/30/66696.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/66696.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2006/08/30/66696.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/66696.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/66696.html</trackback:ping><description><![CDATA[
		<p>Ant是一个开放源代码的构建工具，专门用于构建Java项目。<br />Ant入门的最容易的方法就是编写一个构建文件------build.xml。当Ant运行时，会在当前目录下寻找名为build.xml的文件。<br /><br />编写Ant构建文件：<br /><strong>第一步：定义项目(project)</strong><br />在项目根目录下创建build.xml文件。第一行指明其为XML格式，然后在第二行定义项目。<br /><font color="#0000ff">&lt;?xml version="1.0"?&gt;<br />&lt;project name="dms" default="compile" basedir="."&gt;<br /></font>一个Ant构建文件定义一个项目，使用&lt;project&gt;元素的name属性命名项目，将default属性设为compile，告诉Ant当你在命令行键入ant而无其他参数时，将执行构建过程的compile步骤。我们稍候将定义此步骤；将basedir属性设为"."，告诉Ant，该构建文件内的全部其他路径都是相对于build.xml文件所在路径而言的。<br /><strong>第二步：定义性质(property)<br /></strong>下一步，为项目的每一个目录定义性质，以便让Ant了解项目的目录结构。<br />  <font color="#0000ff">&lt;property name="build.dir"      location="build"/&gt;<br />  &lt;property name="build.prod.dir" location="${build.dir}/prod"/&gt;<br />  &lt;property name="build.test.dir" location="${build.dir}/test"/&gt;<br />  &lt;property name="doc.dir"        location="doc"/&gt;<br />  &lt;property name="index.dir"      location="index"/&gt;<br />  &lt;property name="src.dir"        location="src"/&gt;<br />  &lt;property name="test.dir"       location="test"/&gt;<br />  &lt;property name="vendor.lib.dir" location="vendor/lib"/&gt;<br /></font>location属性所指的目录相对于&lt;project&gt;元素定义的basedir属性值（基目录）。<br />使用Ant性质命名相对目录有两个优点。首先，当Ant运行构建文件时，会定位build.xml文件所在目录的全部相对目录。第二个好处是，性质可以使构建文件易于维护。例如用build.dir性质指代build目录，当以后决定更改build目录为classes时，只要修改build.dir性质的location属性值即可。在构建文件中所有引用build.dir性质的地方，都将会自动指向新的classes目录。<br /><strong>第三步：定义路径(path)<br /></strong>下面定义表示项目Java类路径的路径。<br />  <font color="#0000ff">&lt;path id="project.classpath"&gt;<br />    &lt;pathelement location="${build.prod.dir}" /&gt;<br />    &lt;pathelement location="${build.test.dir}" /&gt;<br />    &lt;fileset dir="${vendor.lib.dir}"&gt;<br />      &lt;include name="*.jar"/&gt;<br />    &lt;/fileset&gt;<br />  &lt;/path&gt;<br /></font>&lt;path&gt;元素创建路径project.classpath。我们将在构建过程的编译步骤用到此路径。<br />首先，用&lt;pathelement&gt;元素向路径加入两个构建目录，以便Java编译器可以找到所有的类文件，然后使用&lt;fileset&gt;元素，加入所有厂家.jar文件至此路径，使Java编译器可以找到我们用到的厂家类。<br /><strong>第四步：定义目标(target)<br /></strong>接着我们定义首个构建步骤------称为“目标”。该目标创建编译步骤将要存放Java类文件的目录。<br />  <font color="#0000ff">&lt;target name="prepare"&gt;<br />    &lt;mkdir dir="${build.prod.dir}"/&gt;<br />    &lt;mkdir dir="${build.test.dir}"/&gt;<br />  &lt;/target&gt;<br /></font>目标只是定义了一系列任务按照指定的顺序执行的有名字的构建步骤。prepare目标使用&lt;mkdir&gt;任务创建构建输出目录，这与在命令行上执行mkdir是等效的。但前者可以工作于任何操作系统下，不会因为目录已经存在而失败，而且必要时会创建父目录。<br /><strong>第五步：定义编译步骤<br /></strong>终于我们可以定义编译步骤了。他将编译所有的产品源文件，将结果类文件放到prepare目标所生成的目录下。<br />  <font color="#0000ff">&lt;target name="compile" depends="prepare"&gt;<br />    &lt;javac srcdir="${src.dir}" destdir="${build.prod.dir}"&gt;<br />      &lt;classpath refid="project.classpath" /&gt;<br />    &lt;/javac&gt;<br />  &lt;/target&gt;<br /></font>通过目标的depends属性，可以生成目标间的依存关系，从而指定目标顺序。该属性值是一个目标名间用逗号隔开的清单。<br />例如，compile目标使用depends属性来声明与prepare目标的依存关系，这意味着要运行compile目标必须首先运行prepare目标，以在编译源文件前生成要求的目录。与shell脚本或批处理文件总是顺序执行命令相比，这是一个很大的优点。<br />prepare目标运行后，compile目标运行&lt;javac&gt;任务，从而调用Java编译器。编译器处理src.dir性质所指目录下的全部Java源文件，在build.prod.dir性质所指目录下生成对应的类文件。<br />&lt;classpath&gt;元素告诉编译器使用project.classpath代表的值作为类路径。<br /><br />下面是完整的构建文件：</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">&lt;?</span>
				<span style="COLOR: #ff00ff">xml version="1.0"</span>
				<span style="COLOR: #0000ff">?&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #008000">&lt;!--</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  Excerpted from the book, "Pragmatic Project Automation"<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  ISBN 0-9745140-3-9<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  Copyright 2004 The Pragmatic Programmers, LLC.  All Rights Reserved.<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  Visit www.PragmaticProgrammer.com<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> </span>
				<span style="COLOR: #008000">--&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">project </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="dms"</span>
				<span style="COLOR: #ff0000"> default</span>
				<span style="COLOR: #0000ff">="compile"</span>
				<span style="COLOR: #ff0000"> basedir</span>
				<span style="COLOR: #0000ff">="."</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="build.dir"</span>
				<span style="COLOR: #ff0000">      location</span>
				<span style="COLOR: #0000ff">="build"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="build.prod.dir"</span>
				<span style="COLOR: #ff0000"> location</span>
				<span style="COLOR: #0000ff">="${build.dir}/prod"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="build.test.dir"</span>
				<span style="COLOR: #ff0000"> location</span>
				<span style="COLOR: #0000ff">="${build.dir}/test"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="doc.dir"</span>
				<span style="COLOR: #ff0000">        location</span>
				<span style="COLOR: #0000ff">="doc"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="index.dir"</span>
				<span style="COLOR: #ff0000">      location</span>
				<span style="COLOR: #0000ff">="index"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="src.dir"</span>
				<span style="COLOR: #ff0000">        location</span>
				<span style="COLOR: #0000ff">="src"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="test.dir"</span>
				<span style="COLOR: #ff0000">       location</span>
				<span style="COLOR: #0000ff">="test"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">property </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="vendor.lib.dir"</span>
				<span style="COLOR: #ff0000"> location</span>
				<span style="COLOR: #0000ff">="vendor/lib"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">path </span>
				<span style="COLOR: #ff0000">id</span>
				<span style="COLOR: #0000ff">="project.classpath"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">pathelement </span>
				<span style="COLOR: #ff0000">location</span>
				<span style="COLOR: #0000ff">="${build.prod.dir}"</span>
				<span style="COLOR: #ff0000"> </span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">pathelement </span>
				<span style="COLOR: #ff0000">location</span>
				<span style="COLOR: #0000ff">="${build.test.dir}"</span>
				<span style="COLOR: #ff0000"> </span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">fileset </span>
				<span style="COLOR: #ff0000">dir</span>
				<span style="COLOR: #0000ff">="${vendor.lib.dir}"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">include </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="*.jar"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">fileset</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">path</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">target </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="prepare"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">mkdir </span>
				<span style="COLOR: #ff0000">dir</span>
				<span style="COLOR: #0000ff">="${build.prod.dir}"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">mkdir </span>
				<span style="COLOR: #ff0000">dir</span>
				<span style="COLOR: #0000ff">="${build.test.dir}"</span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">target</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">target </span>
				<span style="COLOR: #ff0000">name</span>
				<span style="COLOR: #0000ff">="compile"</span>
				<span style="COLOR: #ff0000"> depends</span>
				<span style="COLOR: #0000ff">="prepare"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">javac </span>
				<span style="COLOR: #ff0000">srcdir</span>
				<span style="COLOR: #0000ff">="${src.dir}"</span>
				<span style="COLOR: #ff0000"> destdir</span>
				<span style="COLOR: #0000ff">="${build.prod.dir}"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span>
				<span style="COLOR: #0000ff">&lt;</span>
				<span style="COLOR: #800000">classpath </span>
				<span style="COLOR: #ff0000">refid</span>
				<span style="COLOR: #0000ff">="project.classpath"</span>
				<span style="COLOR: #ff0000"> </span>
				<span style="COLOR: #0000ff">/&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">javac</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">target</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">project</span>
				<span style="COLOR: #0000ff">&gt;</span>
		</div>
		<br />运行构建：<br />在命令行环境中，切换至build.xml所在的目录，运行Ant：<br />D:\MyProject&gt; ant<br />运行Ant前，请确认ANT_HOME环境变量指向你的Ant安装目录，且PATH环境变量中加入了%ANT_HOME%\bin。<br />Ant读取build.xml，以预先定义的顺序执行构建步骤（目标）。<img src ="http://www.blogjava.net/xiekai-blog/aggbug/66696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2006-08-30 17:36 <a href="http://www.blogjava.net/xiekai-blog/archive/2006/08/30/66696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TOMCAT创建和发布WEB应用(TOMCAT与Java Web开发技术详解 第二章 阅读笔记) </title><link>http://www.blogjava.net/xiekai-blog/archive/2006/08/22/65011.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Tue, 22 Aug 2006 03:00:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2006/08/22/65011.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/65011.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2006/08/22/65011.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/65011.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/65011.html</trackback:ping><description><![CDATA[
		<div align="center">
				<h3 class="style2" align="left">
						<font size="3">本来准备自己整理的，结果发现网上有现成的，爽，省了好多功夫，稍作修改，如下：</font>
				</h3>
				<h3 class="style2">TOMCAT 的目录结构</h3>
				<table style="MARGIN-LEFT: -10.6pt; WIDTH: 588px; HEIGHT: 1440px" cellspacing="0" cellpadding="0" width="588" bgcolor="#eaeaea" border="1">
						<tbody>
								<tr style="HEIGHT: 22.7pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 22.7pt" width="168">
												<p class="MsoNormal" style="TEXT-ALIGN: center" align="center">
														<b>
																<span style="FONT-FAMILY: 宋体">目</span>
																<span>   </span>
														</b>
														<b>
																<span style="FONT-FAMILY: 宋体">录</span>
														</b>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 22.7pt" width="362">
												<p class="MsoNormal" style="TEXT-ALIGN: center" align="center">
														<b>
																<span style="FONT-FAMILY: 宋体">描</span>
																<span>   </span>
														</b>
														<b>
																<span style="FONT-FAMILY: 宋体">述</span>
														</b>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 23.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 23.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">/bin</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 23.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">存放</span>
														<span style="FONT-SIZE: 9pt">windows</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">或</span>
														<span style="FONT-SIZE: 9pt">Linux</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">平台上启动和关闭</span>
														<span style="FONT-SIZE: 9pt">Tomcat</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">的脚本文件</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 22.8pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 22.8pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">/conf</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 22.8pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">存放</span>
														<span style="FONT-SIZE: 9pt">Tomcat</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">服务器的各种配置文件，其中最重要的是</span>
														<span style="FONT-SIZE: 9pt">server.xml</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 23.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 23.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">/server</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 23.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">包含三个子目录：</span>
														<span style="FONT-SIZE: 9pt">classes</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">、</span>
														<span style="FONT-SIZE: 9pt">lib</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">和</span>
														<span style="FONT-SIZE: 9pt">webapps</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 23.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 23.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">/server/lib</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 23.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">存放</span>
														<span style="FONT-SIZE: 9pt">Tomcat</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">服务器所需的各种</span>
														<span style="FONT-SIZE: 9pt">jar</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">文件（只能被<span style="FONT-SIZE: 9pt"><font face="Times New Roman">Tomcat</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">服务器访问）</span></span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 23.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 23.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">/server/webapps</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 23.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">存放</span>
														<span style="FONT-SIZE: 9pt">Tomcat</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">自带的两个</span>
														<span style="FONT-SIZE: 9pt">WEB</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用：</span>
														<span style="FONT-SIZE: 9pt">admin</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用和</span>
														<span style="FONT-SIZE: 9pt">manager</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 23.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 23.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">/common/lib</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 23.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">存放</span>
														<span style="FONT-SIZE: 9pt">Tomcat</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">服务器以及所有</span>
														<span style="FONT-SIZE: 9pt">web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用都可以访问的</span>
														<span style="FONT-SIZE: 9pt">jar</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">文件</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 23.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 23.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">/shared/lib</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 23.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">存放所有</span>
														<span style="FONT-SIZE: 9pt">web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用都可以访问的</span>
														<span style="FONT-SIZE: 9pt">jar</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">文件（但是不能被</span>
														<span style="FONT-SIZE: 9pt">Tomcat</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">服务器访问）</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 23.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 23.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">/logs</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 23.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">存放</span>
														<span style="FONT-SIZE: 9pt">Tomcat</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">的日志文件</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 23.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 23.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">/webapps</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 23.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">当发布</span>
														<span style="FONT-SIZE: 9pt">Web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用时，默认情况下把</span>
														<span style="FONT-SIZE: 9pt">Web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用文件放于此目录</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 22.8pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 22.8pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">/work</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 22.8pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt">Tomcat</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">把由</span>
														<span style="FONT-SIZE: 9pt">JSP</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">生成的</span>
														<span style="FONT-SIZE: 9pt">Servlet</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">放于此目录下</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 22.8pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 397.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 22.8pt" width="530" colspan="2">
												<p class="MsoNormal" style="TEXT-ALIGN: center" align="center">
														<span style="FONT-WEIGHT: bold; FONT-FAMILY: 宋体">
																<font size="4">
																		<br />
																		<font size="3">WEB应用的目录结构</font>
																		<br />
																</font>假设在</span>
														<span>
																<strong>&lt;CATALINA_HOME&gt;<span style="COLOR: blue">/webapps</span></strong>
														</span>
														<span style="FONT-WEIGHT: bold; FONT-FAMILY: 宋体">下有</span>
														<span style="FONT-WEIGHT: bold; COLOR: blue">helloapp</span>
														<span style="FONT-WEIGHT: bold; FONT-FAMILY: 宋体">的</span>
														<span>
																<strong>web</strong>
														</span>
														<span style="FONT-WEIGHT: bold; FONT-FAMILY: 宋体">应用，如下</span>
														<span style="FONT-FAMILY: 宋体">：</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 22.8pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 22.8pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">/helloapp</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 22.8pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt">Web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用的根目录，所有的</span>
														<span style="FONT-SIZE: 9pt">jsp</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">文件和</span>
														<span style="FONT-SIZE: 9pt">html</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">文件都在此目录下</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 24.3pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 24.3pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">/helloapp/WEB_INF</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 24.3pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">存放</span>
														<span style="FONT-SIZE: 9pt">web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">发布时的描述文件</span>
														<span style="FONT-SIZE: 9pt">web.xml</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 24.3pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 24.3pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">/helloapp/WEB_INF/class</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 24.3pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">存放各种</span>
														<span style="FONT-SIZE: 9pt">class</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">文件，</span>
														<span style="FONT-SIZE: 9pt">Servlet</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">文件也存放于此目录下。</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">/helloapp/WEB_INF/lib</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">存放各钟</span>
														<span style="FONT-SIZE: 9pt">Web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用所需要的</span>
														<span style="FONT-SIZE: 9pt">jar</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">文件。比如可以存放</span>
														<span style="FONT-SIZE: 9pt">JDBC</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">驱动程序的</span>
														<span style="FONT-SIZE: 9pt">JAR</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">文件</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 397.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="530" colspan="2">
												<p class="MsoNormal" style="TEXT-ALIGN: center" align="center">
														<b>
																<span>
																		<font size="4">
																				<br />
																		</font>
																		<font size="3">配置虚拟主机 <br /> ------Host</font>
																</span>
														</b>
														<b>
																<span style="FONT-FAMILY: 宋体">元素的属性</span>
														</b>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">name</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">指定虚拟主机名字</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">debug</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">指定日志级别</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">appBase</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">指定虚拟主机目录，可以是绝对目录，也可以指定相对于</span>
														<span style="FONT-SIZE: 9pt">&lt;CATALINA_HOME&gt;</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">的相对目录。如果此项没有设定则默认的是</span>
														<span style="FONT-SIZE: 9pt">&lt;CATALINA_HOME&gt;<span style="COLOR: blue">/webapps </span></span>
														<span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体">。</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">unpackWARs</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">如果此项设置为</span>
														<span style="FONT-SIZE: 9pt; COLOR: blue">true</span>
														<span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体">，</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">表示将把</span>
														<span style="FONT-SIZE: 9pt">Web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用的</span>
														<span style="FONT-SIZE: 9pt">WAR</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">文件先展开为开放目录结构后再运行。如果为</span>
														<span style="FONT-SIZE: 9pt; COLOR: blue">false</span>
														<span style="FONT-SIZE: 9pt">, </span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">则直接运行</span>
														<span style="FONT-SIZE: 9pt">WAR</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">文件</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">autoDeploy</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">如果此项设置为</span>
														<span style="FONT-SIZE: 9pt; COLOR: blue">true</span>
														<span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体">，</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">表示当</span>
														<span style="FONT-SIZE: 9pt">Tomcat</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">服务器处于运行状态时，能够监测<span style="FONT-SIZE: 9pt; COLOR: blue"><font face="Times New Roman">appBase</font><font face="Simsun" color="#000000">下的文件，</font></span></span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">如有新的</span>
														<span style="FONT-SIZE: 9pt">Web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">加入进来，则会自动发布这个</span>
														<span style="FONT-SIZE: 9pt">Web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用。</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">alias</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">指定虚拟主机的别名，可以指定多个别名。</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">deployOnStarup</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">如果此项设为</span>
														<span style="FONT-SIZE: 9pt; COLOR: blue">true，</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">则表示</span>
														<span style="FONT-SIZE: 9pt">Tomcat</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">服务器启动时会自动发布</span>
														<span style="FONT-SIZE: 9pt; COLOR: blue">appBase</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">目录下的所有</span>
														<span style="FONT-SIZE: 9pt">Web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用。如果</span>
														<span style="FONT-SIZE: 9pt">Web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用在</span>
														<span style="FONT-SIZE: 9pt; COLOR: blue">server.xml</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">中没有相应的</span>
														<span style="FONT-SIZE: 9pt">&lt;context&gt;</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">元素</span>
														<span style="FONT-SIZE: 9pt">,</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">则将采用默认的</span>
														<span style="FONT-SIZE: 9pt">Context</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">配置。</span>
														<span style="COLOR: blue">deployOnStarup</span>
														<span style="FONT-FAMILY: 宋体">的默认设置是</span>
														<span style="COLOR: blue">true</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 397.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="530" colspan="2">
												<p class="MsoNormal" style="TEXT-ALIGN: center" align="center">
														<b>
																<span>
																		<font size="4">
																				<br />
																		</font>
																		<font size="3">在server.xml中加入&lt;Context&gt;元素 <br />------Context</font>
																</span>
														</b>
														<b>
																<span style="FONT-FAMILY: 宋体">元素属性</span>
														</b>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">path</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">指定</span>
														<span style="FONT-SIZE: 9pt">Web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用的</span>
														<span style="FONT-SIZE: 9pt">URL</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">入口</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">docBase</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">指定</span>
														<span style="FONT-SIZE: 9pt">Web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用的文件路径，可以给定绝对路径，也可以是相对于</span>
														<span style="FONT-SIZE: 9pt; COLOR: blue">Host</span>
														<span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体">的</span>
														<span style="FONT-SIZE: 9pt; COLOR: blue">appBase</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">属性的相对路径（<span style="COLOR: red">参见上面</span></span>
														<span style="FONT-SIZE: 9pt; COLOR: red">Host</span>
														<span style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 宋体">的</span>
														<span style="FONT-SIZE: 9pt; COLOR: red">appBase</span>
														<span style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 宋体">属性</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">）。如果</span>
														<span style="FONT-SIZE: 9pt">Web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用采用开放目录结构，则指定</span>
														<span style="FONT-SIZE: 9pt">Web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用的</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">根目录；如果</span>
														<span style="FONT-SIZE: 9pt">Web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用是个</span>
														<span style="FONT-SIZE: 9pt; COLOR: blue">WAR</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">文件，则指定</span>
														<span style="FONT-SIZE: 9pt">WAR</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">文件的路径。</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">reloadable</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">如果为</span>
														<span style="FONT-SIZE: 9pt; COLOR: blue">true</span>
														<span style="FONT-SIZE: 9pt">,Tomcat</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">服务器在运行状态下会监视在</span>
														<span style="FONT-SIZE: 9pt; COLOR: blue">WEB-INF/class</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">和</span>
														<span style="FONT-SIZE: 9pt; COLOR: blue">WEB-INF/lib</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">下</span>
														<span style="FONT-SIZE: 9pt; COLOR: blue">class</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">文件的改动。如果检测到有</span>
														<span style="FONT-SIZE: 9pt">class</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">文件更新，服务器会自动载入</span>
														<span style="FONT-SIZE: 9pt">Web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用。</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 397.6pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="530" colspan="2">
												<p class="MsoNormal" style="TEXT-ALIGN: center" align="center">
														<b>
																<span>
																		<font size="4">
																				<br />
																				<font size="3">在web.xml中加入&lt;servlet&gt;和&lt;servlet-mapping&gt;元素</font>
																				<br />
																		</font>------&lt;servlet&gt;</span>
														</b>
														<b>
																<span style="FONT-FAMILY: 宋体">元素的属性</span>
														</b>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">&lt;servlet-name&gt;</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">定义</span>
														<span style="FONT-SIZE: 9pt">Servlet</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">的名字。</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">&lt;servlet-class&gt;</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">指定实现这个</span>
														<span style="FONT-SIZE: 9pt">Servlet</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">的类。</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">&lt;init-param&gt;</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">定义</span>
														<span style="FONT-SIZE: 9pt">Servlet</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">的初始化参数（包括参数名和参数值），一个</span>
														<span style="FONT-SIZE: 9pt">&lt;servlet&gt;</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">元素中可以有多个</span>
														<span style="COLOR: blue">&lt;init-param&gt;</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">元素。</span>
												</p>
										</td>
								</tr>
								<tr style="HEIGHT: 28.55pt">
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 126.15pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="168">
												<p class="MsoNormal">
														<span style="COLOR: blue">&lt;load-on-startup&gt;</span>
												</p>
										</td>
										<td style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: medium none; WIDTH: 271.45pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 0.5pt solid; HEIGHT: 28.55pt" width="362">
												<p class="MsoNormal">
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">指定当</span>
														<span style="FONT-SIZE: 9pt">Web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">应用启动时，装载</span>
														<span style="FONT-SIZE: 9pt">Servlet</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">的次序。当这个值为<span style="COLOR: blue">正数或零</span>，</span>
														<span style="FONT-SIZE: 9pt">Servlet</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">容器先加载数值小的</span>
														<span style="FONT-SIZE: 9pt">Servlet</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">，再依次加载其他数值大的</span>
														<span style="FONT-SIZE: 9pt">Servlet</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">。如果这个值为<span style="COLOR: blue">负数或没有设定</span>，</span>
														<span style="FONT-SIZE: 9pt">Servlet</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">将在</span>
														<span style="FONT-SIZE: 9pt">Web</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">客户首次访问这个</span>
														<span style="FONT-SIZE: 9pt">Servlet</span>
														<span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体">时加载它。</span>
												</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
<img src ="http://www.blogjava.net/xiekai-blog/aggbug/65011.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2006-08-22 11:00 <a href="http://www.blogjava.net/xiekai-blog/archive/2006/08/22/65011.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中连接Oracle数据源</title><link>http://www.blogjava.net/xiekai-blog/archive/2006/08/08/62314.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Tue, 08 Aug 2006 02:49:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2006/08/08/62314.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/62314.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2006/08/08/62314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/62314.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/62314.html</trackback:ping><description><![CDATA[本地不安装Oracle，用JAVA实现连接Oracle数据源：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">数据库服务器：lips-db        端口：</span><span style="COLOR: #000000">1521</span><span style="COLOR: #000000">        数据库名：JAVATECH<br />连接用户名：ebt        连接密码：ebt06        </span></div><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.sql.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_19_183_Open_Image" onclick="this.style.display='none'; Codehighlighter1_19_183_Open_Text.style.display='none'; Codehighlighter1_19_183_Closed_Image.style.display='inline'; Codehighlighter1_19_183_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_19_183_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_19_183_Closed_Text.style.display='none'; Codehighlighter1_19_183_Open_Image.style.display='inline'; Codehighlighter1_19_183_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_19_183_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span><span id="Codehighlighter1_19_183_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * &lt;p&gt;Title: &lt;/p&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> *<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * &lt;p&gt;Description: &lt;/p&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> *<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * &lt;p&gt;Copyright: Copyright (c) 2006&lt;/p&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> *<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * &lt;p&gt;Company: &lt;/p&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> *<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * </span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000"> not attributable<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * </span><span style="COLOR: #808080">@version</span><span style="COLOR: #008000"> 1.0<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_206_1322_Open_Image" onclick="this.style.display='none'; Codehighlighter1_206_1322_Open_Text.style.display='none'; Codehighlighter1_206_1322_Closed_Image.style.display='inline'; Codehighlighter1_206_1322_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_206_1322_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_206_1322_Closed_Text.style.display='none'; Codehighlighter1_206_1322_Open_Image.style.display='inline'; Codehighlighter1_206_1322_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Welcome </span><span id="Codehighlighter1_206_1322_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_206_1322_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> Connection getConnect() </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> SQLException<br /><img id="Codehighlighter1_275_499_Open_Image" onclick="this.style.display='none'; Codehighlighter1_275_499_Open_Text.style.display='none'; Codehighlighter1_275_499_Closed_Image.style.display='inline'; Codehighlighter1_275_499_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_275_499_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_275_499_Closed_Text.style.display='none'; Codehighlighter1_275_499_Open_Image.style.display='inline'; Codehighlighter1_275_499_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_275_499_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_275_499_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        DriverManager.registerDriver(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> oracle.jdbc.OracleDriver());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Connection conn </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> DriverManager.getConnection(<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">jdbc:oracle:thin:@lips-db:1521:javatech</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ebt</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ebt06</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> conn;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_545_1320_Open_Image" onclick="this.style.display='none'; Codehighlighter1_545_1320_Open_Text.style.display='none'; Codehighlighter1_545_1320_Closed_Image.style.display='inline'; Codehighlighter1_545_1320_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_545_1320_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_545_1320_Closed_Text.style.display='none'; Codehighlighter1_545_1320_Open_Image.style.display='inline'; Codehighlighter1_545_1320_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span id="Codehighlighter1_545_1320_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_545_1320_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_559_1199_Open_Image" onclick="this.style.display='none'; Codehighlighter1_559_1199_Open_Text.style.display='none'; Codehighlighter1_559_1199_Closed_Image.style.display='inline'; Codehighlighter1_559_1199_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_559_1199_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_559_1199_Closed_Text.style.display='none'; Codehighlighter1_559_1199_Open_Image.style.display='inline'; Codehighlighter1_559_1199_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_559_1199_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_559_1199_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            Connection conn </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Welcome.getConnect();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            Statement stmt </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> conn.createStatement();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            ResultSet rs </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> stmt.executeQuery(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">select * from tbm_student</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            ResultSetMetaData rsmd </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> rs.getMetaData();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">, n </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> rsmd.getColumnCount(); i </span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000"> n; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br /><img id="Codehighlighter1_877_1189_Open_Image" onclick="this.style.display='none'; Codehighlighter1_877_1189_Open_Text.style.display='none'; Codehighlighter1_877_1189_Closed_Image.style.display='inline'; Codehighlighter1_877_1189_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_877_1189_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_877_1189_Closed_Text.style.display='none'; Codehighlighter1_877_1189_Open_Image.style.display='inline'; Codehighlighter1_877_1189_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span id="Codehighlighter1_877_1189_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_877_1189_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                System.out.print(rsmd.getColumnName(i));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                System.out.print(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                System.out.print(rsmd.getColumnClassName(i));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                System.out.print(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                System.out.print(rsmd.getColumnTypeName(i));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                System.out.println(</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_1233_1258_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1233_1258_Open_Text.style.display='none'; Codehighlighter1_1233_1258_Closed_Image.style.display='inline'; Codehighlighter1_1233_1258_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1233_1258_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1233_1258_Closed_Text.style.display='none'; Codehighlighter1_1233_1258_Open_Image.style.display='inline'; Codehighlighter1_1233_1258_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (SQLException se) </span><span id="Codehighlighter1_1233_1258_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1233_1258_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">        }</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_1289_1314_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1289_1314_Open_Text.style.display='none'; Codehighlighter1_1289_1314_Closed_Image.style.display='inline'; Codehighlighter1_1289_1314_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1289_1314_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1289_1314_Closed_Text.style.display='none'; Codehighlighter1_1289_1314_Open_Image.style.display='inline'; Codehighlighter1_1289_1314_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (Exception ex) </span><span id="Codehighlighter1_1289_1314_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1289_1314_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>要成功运行，还需要引入classesxx.jar或者classesxx.zip：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml version="1.0" encoding="UTF-8"</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">classpath</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">classpathentry </span><span style="COLOR: #ff0000">kind</span><span style="COLOR: #0000ff">="src"</span><span style="COLOR: #ff0000"> path</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">classpathentry </span><span style="COLOR: #ff0000">kind</span><span style="COLOR: #0000ff">="con"</span><span style="COLOR: #ff0000"> path</span><span style="COLOR: #0000ff">="org.eclipse.jdt.launching.JRE_CONTAINER"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br />    </span><strong><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">classpathentry </span><span style="COLOR: #ff0000">kind</span><span style="COLOR: #0000ff">="lib"</span><span style="COLOR: #ff0000"> path</span><span style="COLOR: #0000ff">="C:/oracle/ora92/jdbc/lib/classes12.jar"</span><span style="COLOR: #0000ff">/&gt;</span></strong><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">classpathentry </span><span style="COLOR: #ff0000">kind</span><span style="COLOR: #0000ff">="output"</span><span style="COLOR: #ff0000"> path</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">classpath</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span></div><img src ="http://www.blogjava.net/xiekai-blog/aggbug/62314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2006-08-08 10:49 <a href="http://www.blogjava.net/xiekai-blog/archive/2006/08/08/62314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE中的EJB和EJB Container</title><link>http://www.blogjava.net/xiekai-blog/archive/2006/08/04/61695.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Fri, 04 Aug 2006 03:41:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2006/08/04/61695.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/61695.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2006/08/04/61695.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/61695.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/61695.html</trackback:ping><description><![CDATA[J2EE中两种主要容器(Container)<br />1 Servlet/JSP Container<br />2 EJB Container<br /><br />EJB究竟是什么？说一个不很恰当的比喻，EJB就像你,一个公司做软件开发工作的员工。你是EJB，公司就是EJBContainer. 公司(Container) 负责与外界打交道，比如销售商，客户，工商，税务，银行等等。你(EJB)就可以专心做软件开发。公司(Container)还负责员工(EJB)之间的协调。当然了公司和员工是双向选择的。EJB和Container也是这样。所以J2EE&amp;Container&amp;EJB不是突发奇想,也不是天外来客，就是我们.............. <br /><br />下面是网上copy的一些名词定义，比较晦涩，希望大家踊跃给出更形象生动而又不失准确的定义。<br /><br /><font face="Arial" size="2">EJB <br />　　Enterprise JavaBeans，Java中用于开发企业级应用的技术标准，他定义了一个用于开发和发布可重用的服务器端组件的模型，包括Session beans，Entity beans以及Message-driven beans三种。</font><br /><font size="2"><font face="Arial"><br />Container 容器 <br />　　一个为组件提供生命周期管理，安全，配置，和运行时服务的实体。每一个类型的容器（EJB, Web, JSP, servlet, applet, 和application client）也会提供各自组件相关的服务<br /></font><br /><font face="Arial">servlet container <br />　　一个提供网络服务的容器，通过它，请求和应答被传送，请求被解码，应答被格式化。所有的servlet container必须支持HTTP协议的请求和应答，也可以支持其它的请求应答型协议比如HTTPS。 <br /><br />JSP container <br />　　一个提供和servlet容器同样服务的容器和一个把JSP页面转换成servlet的引擎。<br /><br />EJB container EJB容器 <br />　　一个实现了J2EE体系结构中EJB组件规范的容器。这个规范指定了一个Enterprise bean的运行时环境，包括安全，一致性，生命周期，事务，配置，和其他的服务。一个EJB容器可以由EJB或者J2EE服务器提供。<br /></font><br /><font face="Arial">Web container <br />　　实现J2EE体系结构中Web组件协议的容器。这个协议规定了一个Web组件运行时的环境，包括安全，一致性，生命周期管理，事务，配置和其它的服务。一个提供和JSP和J2EE平台APIs界面相同服务的容器。一个Web container 由Web服务器或者J2EE服务器提供。</font><br /><br /><br /></font><img src ="http://www.blogjava.net/xiekai-blog/aggbug/61695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2006-08-04 11:41 <a href="http://www.blogjava.net/xiekai-blog/archive/2006/08/04/61695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TOMCAT简介(TOMCAT与Java Web开发技术详解 第一章 阅读笔记)</title><link>http://www.blogjava.net/xiekai-blog/archive/2006/07/12/57787.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Wed, 12 Jul 2006 05:18:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2006/07/12/57787.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/57787.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2006/07/12/57787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/57787.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/57787.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt">
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Tomcat</span>
				<span lang="ZH-CN" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">服</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: Century">务</span>
				<span lang="ZH-CN" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">器是一个</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Servlet/Jsp</span>
				<span lang="ZH-CN" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">容器</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">.</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">不但支持运行</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Servlet</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">和</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Jsp</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">,</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">还具备作为商业</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Java Web</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">应用容器的特性</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">,</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">如</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Tomcat</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">管理和控制平台</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">,</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">安全域管理</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">,</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Tomcat</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">阀等</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt">
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt">
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Tomcat</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">作为</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Servlet</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">容器</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">,</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">负责把客户请求传送给</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Servlet</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">并把响应结果返回给客户</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">.</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">当客户请求某个</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Servlet</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">时</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">,</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Servlet</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">容器将首先创建一个</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">ServletRequest</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">对象和</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">ServletResponse</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">对象</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">(</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">在</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">ServletRequest</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">对象中封装了客户请求信息</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">),</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">然后</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Servlet</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">容器把</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">ServletRequest</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">对象和</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">ServletResponse</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">对象传给客户所请求的</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Servlet</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">,</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Servlet</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">把响应结果写到</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">ServletResponse</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">中</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">,</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">最后由</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Servlet</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">容器把响应结果传给客户</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">.<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt">
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">
						<o:p> </o:p>
				</span>
		</p>
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">Tomcat</span>
		<span lang="ZH-CN" style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">的结构</span>
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">:</span>
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">Tomcat</span>
		<span lang="ZH-CN" style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">服务器由一系列可配置的组件构成</span>
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">.</span>
		<span lang="ZH-CN" style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">这些组件在</span>
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">&lt;CATALINA_HOME&gt;</span>
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">/</span>
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">conf/server.xml</span>
		<span lang="ZH-CN" style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">文件中进行配置</span>
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">,</span>
		<span lang="ZH-CN" style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">每个</span>
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">Tomcat</span>
		<span lang="ZH-CN" style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: SimSun; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">组件在</span>
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">server.xml</span>
		<span lang="ZH-CN" style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">文件中对应一种配置元素</span>
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">.<br /></span>
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">server.xml</span>
		<span lang="ZH-CN" style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">的结构如下</span>
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">:<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">Server</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">Service</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">Connector</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">Engine</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">Host</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">Context</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />        </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">Context</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />      </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">Host</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />    </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">Engine</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />  </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">Service</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">Server</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /></span></div></span>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt">
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">所有配置元素分为</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">4</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">类</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">:<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">
						<span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">     </span></span>
				</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">顶层类元素</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">:</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">&lt;</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Server&gt;</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">元素和</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">&lt;Service&gt;</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">元素</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">.</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">
						<span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">     </span></span>
				</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">连接器类元素</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">:</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">&lt;Connector/&gt;</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">,</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">客户与服务器之间的通信接口</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">.</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">
						<span style="mso-list: Ignore">3.<span style="FONT: 7pt 'Times New Roman'">     </span></span>
				</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">容器类元素</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">:</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">&lt;Engine&gt; </span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">&lt;Host&gt;</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">
				</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">&lt;Context&gt;</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">,</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">用于处理客户请求</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">.</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">
						<span style="mso-list: Ignore">4.<span style="FONT: 7pt 'Times New Roman'">     </span></span>
				</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">嵌套类元素</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">: </span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">如</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">&lt;</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Logger&gt; &lt;Valve&gt; &lt;Realm&gt;,</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">代表可以加入到容器中的组件</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">.<br /></span>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #000000">&lt;Server&gt;元素:<br />代表整个Catalina Servlet容器</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000"> &lt;Server&gt;元素可以包含一个或多个&lt;Service&gt;元素.<br />&lt;Service&gt;元素:<br />  包含一个&lt;Engine&gt;元素</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">以及一个或多个&lt;Connector/&gt;元素</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">这些&lt;Connector/&gt;元素共享一个&lt;Engine&gt;元素.<br />&lt;Connector/&gt;元素:<br />  代表和客户实际交互的组件</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">负责接收客户请求</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">以及向客户返回响应结果.<br />&lt;Engine&gt;元素:<br />  每个&lt;Service&gt;元素只能包含一个&lt;Engine&gt;元素. &lt;Engine&gt;元素处理在同一个&lt;Service&gt;元素中所有&lt;Connector/&gt;元素接收到的客户请求.<br />&lt;Host&gt;元素:<br />  一个&lt;Engine&gt;元素可以包含多个&lt;Host&gt;元素</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">每个&lt;Host&gt;元素定义了一个虚拟主机</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">它可以包含一个或多个web应用.<br />&lt;Context&gt;元素:<br />  每个&lt;Context&gt;元素代表了运行在虚拟主机上的单个web应用.一个&lt;Host&gt;元素可以包含多个&lt;Context&gt;元素.<br /></span>
		</div>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt">
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN">Tomcat</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'">各个组件间的嵌套关系如下图所示</span>
				<span lang="EN-US" style="FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun">:<br /><img height="305" alt="o_Tomcata.bmp" src="http://www.blogjava.net/images/blogjava_net/xiekai-blog/12690/o_Tomcata.bmp" width="568" border="0" /><br /><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">Tomcat</span><span lang="ZH-CN" style="FONT-SIZE: 10.5pt; FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-ascii-font-family: 'ＭＳ 明朝'; mso-hansi-font-family: 'ＭＳ 明朝'; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">各个组件间响应客户请求的过程如下图所示</span><span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'ＭＳ 明朝'; mso-fareast-language: ZH-CN; mso-fareast-font-family: SimSun; mso-bidi-font-size: 12.0pt; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">:<br /><img height="244" alt="o_Tomcatb.bmp" src="http://www.blogjava.net/images/blogjava_net/xiekai-blog/12690/o_Tomcatb.bmp" width="568" border="0" /><br /></span></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt">
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-font-family: 'ＭＳ 明朝'; mso-bidi-font-family: SimSun">
						<br />Tomcat</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">的工作模式</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">.<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">
						<span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">     </span></span>
				</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">独立的</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-fareast-font-family: 'ＭＳ 明朝'; mso-bidi-font-family: SimSun">Servlet</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">容器</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">.(</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-fareast-font-family: 'ＭＳ 明朝'; mso-bidi-font-family: SimSun">Tomcat</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">的默认工作模式</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">)<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">
						<span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">     </span></span>
				</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">进程内的</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-fareast-font-family: 'ＭＳ 明朝'; mso-bidi-font-family: SimSun">Servlet</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">容器</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">.(</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">与其它</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-fareast-font-family: 'ＭＳ 明朝'; mso-bidi-font-family: SimSun">Web</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">服务器集成</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">)<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">
						<span style="mso-list: Ignore">3.<span style="FONT: 7pt 'Times New Roman'">     </span></span>
				</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">进程外的</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-fareast-font-family: 'ＭＳ 明朝'; mso-bidi-font-family: SimSun">Servlet</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">容器</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">.(</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">与其它</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-fareast-font-family: 'ＭＳ 明朝'; mso-bidi-font-family: SimSun">Web</span>
				<span lang="ZH-CN" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">服务器集成</span>
				<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">)<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0mm 0mm 0pt">
				<o:p>
				</o:p>
		</p>
		<span lang="EN-US" style="FONT-FAMILY: SimSun; mso-fareast-language: ZH-CN; mso-bidi-font-family: SimSun">
				<o:p>
						<br />Servlet容器响应Web客户请求流程的URL时序图，如下：<br /><img height="639" alt="o_servlet32.bmp" src="http://www.blogjava.net/images/blogjava_net/xiekai-blog/12690/o_servlet32.bmp" width="716" border="0" /></o:p>
		</span>
<img src ="http://www.blogjava.net/xiekai-blog/aggbug/57787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2006-07-12 13:18 <a href="http://www.blogjava.net/xiekai-blog/archive/2006/07/12/57787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP与Servlet(1) - 第一个servlet</title><link>http://www.blogjava.net/xiekai-blog/archive/2006/07/03/56316.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Mon, 03 Jul 2006 05:40:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2006/07/03/56316.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/56316.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2006/07/03/56316.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/56316.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/56316.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 什么是servlet ?														一个														servlet												就是														Java												编						程						语						言中的一个						类						,																									...&nbsp;&nbsp;<a href='http://www.blogjava.net/xiekai-blog/archive/2006/07/03/56316.html'>阅读全文</a><img src ="http://www.blogjava.net/xiekai-blog/aggbug/56316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2006-07-03 13:40 <a href="http://www.blogjava.net/xiekai-blog/archive/2006/07/03/56316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse + Tomcat + Eclipse 开发struts应用</title><link>http://www.blogjava.net/xiekai-blog/archive/2006/06/30/55957.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Fri, 30 Jun 2006 06:34:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2006/06/30/55957.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/55957.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2006/06/30/55957.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/55957.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/55957.html</trackback:ping><description><![CDATA[在MyEclipse环境下开发struts,网上已经有很多很详细的叙述,今天弄了一个上午,终于成功地将一个登录认证程序实现了.感觉还是比较简单的,但还是遇到了一些问题,花费了不少时间,小结一下:<br /><br />1.要注意struts1.1和struts1.2这两个不同的版本.因为是开源的,版本变动有时候会很大,如果对其不了解,很容易在开发中遇到各种奇怪的问题.常见的是使用&lt;html:errors/&gt;标签引起的错误.<br />如果是struts1.2,在Action或者Form的validate中可以这样写:<br /><font size="1">ActionErrors errors = new ActionErrors();<br />if(......){<br />errors.add("name", new <font color="#ff0000">ActionMessage</font>("error"));<br />}<br /></font><font size="3">如果是struts1.1,则必须将</font><font color="#ff0000" size="1">ActionMessage<font color="#000000" size="3">改为ActionError.<br /><br />2.在MyEclipse配置项中有一项叫作Validation,默认设置如下图所示:<br /><img height="480" alt="r_b.bmp" src="http://www.blogjava.net/images/blogjava_net/xiekai-blog/12690/r_b.bmp" width="570" border="0" /><br />因此在我写好JSP,编译后,发现代码行的左边有好几个红叉叉,可是代码又能正常运行,如下图:<br /><img height="443" alt="r_a.bmp" src="http://www.blogjava.net/images/blogjava_net/xiekai-blog/12690/r_a.bmp" width="640" border="0" /><br />不知道这个Validation有什么作用,到底做的是怎样的代码检查我也不清楚,如有知道的,还望不吝赐教.<br /><br /></font></font><img src ="http://www.blogjava.net/xiekai-blog/aggbug/55957.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2006-06-30 14:34 <a href="http://www.blogjava.net/xiekai-blog/archive/2006/06/30/55957.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关注 struts, jsf,  甚至ajax</title><link>http://www.blogjava.net/xiekai-blog/archive/2006/06/28/55594.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Wed, 28 Jun 2006 10:59:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2006/06/28/55594.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/55594.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2006/06/28/55594.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/55594.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/55594.html</trackback:ping><description><![CDATA[
		<p>MVC结构到今天，已经到了顶峰。<br /><br />在2000年初诞生的Struts以及其他类似的 MVC(Model View Controler)框架主要都是以操作为中心，且都是无状态的开发模型，而现在，基于组件(component-based)和事件驱动(event- driven)的开发模型逐渐流行起来，在很多时候都成了Struts的有利竞争者，这其中来自jcp的JavaServer Faces(JSF)以及来自apache的Tapestry是其中的佼佼者。<br /><br />struts也好 类似的webwork也好，尽管其有一定的优势，但不可避免的要衰亡，但谁来代替它们？<br />jsf？tapestry？甚至ajax？</p>
		<p>现在很难说。<br />jsf在各大家的支持下，正在茁壮成长，tapestry还没有看到成为主流的迹象，ajax虽然热火，但还不是非常成熟。</p>
		<p>就目前趋势看,感觉jsf将会成为主流。<br /><br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #000000">Ajax基础教程  <br /><br />   ajax入门推荐书籍.书中讲解了ajax出现得背景</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">相关得技术.最有价值得是书中   第5章  构建完备的Ajax开发工具箱  第6章  使用JsUnit测试JavaScript代码  第7章  分析JavaScript调试工具和技术 这三章花25块钱也值了.<br />   该书定位很准</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">对高级知识没有讲解</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">只为入门.<br /><br />   推荐指数:  4星. <br />   推荐理由: 绝对最好的入门书籍</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">尤其是把最先进的ajax开发方式介绍给大家.<br /></span>
		</div>
<img src ="http://www.blogjava.net/xiekai-blog/aggbug/55594.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2006-06-28 18:59 <a href="http://www.blogjava.net/xiekai-blog/archive/2006/06/28/55594.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用 JSF 架构进行设计(转载)</title><link>http://www.blogjava.net/xiekai-blog/archive/2006/06/28/55586.html</link><dc:creator>小言身寸</dc:creator><author>小言身寸</author><pubDate>Wed, 28 Jun 2006 10:21:00 GMT</pubDate><guid>http://www.blogjava.net/xiekai-blog/archive/2006/06/28/55586.html</guid><wfw:comment>http://www.blogjava.net/xiekai-blog/comments/55586.html</wfw:comment><comments>http://www.blogjava.net/xiekai-blog/archive/2006/06/28/55586.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiekai-blog/comments/commentRss/55586.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiekai-blog/services/trackbacks/55586.html</trackback:ping><description><![CDATA[Anand Prakash Joshi , 软件工程师, IBM<br /><p></p><p>2006 年 1 月 04 日</p><blockquote>本文中，作者 Anand Joshi 使用 JSF 框架中的设计模式阐释了 JavaServer™ Faces (JSF) 体系结构。他讨论了 JSF 体系结构中使用的 GoF 设计模式，以及这些模式在 JSF 框架 中的作用。任何对设计模式和 JSF 体系结构有一定了解的人都能从 Anand 详细的介绍中有所收获。*读者应该对 GoF 设计模式和 JSF 技术有 很好的了解。</blockquote><p>设计模式可以帮助用户在更高层次上抽象细节，更好地理解体系结构。如果比较熟悉 GoF 设计模式和 JavaServer Faces (JSF) 框架，本文可以帮助您洞察 JSF 框架中使用的设计模式，深入理解其工作原理。</p><p>本文探讨了 JSF 框架中使 用的设计模式。详细讨论的设计模式包括 Singleton、Model-View-Controller、Factory Method、State、Composite、Decorator、Strategy 、Template Method 和 Observer 模式。 </p><p><a name="IDAKCS3"><span class="atitle"><font face="Arial" color="#333366">设计模式和 JavaServer Faces (JSF) 技术 </font></span></a></p><p>首先简要地介绍一下模式和 JSF 框架。</p><ul><li><b>模式。</b>设计模式是对问题和解决方案进行抽象的普遍适用的 方法。因为模式是所有开发人员和架构师公认的，所以模式可以节约时间和资源。用外行话来说，模式就是关于某个人所共知的问题的经过验 证的解决方案。模式可以重用，重用使得解决方案更健壮。 
</li><li><b>Java Server Faces。</b> JSF 体系结构是一种 Web 应用程序框架。 它是 Java Community Process (JCP) 推动的，有望成为 Web 应用程序开发的标准框架。目前用于开发 Web 应用程序的框架有 50 多个，这 说明迫切需要实现框架的标准化，这正是 JSF 框架的目标！</li></ul><br /><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /></td></tr></tbody></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tbody><tr align="right"><td><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td valign="center"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td><td valign="top" align="right"><a class="fbox" href="http://gocom.primeton.com/modules/techresource/article388.htm#main"><b></b></a></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a name="IDAXCS3"><span class="atitle"><font face="Arial" color="#333366">深入剖析 JSF 模式</font></span></a></p><p>现在我们来讨论 JSF 体系结构中的各种设计模式。本文将详细讨论 Singleton、Model-View-Controller、 Factory Method、State、Composite、Decorator、Strategy、Template Method 和 Observer 设计模式。我将分析每种模式的用途及其在 JSF 框架中的作用。</p><br /><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /></td></tr></tbody></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tbody><tr align="right"><td><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td valign="center"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td><td valign="top" align="right"><a class="fbox" href="http://gocom.primeton.com/modules/techresource/article388.htm#main"><b></b></a></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a name="IDA3CS3"><span class="atitle"><font face="Arial" color="#333366">Singleton 模式</font></span></a></p><p>Singleton 模式的目的是保证类只有一个实例被加载，该实例提 供一个全局访问点。当启动具有 JSF 支持的 Web 应用程序时，Web 容器初始化一个 FacesServlet 实例。在这个阶段，FacesServlet 对每个 Web 应用程序实例化 Application 和 LifeCycle 实例一次。这些实例就采用众所周知的 Singleton 模式，通常只需要该类型的一个实例。 </p><p>使用 JSF 的 Web 应用程序只需要 Application 和 LifeCycle 类的一个实例。LifeCycle 管理多个 JSF 请求的整个生命期。因为其 状态和行为在所有请求之间共享，这些对象采用 Singleton 模式合情合理。LifeCycle 维护的 PhaseListeners 也是 Singleton 模式的。 PhaseListeners 由所有 JSF 请求共享。在 JSF 框架中可以广泛使用 Singleton 模式，以减少内存占用和提供对象的全局访问。 NavigationHandler（用于确定请求的逻辑结果）和 ViewHandler（用于创建视图）也是使用 Singleton 模式的例子。</p><br /><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /></td></tr></tbody></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tbody><tr align="right"><td><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td valign="center"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td><td valign="top" align="right"><a class="fbox" href="http://gocom.primeton.com/modules/techresource/article388.htm#main"><b></b></a></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a name="IDAEDS3"><span class="atitle"><font face="Arial" color="#333366">Model-View-Controller (MVC)</font></span></a></p><p>MVC 模式的目的是从数据表示（View）中将数据（ 即 Model）分离出来。如果应用程序有多种表示，可以仅替换视图层而重用控制器和模型代码。类似的，如果需要改变模型，可以在很大程度 上不改变视图层。控制器处理用户动作，用户动作可能造成模型改变和视图更新。当用户请求一个 JSF 页面时，请求发送到 FacesServlet。 FacesServlet 是 JSF 使用的前端控制器 servlet。和其他很多 Web 应用程序框架一样，JSF 使用 MVS 模式消除视图和模型之间的耦合。为 了集中处理用户请求，控制器 servlet 改变模型并将用户导航到视图。</p><p>FacesServlet 是 JSF 框架中所有用户请求都要经过的控制器 元素。FacesServlet 分析用户请求，使用托管 bean 对模型调用各种动作。后台（backing）或托管（managed）bean 就是该模型的例子。JSF 用户界面（UI）组件是视图层的例子。MVC 模式把任务分解给具有不同技能的开发人员，使这些任务能够同时进行，这样 GUI 设计人员就可以 使用丰富的 UI 组件创建 JSF 页面，同时后端开发人员可以创建托管 bean 来编写专门的业务逻辑代码。</p><br /><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /></td></tr></tbody></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tbody><tr align="right"><td><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td valign="center"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td><td valign="top" align="right"><a class="fbox" href="http://gocom.primeton.com/modules/techresource/article388.htm#main"><b></b></a></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a name="IDALDS3"><span class="atitle"><font face="Arial" color="#333366">Factory Method 模式</font></span></a></p><p>Factory Method 模式的目的是定义一个用于创建对象的接口，但是把对象实例化推迟到子类中。在 JSF 体系 结构中，Factory Method 模式被用于创建对象。LifeCycleFactory 是一个创建和返回 LifeCycle 实例的工厂对象。LifeCycleFactory 的 getLifeCycle (String LifeCycleId) 方法采用 Factory Method 模式，根据 LifeCycleId 创建（如果需要）并返回 LifeCycle 实例。自定 义的 JSF 实现可以重新定义 getLifeCycle 抽象方法来创建自定义的 LifeCycle 实例。默认的 JSF 实现提供默认的 LifeCycle 实例。此外 ，对于每个 JSF 请求，FacesServlet 都从 FacesContextFactory 得到 FacesContext。FacesContextFactory 是一个抽象类，公开了 getFacesContext API，JSF 实现提供了 FacesContextFactory 和 getFacesContext API 的具体实现。这是另外一个使用 Factory Method 模 式的例子，具体的 FacesContextFactory 实现创建 FacesContext 对象。</p><br /><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /></td></tr></tbody></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tbody><tr align="right"><td><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td valign="center"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td><td valign="top" align="right"><a class="fbox" href="http://gocom.primeton.com/modules/techresource/article388.htm#main"><b></b></a></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a name="IDARDS3"><span class="atitle"><font face="Arial" color="#333366">State 模式 </font></span></a></p><p>State 模式的目的是在表示状态的不同类之间分配与状态有关的逻辑。FacesServlet 对 LifCycle 实例调用 execute 和 render 方法。LifeCycle 协调不同的 Phrase 以便执行 JSF 请求。在这里 JSF 实现就遵循了 State 模式。如果没有使用这种模式， LifeCycle 实现就会被大量的条件（即 “if” 语句）搅得一塌糊涂。JSF 实现为每个状态（或阶段）创建单独的类并调用 step。phase 是一 个抽象类，定了每个 step 的公共接口。在 JSF 框架中定义了六个 phrase（即 step）：RestoreViewPhase、ApplyRequestValues、 ProcessValidationsPhase、UpdateModelValuesPhase、InvokeApplicationPhase 和 RenderResponsePhase。</p><p>在 State 模式中， LifeCycle 把 FacesContext 对象传递给 phase。每个阶段或状态改变传递给它的上下文信息，然后设置 FacesContext 本身中的标志表明下 一个可能的步骤。JSF 实现在每个步骤中改变其行为。每个阶段都可以作为下一个阶段的起因。FacesContext 有两种标志 renderResponse 和 responseComplete 可以改变执行的顺序。每个步骤执行完成后，LifeCycle 检查上一阶段是否设置了这些标志。如果设置了 responseComplete，LifeCycle 则完全放弃请求的执行。如果经过某个阶段后设置了 renderResponse 标志，JSF 就会跳过剩下的阶段而直接 进入 Render Response 阶段。如果这两个标志都没有设置，LifeCycle 就会按顺序继续执行下一步。</p><br /><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /></td></tr></tbody></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tbody><tr align="right"><td><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td valign="center"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td><td valign="top" align="right"><a class="fbox" href="http://gocom.primeton.com/modules/techresource/article388.htm#main"><b></b></a></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a name="IDAYDS3"><span class="atitle"><font face="Arial" color="#333366">Composite 模式</font></span></a></p><p>Composite 模式让客户代码能够统一处理复合对象和基本对象。复合对象是基本对象的容器。在第一阶段（Restore View 阶段）和最后一个阶段（Render Response 阶段），使用 JSF UI 组件构造 UI View。UIComponentBase 就是 Composite 模式中 Component 抽象类的一个例子。UIViewRoot 是 Composite 类，而 UIOutput（比方说）就是叶子（或者基本类）。UIComponentBase 类定义了 叶子和复合对象的公共方法，如编码/解码值和子节点管理函数。子节点管理函数，如 getChildren，对于叶子节点返回空列表，对于复合节点 则返回其子节点。</p><p><br /><hidden name="N/A"><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /></td></tr></tbody></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tbody><tr align="right"><td><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td valign="center"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td><td valign="top" align="right"><a class="fbox" href="http://gocom.primeton.com/modules/techresource/article388.htm#main"><b></b></a></td></tr></tbody></table></td></tr></tbody></table><br /><br /></hidden></p><p><a name="IDA4DS3"><span class="atitle"><font face="Arial" color="#333366">Decorator 模式</font></span></a></p><hidden name="N/A"><p>Decorator 模式的目的是不通过子类化动态扩展对象的行为。JSF 框架有很多扩展点（即可插入机制）。JSF 实现可使用 Decorator 模式替换默认的 PropertyResolver、VariableResolver、ActionListener 、NavigationHandler、ViewHandler 或 StateManager。通常自定义实现接受通过构造函数传递给它的默认实现的引用。自定义实现仅仅改写 功能的一个子集，而将其他功能委托给默认实现。如果希望实现自定义的 ViewHandler，改写默认 ViewHandler 实现的 calculateLocale 方 法，可以像 <a href="http://gocom.primeton.com/modules/techresource/article388.htm#code1"><font face="Arial" color="#333366">清单 1</font></a> 那样编写 <code>CustomViewHandler</code> 类：<br /><a name="code1"><b><font face="Arial" color="#333366">清单 1. CustomViewHandler 片段</font></b></a><br /></p><table cellspacing="0" cellpadding="5" width="100%" bgcolor="#eeeeee" border="1"><tbody><tr><td><pre><code class="section">
public class CustomViewHandler extends ViewHandler {
 public CustomViewHandler(ViewHandler handler) {
		 super();
		 oldViewHandler = handler;
 }
private ViewHandler oldViewHandler  = null;
public void renderView (facesContext context, UIViewRoot view) {
            //delegate method to oldViewHandler
		 oldViewHandler.renderView(context, view);
}
//custom implementation of calculateLocale
public Locale calculateLocale(FacesContext context) {
}
}
</code></pre></td></tr></tbody></table><br /><p><br /></p><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /></td></tr></tbody></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tbody><tr align="right"><td><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td valign="center"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td><td valign="top" align="right"><a class="fbox" href="http://gocom.primeton.com/modules/techresource/article388.htm#main"><b></b></a></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a name="IDAVES3"><span class="atitle"><font face="Arial" color="#333366">Strategy 模式</font></span></a></p><p>Strategy 模式的目的是封装不同的概念。JSF 框 架采用 Strategy 模式使用委托实现模型呈现 UI 组件。JSF 技术支持两种呈现模型。在直接实现模型中，UI 组件对收到的请求中的数据进行 解码，然后编码这些数据进行显示。在委托实现模型中，解码和编码操作委托给和组建关联的专门呈现器。后一种模型利用了 Strategy 设计 模式，比直接实现更灵活。在 Strategy 模式中，将不同的算法封装在单独的对象中，从而可以动态地改变算法。JSF 实现可以用已有的 renderkit 实例注册另外的呈现器，当应用程序启动的时候，JSF 实现读取配置文件将这些呈现器和 UI 组件联系在一起。</p><p><br /></p><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /></td></tr></tbody></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tbody><tr align="right"><td><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td valign="center"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td><td valign="top" align="right"><a class="fbox" href="http://gocom.primeton.com/modules/techresource/article388.htm#main"><b></b></a></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a name="IDA1ES3"><span class="atitle"><font face="Arial" color="#333366">Template Method 模式</font></span></a></p><p>Template Method 模式的目的是将变化的步骤推迟到子类 中，而在父类中定义那些固定的算法步骤。JSF 框架通过 PhraseListeners 展现了 Template Method 模式提供的功能。采用 Template Method（或者 “hook”）使得 Web 作者可以为不同阶段之间的可选步骤提供实现，而主要阶段仍然和 JSF 框架的定义一致。JSF 框架提供了 PhaseListeners，概念上类似于 Template Method 模式中的可变步骤。JSF 框架有六个预定义的阶段，在每个阶段之间，Web 作者可以实现 PhaseListeners 来提供类似于 Template Method hook 的 hook。事实上，这种结构比 Template Method 模式更具有扩展性。可以通过注册 PhraseId 为 ANY_PHRASE 的 PhaseListener 在每个阶段后提供 hook。如果 PhaseId 是 ANY_PHASE，JSF 实现就会在每个阶段之前和之后调 用该 PhaseListener。JSF 框架中的实现略有不同，因为可以根本没有 PhaseListener，但是在 Template Method 模式中，子类通常重新定义 父类中抽象的可变步骤。</p><p><br /></p><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /></td></tr></tbody></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tbody><tr align="right"><td><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td valign="center"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td><td valign="top" align="right"><a class="fbox" href="http://gocom.primeton.com/modules/techresource/article388.htm#main"><b></b></a></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a name="IDABFS3"><span class="atitle"><font face="Arial" color="#333366">Observer 模式</font></span></a></p><p>Observer 模式的目的是当目标对象的状态改变时自动通知所有依 赖的对象（即观察器）。JSF 在 UI 组件中实现了 Observer 模式。JSF 有两类内建事件：ActionEvent 和 ValueChangedEvent。ActionEvent 用于确定用户界面组件（如按钮）的激活。当用户单击按钮时，JSF 实现通知添加到该按钮上的一个或多个动作监听程序。于是该按钮被激活 ，或者说按钮（主体）的状态改变了。添加到按钮上的所有监听程序（即观察器）都收到通知该主体状态已经改变。类似的，当输入 UI 组件 中的值改变时，JSF 实现通知 ValueChangeListener。</p><p><br /></p><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /></td></tr></tbody></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tbody><tr align="right"><td><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td valign="center"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td><td valign="top" align="right"><a class="fbox" href="http://gocom.primeton.com/modules/techresource/article388.htm#main"><b></b></a></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a name="IDAHFS3"><span class="atitle"><font face="Arial" color="#333366">结束语 </font></span></a></p><p>JSF 框架利用了 Singleton、Model-View-Controller、Factory Method、State、Composite、Decorator、Strategy、 Template Method 和 Observer 设计模式。因为它的体系结构建立在已经验证的设计模式的基础上，这是一个健壮的框架，模式在 JSF 框架中 得到了很好的利用。 </p><p><br /></p><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /></td></tr></tbody></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tbody><tr align="right"><td><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td valign="center"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td><td valign="top" align="right"><a class="fbox" href="http://gocom.primeton.com/modules/techresource/article388.htm#main"><b></b></a></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a name="resources"><span class="atitle"><font face="Arial" color="#333366">参考资料 </font></span></a></p><p><b>学习</b><br /></p><ul><li>您可以参阅本文在 developerWorks 全球站 点上的 <a href="http://www-128.ibm.com/developerworks/java/library/wa-dsgnpatjsf.html" target="_blank"><font face="Arial" color="#333366">英文原文</font></a>。<br /><br /></li><li>请访问 <a href="http://www.tml.tkk.fi/~pnr/Tik-76.278/gof/html/"><font face="Arial" color="#333366">Gang of Four Design Patterns</font></a> 进一步了解这些设计模式。 <br /><br /></li><li>请阅读 “<a href="http://gocom.primeton.com/developerworks/cn/java/j-jsf2/"><font face="Arial" color="#333366">怀疑论者的 JSF: JSF 应用程序的生命周期</font></a>” 进一步了解 JavaServer Faces 框架（developerWorks，2005 年 3 月）。 <br /><br /></li><li>请访问 developerWorks <a href="http://www.ibm.com/developerworks/cn/java"><font face="Arial" color="#333366">Java 技术专区</font></a>。这里专门发 表各种基于 Web 和 Java 的解决方案的文章和教程。<br /><br /></li></ul><p><br /><b>获得产品和技术</b><br /></p><ul><li>从 Sun Developer Network 免费 <a href="http://java.sun.com/j2ee/javaserverfaces/download.html"><font face="Arial" color="#333366">下载 JSF</font></a>。 <br /><br /></li><li>下载 <a href="http://www.ibm.com/developerworks/downloads/r/rswa/?S_TACT=105AGX08&amp;S_CMP=PAT"><font face="Arial" color="#333366">IBM Rational Software Architect</font></a> 的免费试用版。 <br /><br /></li></ul><p><br /><b>讨论</b><br /></p><ul><li>参与 <a href="http://www.ibm.com/developerworks/blogs/"><font face="Arial" color="#333366">developerWorks blogs</font></a> 并加入 developerWorks 社区。<br /><br /></li><li>参与 Sun Developer Network 上的 <a href="http://forum.java.sun.com/forum.jspa?forumID=427"><font face="Arial" color="#333366">Java 论坛 —— JavaServer Faces Technology</font></a>。 </li></ul><p><br /></p><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td><img height="1" alt="" src="http://www.ibm.com/i/v14/rules/blue_rule.gif" width="100%" /></td></tr></tbody></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tbody><tr align="right"><td><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td valign="center"><img height="16" alt="" src="http://www.ibm.com/i/v14/icons/u_bold.gif" width="16" border="0" /><br /></td><td valign="top" align="right"><a class="fbox" href="http://gocom.primeton.com/modules/techresource/article388.htm#main"><b></b></a></td></tr></tbody></table></td></tr></tbody></table><br /><br /><p><a name="author"><span class="atitle"><font face="Arial" color="#333366">关于作者</font></span></a></p><p></p><table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td colspan="2"><font face="Arial" color="#333366"><img height="5" alt="" src="http://www.ibm.com/i/c.gif" width="100%" /></font></td></tr><tr valign="top" align="left"><td><p><font face="Arial" color="#333366"><img height="80" alt="Anand Joshi 的照片" src="http://www.ibm.com/developerworks/i/p-ajoshi.jpg" width="64" align="left" /></font></p></td><td><p>Anand 是一位 Sun 认证的企业架构师，几年来一直研究 Web 技术。他对 WebSphere 管理控制 台应用程序的设计和开发做了多方面的贡献。Anand 曾经在 IBM 美国工作过几年，目前在 IBM 印度工作。</p></td></tr></tbody></table></hidden><img src ="http://www.blogjava.net/xiekai-blog/aggbug/55586.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiekai-blog/" target="_blank">小言身寸</a> 2006-06-28 18:21 <a href="http://www.blogjava.net/xiekai-blog/archive/2006/06/28/55586.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>