﻿<?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-狐狸&amp;花生-随笔分类-As u</title><link>http://www.blogjava.net/czcode/category/18133.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 15 May 2008 12:39:33 GMT</lastBuildDate><pubDate>Thu, 15 May 2008 12:39:33 GMT</pubDate><ttl>60</ttl><item><title>Struts 2多文件上传</title><link>http://www.blogjava.net/czcode/archive/2008/05/15/200582.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Thu, 15 May 2008 02:42:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2008/05/15/200582.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/200582.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2008/05/15/200582.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/200582.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/200582.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/czcode/archive/2008/05/15/200582.html'>阅读全文</a><img src ="http://www.blogjava.net/czcode/aggbug/200582.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2008-05-15 10:42 <a href="http://www.blogjava.net/czcode/archive/2008/05/15/200582.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2拦截器概述</title><link>http://www.blogjava.net/czcode/archive/2008/05/15/200581.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Thu, 15 May 2008 02:39:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2008/05/15/200581.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/200581.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2008/05/15/200581.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/200581.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/200581.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/czcode/archive/2008/05/15/200581.html'>阅读全文</a><img src ="http://www.blogjava.net/czcode/aggbug/200581.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2008-05-15 10:39 <a href="http://www.blogjava.net/czcode/archive/2008/05/15/200581.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 在Action类中获得HttpServletResponse对象的四种方法</title><link>http://www.blogjava.net/czcode/archive/2008/05/15/200580.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Thu, 15 May 2008 02:37:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2008/05/15/200580.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/200580.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2008/05/15/200580.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/200580.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/200580.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/czcode/archive/2008/05/15/200580.html'>阅读全文</a><img src ="http://www.blogjava.net/czcode/aggbug/200580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2008-05-15 10:37 <a href="http://www.blogjava.net/czcode/archive/2008/05/15/200580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Collection接口的总结 </title><link>http://www.blogjava.net/czcode/archive/2007/04/18/111549.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Wed, 18 Apr 2007 03:18:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2007/04/18/111549.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/111549.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2007/04/18/111549.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/111549.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/111549.html</trackback:ping><description><![CDATA[<table width="100%">
    <tbody>
        <tr>
            <td><strong>Map接口：</strong><br>&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; + -- <strong>WeakHashMap:</strong> 以弱键 实现的基于哈希表的 Map。在 WeakHashMap 中，当某个键不再正常使用时，将自动移除其条<br>&nbsp; &nbsp; | &nbsp; &nbsp;&nbsp; 目。更精确地说，对于一个给定的键，其映射的存在并不阻止垃圾回收器对该键的丢弃，这就使该键成为可终止的，被终<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 止，然后被回收。丢弃某个键时，其条目从映射中有效地移除，因此，该类的行为与其他的 Map 实现有所不同。<font color=#ff0000>此实现</font><br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=#ff0000>不是同步的。</font><br>&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; + -- <strong>TreeMap:</strong>该映射根据其键的自然顺序进行排序，或者根据创建映射时提供的 Comparator 进行排序，具体取决于使用的<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 构造方法。<font color=#ff0000>此实现不是同步的。</font><br>&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; + -- <strong>HashMap:</strong>基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作，并允许使用 null 值和 null 键。（除了&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 非同步和允许使用 null 之外，HashMap 类与 Hashtable 大致相同。）此类不保证映射的顺序，特别是它不保证该顺&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; | &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 序恒久不变。<font color=#ff0000>此实现不是同步的。<br>&nbsp;&nbsp;&nbsp;<font color=#000000> |</font><br></font>&nbsp;&nbsp;&nbsp; +-- <strong>SortedMap: </strong>进一步提供关于键的总体排序 的 Map。该映射是根据其键的自然顺序进行排序的，或者根据通常在创建有<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 序映射时提供的 Comparator 进行排序。对有序映射的 collection 视图（由 entrySet、keySet 和 values 方法返回<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; ）进行迭代时，此顺序就会反映出来。要采用此排序方式，还需要提供一些其他操作（此接口是 SortedSet 的对应映<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 射）。<br><br><strong>Collection接口：</strong><br>&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; + -- Set接口:一个不包含重复元素的 collection。更正式地说，set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2，并<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; 且最多包含一个 null 元素。正如其名称所暗示的，此接口模仿了数学上的 set 抽象。<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + -- <strong>HashSet:</strong>此类实现 Set 接口，由哈希表（实际上是一个 HashMap 实例）支持。它不保证 set 的迭代顺序；<br>&nbsp; &nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 特别是它不保证该顺序恒久不变。此类允许使用 null 元素。此类为基本操作提供了稳定性能，<font color=#ff0000>此实现不是同</font><br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; <font color=#ff0000>步的。</font><br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + -- <strong>LinkedHashSet:</strong>具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。此实现与 HashSet 的不同之外在<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 于，后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序，即按照将元素插入到 set<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 中 的顺序（插入顺序）进行迭代。注意，插入顺序不 受在 set 中重新插入的 元素的影响。<font color=#ff0000>此实现不是同步</font><br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;<font color=#ff0000> 的。 </font><br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + -- <strong>TreeSet:</strong>基于 TreeMap 的 NavigableSet 实现。使用元素的自然顺序对元素进行排序，或者根据创建 set 时<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供的 Comparator 进行排序，具体取决于使用的构造方法。此实现为基本操作（add、remove 和 contains）<br>&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供受保证的 log(n) 时间开销。<font color=#ff0000>此实现不是同步的。</font><br>&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; + -- List接口:有序的 collection（也称为序列）。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以根据元素的整数索引（在列表中的位置）访问元素，并搜索列表中的元素。<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + -- <strong>ArrayList:List </strong>接口的大小可变数组的实现。实现了所有可选列表操作，并允许包括 null 在内的所有元素。<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 除了实现 List 接口外，此类还提供一些方法来操作内部用来存储列表的数组的大小。（此类大致上等同于 <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; Vector 类，除了此类是不同步的。）每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素，其容量也自动增长。并未指定增<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 长策略的细节，因为这不只是添加元素会带来分摊固定时间开销那样简单。<font color=#ff0000>此实现不是同步的。</font><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + -- <strong>LinkedList:List </strong>接口的链接列表实现。实现所有可选的列表操作，并且允许所有元素（包括 null）。除了实<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 现 List 接口外，LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; 法。这些操作允许将链接列表用作堆栈、队列或双端队列。<font color=#ff0000>提供先进先出队列操作(FIFO)。此实现不是同步的。</font><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + -- <strong>Vector:</strong>Vector 类可以实现可增长的对象数组。与数组一样，它包含可以使用整数索引进行访问的组件。但是<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ，Vector 的大小可以根据需要增大或缩小，以适应创建 Vector 后进行添加或移除项的操作。<font color=#ff0000>此实现是同步的<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 。</font></td>
        </tr>
    </tbody>
</table>
<span class=graytag></span>
<img src ="http://www.blogjava.net/czcode/aggbug/111549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2007-04-18 11:18 <a href="http://www.blogjava.net/czcode/archive/2007/04/18/111549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat5.5日志</title><link>http://www.blogjava.net/czcode/archive/2007/01/09/92690.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Tue, 09 Jan 2007 10:42:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2007/01/09/92690.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/92690.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2007/01/09/92690.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/92690.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/92690.html</trackback:ping><description><![CDATA[
		<div>自从用上了tomcat5.5，发现日志信息没了，出错了也找不着有用的信息，上apache找答案，果然</div>
		<div>
				<p>Tomcat 5.5 uses <a href="http://jakarta.apache.org/commons/logging"><u><font color="#0000ff">Commons Logging</font></u></a> throughout its internal code allowing the developer to choose a logging configuration that suits their needs, e.g java.util.logging or <a href="http://logging.apache.org/log4j"><u><font color="#0000ff">Log4J</font></u></a>. Commons Logging provides Tomcat the ability to log hierarchially across various log levels without needing to rely on a particular logging implementation. </p>
				<p>An important consequence for Tomcat 5.5 is that the &lt;Logger&gt; element found in previous versions to create a <code>localhost_log</code> is no longer a valid nested element of &lt;Context&gt;. Instead, the default Tomcat configuration will use java.util.logging. If the developer wishes to collect detailed internal Tomcat logging (i.e what is happening within the Tomcat engine), then they should configure a logging system such as java.util.logging or log4j as detailed next</p>
				<p>习惯用log4j来配置log信息的输出。</p>
				<p>新建log4j.properties，内容为</p>
				<p>log4j.rootLogger=info,Console,R</p>
				<p>log4j.appender.Console=org.apache.log4j.ConsoleAppender<br />log4j.appender.Console.layout=org.apache.log4j.PatternLayout<br />#log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p %c - %m%n<br />log4j.appender.Console.layout.ConversionPattern=%d{yy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n</p>
				<p>log4j.appender.R=org.apache.log4j.DailyRollingFileAppender<br />log4j.appender.R.File=${catalina.home}/logs/tomcat.log <br />log4j.appender.R.layout=org.apache.log4j.PatternLayout<br />log4j.appender.R.layout.ConversionPattern=%d{yyyy.MM.dd HH:mm:ss} %5p %c{1}(%L):  %m%n</p>
				<p>log4j.logger.org.apache=info, R<br />log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=DEBUG, R <br />log4j.logger.org.apache.catalina.core=info, R<br />log4j.logger.org.apache.catalina.session=info, R</p>
				<p>最后四行是tomcat的信息，如果改为debug日志文件将十分庞大。</p>
				<p>将这个文件放入${catalina.home}/common/classes下，再将log4j.jar和commons-logging.jar放入${catalina.home}/common/lib下，就可以在${catalina.home}/logs/下见到日志了。</p>
		</div>
<img src ="http://www.blogjava.net/czcode/aggbug/92690.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2007-01-09 18:42 <a href="http://www.blogjava.net/czcode/archive/2007/01/09/92690.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>怎样动态添加文本框并处理</title><link>http://www.blogjava.net/czcode/archive/2007/01/04/91752.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Thu, 04 Jan 2007 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2007/01/04/91752.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/91752.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2007/01/04/91752.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/91752.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/91752.html</trackback:ping><description><![CDATA[
		<p>我在做项目时曾碰到这个问题，怎样动态地添加一个文本框或文件域，这在网上很容易找到。但对怎样处理提交的动态数据就很少有这方面的信息了。本人翻阅了一些资料，把自己的方法写了下来，以飨读者。</p>
		<p>1.提交表单</p>
		<p> </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: #000000">&lt;html&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&lt;body&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> &lt;form name</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">form</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> method</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">post</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> action</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">add.jsp</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   &lt;input name</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">button</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">button onClick</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">'additem(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">tb</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">)' value</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">添加&gt;&gt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> &lt;table id</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">tb</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> &lt;/table&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&lt;script language</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">javascript</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;<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" />function additem(id)<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" />  var row</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">cell</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">str</span>
				<span style="COLOR: #008000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">  row </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> eval(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">document.all[</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+id+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">]</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">).insertRow()</span>
				<span style="COLOR: #008000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">  if(row !</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> null )<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" />        cell </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> row.insertCell()</span>
				<span style="COLOR: #008000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">        str</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&lt;input type=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">text</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> name=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">StuName</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;&lt;input type=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">button</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> value=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">删除</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> onclick='deleteitem(this,</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">tb</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">);'&gt;</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   cell.innerHTML</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">str</span>
				<span style="COLOR: #008000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></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" />function deleteitem(obj</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">id)<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" />  var rowNum</span>
				<span style="COLOR: #000000">,</span>
				<span style="COLOR: #000000">curRow</span>
				<span style="COLOR: #008000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">  curRow </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> obj.parentNode.parentNode</span>
				<span style="COLOR: #008000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">  rowNum </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> eval(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">document.all.</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+id).rows.length - </span>
				<span style="COLOR: #000000">1</span>
				<span style="COLOR: #008000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">  eval(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">document.all[</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+id+'</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">'+</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">]</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">).deleteRow(curRow.rowIndex)</span>
				<span style="COLOR: #008000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				<span style="COLOR: #000000">}<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&lt;/script&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   &lt;p&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />     &lt;input type</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">submit</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> name</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">submit</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> value</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">提交</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />   &lt;/p&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /> &lt;/form&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&lt;/body&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&lt;/html&gt;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
		</div>
		<p> </p>
		<p>2.处理数据</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: #800000">body</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">table </span>
				<span style="COLOR: #ff0000">border</span>
				<span style="COLOR: #0000ff">="1"</span>
				<span style="COLOR: #0000ff">&gt;&lt;</span>
				<span style="COLOR: #800000">tr</span>
				<span style="COLOR: #0000ff">&gt;&lt;</span>
				<span style="COLOR: #800000">td </span>
				<span style="COLOR: #ff0000">colspan</span>
				<span style="COLOR: #0000ff">="2"</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">eg</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">td</span>
				<span style="COLOR: #0000ff">&gt;&lt;/</span>
				<span style="COLOR: #800000">tr</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_60_261_Open_Image" onclick="this.style.display='none'; Codehighlighter1_60_261_Open_Text.style.display='none'; Codehighlighter1_60_261_Closed_Image.style.display='inline'; Codehighlighter1_60_261_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_60_261_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_60_261_Closed_Text.style.display='none'; Codehighlighter1_60_261_Open_Image.style.display='inline'; Codehighlighter1_60_261_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span>
				<span id="Codehighlighter1_60_261_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_60_261_Open_Text">
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />Enumeration params</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">request.getParameterNames();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">while</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(params.hasMoreElements()){<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">String</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> name</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(</span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">String</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)params.nextElement();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">String</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">[] values</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">request.getParameterValues(name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">if</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(name.equals(</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">StuName</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">)){<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&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">tr</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">td</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">name</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</span>
				<span style="COLOR: #0000ff">&lt;/</span>
				<span style="COLOR: #800000">td</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">td</span>
				<span style="COLOR: #0000ff">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_296_342_Open_Image" onclick="this.style.display='none'; Codehighlighter1_296_342_Open_Text.style.display='none'; Codehighlighter1_296_342_Closed_Image.style.display='inline'; Codehighlighter1_296_342_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_296_342_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_296_342_Closed_Text.style.display='none'; Codehighlighter1_296_342_Open_Image.style.display='inline'; Codehighlighter1_296_342_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span>
				<span id="Codehighlighter1_296_342_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_296_342_Open_Text">
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">
								<br />
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />
						</span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">for</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">(</span>
						<span style="COLOR: #0000ff; BACKGROUND-COLOR: #f5f5f5">int</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5"> index</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">0</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">;index</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&lt;</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">values.length;index</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">++</span>
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">){<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span>
				</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">values[index]</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_367_368_Open_Image" onclick="this.style.display='none'; Codehighlighter1_367_368_Open_Text.style.display='none'; Codehighlighter1_367_368_Closed_Image.style.display='inline'; Codehighlighter1_367_368_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_367_368_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_367_368_Closed_Text.style.display='none'; Codehighlighter1_367_368_Open_Image.style.display='inline'; Codehighlighter1_367_368_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span>
				<span id="Codehighlighter1_367_368_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_367_368_Open_Text">
						<span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">}}</span>
				</span>
				<span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&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">td</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">tr</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">table</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">body</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>
		</div>
		<br />
<img src ="http://www.blogjava.net/czcode/aggbug/91752.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2007-01-04 14:44 <a href="http://www.blogjava.net/czcode/archive/2007/01/04/91752.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Servlet和Filter的url匹配以及url-pattern详解</title><link>http://www.blogjava.net/czcode/archive/2006/12/18/88456.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Mon, 18 Dec 2006 02:45:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2006/12/18/88456.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/88456.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2006/12/18/88456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/88456.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/88456.html</trackback:ping><description><![CDATA[ Servlet<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">和</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">filter</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">是</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">J2EE</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">开发中常用的技术，使用方便，配置简单，老少皆宜。估计大多数朋友都是直接配置用，也没有关心过具体的细节，今天遇到一个问题，上网查了</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">servlet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">的规范才发现，</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">servlet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">和</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">filter</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">中的</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">url-pattern</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">还是有一些文章在里面的，总结了一些东西，放出来供大家参考，以免遇到问题又要浪费时间。</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><?XML:NAMESPACE PREFIX = O /?><o:p></o:p></span><h2 style="LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><span style="mso-tab-count: 1" twffan="done">   <font size="3"> 一，</font></span><font size="3">servlet</font></span><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Cambria" twffan="done">容器对</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">url</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Cambria" twffan="done">的匹配过程：</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><o:p></o:p></span></font></h2><p class="MsoNormal" style="LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><span style="mso-tab-count: 1" twffan="done">      </span><o:p></o:p></span></p><table class="MsoNormalTable" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: #f2f2f2; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-shading: windowtext; mso-pattern: gray-5 auto; mso-border-alt: solid #9BBB59 1.0pt; mso-yfti-tbllook: 1184; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: 1.0pt solid #9BBB59; mso-border-insidev: 1.0pt solid #9BBB59" cellspacing="0" cellpadding="0" border="1"><tbody><tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: #9bbb59 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #9bbb59 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #9bbb59 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #9bbb59 1pt solid" valign="top" width="568"><p class="MsoNormal" style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">当一个请求发送到</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">容器的时候，容器先会将请求的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">减去当前应用上下文的</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-weight: bold" twffan="done">路径</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">作为</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">的映射</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，比如我访问的是</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""><a href="http://localhost/test/aaa.html">http://localhost/test/aaa.html</a></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，我的应用上下文是</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="" mso-hansi-font-family:="" calibri;="">test</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，容器会将</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""><a href="http://localhost/test">http://localhost/test</a></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">去掉，剩下的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">/aaa.html</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">部分拿来做</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">的映射匹配。这个映射匹配过程是有顺序的，而且当有一个</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">匹配成功以后，就不会去理会剩下的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">了（</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">filter</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">不同，后文会提到）。其匹配规则和顺序如下：</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""><o:p></o:p></span></p><p class="MsoListParagraph" style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l1 level1 lfo1"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold;="" mso-fareast-font-family:="" verdana;="" mso-bidi-font-family:="" verdana?=""><span style="mso-list: Ignore" twffan="done">1.<span style="FONT: 7pt \" twffan="done" times="" new="" roman\??="">     </span></span></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">精确路径匹配。例子：比如</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servletA </span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url-pattern</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">为</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""> /test</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servletB</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url-pattern</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">为</span><span style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""><span lang="EN-US" twffan="done">/* </span></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，这个时候，如果我访问的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">为</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""><a href="http://localhost/test">http://localhost/test</a></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，这个时候容器就会先</span><span style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">进行精确路径匹配，发现</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">/test</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">正好被</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servletA</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">精确匹配，那么就去调用</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servletA</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，也不会去理会其他的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">了。</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""><o:p></o:p></span></p><p class="MsoListParagraph" style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l1 level1 lfo1"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold;="" mso-fareast-font-family:="" verdana;="" mso-bidi-font-family:="" verdana?=""><span style="mso-list: Ignore" twffan="done">2.<span style="FONT: 7pt \" twffan="done" times="" new="" roman\??="">     </span></span></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">最长路径匹配。例子：</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servletA</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url-pattern</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">为</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">/test/*</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，而</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servletB</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url-pattern</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">为</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">/test/a/*</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，此时访问</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""><a href="http://localhost/test/a">http://localhost/test/a</a></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">时，容器会选择路径最长的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">来匹配，也就是这里的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servletB</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">。</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?=""><o:p></o:p></span></p><p class="MsoListParagraph" style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l1 level1 lfo1"><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold;="" mso-fareast-font-family:="" verdana;="" mso-bidi-font-family:="" verdana?=""><span style="mso-list: Ignore" twffan="done">3.<span style="FONT: 7pt \" twffan="done" times="" new="" roman\??="">     </span></span></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">扩展匹配，如果</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">最后一段包含扩展，容器将会根据扩展选择合适的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">。例子：</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servletA</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">的</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url-pattern</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">：</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">*.action<o:p></o:p></span></p><p class="MsoListParagraph" style="MARGIN-LEFT: 42pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l1 level1 lfo1"><strong><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-fareast-font-family:="" verdana;="" mso-bidi-font-family:="" verdana?=""><span style="mso-list: Ignore" twffan="done">4.<span style="FONT: 7pt \" twffan="done" times="" new="" roman\??="">     </span></span></span></strong><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">如果前面三条规则都没有找到一个</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，容器会根据</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">url</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">选择对应的请求资源。如果应用定义了一个</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">default servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">，则容器会将请求丢给</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">default servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-weight: bold" twffan="done">（什么是</span><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-bidi-font-weight:="" bold?="">default servlet</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-weight: bold" twffan="done">？后面会讲）</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri; mso-bidi-font-weight: bold" twffan="done">。</span><strong><span lang="EN-US" style="COLOR: black; FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><o:p></o:p></span></strong></p></td></tr></tbody></table><p class="MsoNormal" style="LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><span style="mso-spacerun: yes" twffan="done"> </span><span style="mso-tab-count: 1" twffan="done">    </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">根据这个规则表，就能很清楚的知道</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">servlet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">的匹配过程，所以定义</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">servlet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">的时候也要考虑</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">url-pattern</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">的写法，以免出错。</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><o:p></o:p></span></p><p class="MsoNormal" style="LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><span style="mso-tab-count: 1" twffan="done">      </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">对于</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">filter</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">，不会像</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">servlet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">那样只匹配一个</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">servlet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">，因为</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">filter</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">的集合是一个链，所以只会有处理的顺序不同，而不会出现只选择一个</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">filter</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">。</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">Filter</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">的处理顺序和</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">filter-mapping</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">在</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">web.xml</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Calibri" twffan="done">中定义的顺序相同。</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??=""><o:p></o:p></span></p><h2 style="LINE-HEIGHT: 150%"><font size="3"><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\??="">    二，url-pattern</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Cambria" twffan="done">详解</span><span lang="EN-US" style="FONT-FAMILY: \" twffan="done" verdana\?,\?sans-serif\?;="" mso-hansi-font-family:="" cambria?=""><o:p></o:p></span></font></h2><p class="MsoNormal" style="LINE-HEIGHT: 150%"><span lang="EN-US" twffan="done"><span style="mso-tab-count: 1" twffan="done">         </span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">在</span><span lang="EN-US" twffan="done">web.xml</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">文件中，以下语法用于定义映射：</span></p><p class="MsoListParagraph" style="MARGIN-LEFT: 41.9pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l0 level1 lfo2"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" twffan="done"><span style="mso-list: Ignore" twffan="done">l<span style="FONT: 7pt \" twffan="done" times="" new="" roman\??="">  </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">以</span><span lang="EN-US" twffan="done">”/’</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">开头和以</span><span lang="EN-US" twffan="done">”/*”</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">结尾的是用来做路径映射的。</span></p><p class="MsoListParagraph" style="MARGIN-LEFT: 41.9pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l0 level1 lfo2"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" twffan="done"><span style="mso-list: Ignore" twffan="done">l<span style="FONT: 7pt \" twffan="done" times="" new="" roman\??="">  </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">以前缀</span><span lang="EN-US" twffan="done">”*.”</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">开头的是用来做扩展映射的。</span></p><p class="MsoListParagraph" style="MARGIN-LEFT: 41.9pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l0 level1 lfo2"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" twffan="done"><span style="mso-list: Ignore" twffan="done">l<span style="FONT: 7pt \" twffan="done" times="" new="" roman\??="">  </span></span></span><span lang="EN-US" twffan="done">“/” </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">是用来定义</span><span lang="EN-US" twffan="done">default servlet</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">映射的。</span></p><p class="MsoListParagraph" style="MARGIN-LEFT: 41.9pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; mso-char-indent-count: 0; mso-list: l0 level1 lfo2"><span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings" twffan="done"><span style="mso-list: Ignore" twffan="done">l<span style="FONT: 7pt \" twffan="done" times="" new="" roman\??="">  </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">剩下的都是用来定义详细映射的。比如：</span><span lang="EN-US" twffan="done"> /aa/bb/cc.action</span></p><p class="MsoNormal" style="TEXT-INDENT: 20.9pt; LINE-HEIGHT: 150%"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">所以，为什么定义</span><span lang="EN-US" twffan="done">”/*.action”</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" twffan="done">这样一个看起来很正常的匹配会错？因为这个匹配即属于路径映射，也属于扩展映射，导致容器无法判断。</span></p><img src ="http://www.blogjava.net/czcode/aggbug/88456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2006-12-18 10:45 <a href="http://www.blogjava.net/czcode/archive/2006/12/18/88456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>saveorUpdate与unsaved-value，save，update，delete</title><link>http://www.blogjava.net/czcode/archive/2006/12/18/88453.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Mon, 18 Dec 2006 02:40:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2006/12/18/88453.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/88453.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2006/12/18/88453.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/88453.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/88453.html</trackback:ping><description><![CDATA[
		<strong>
				<span style="COLOR: red" twffan="done">希望对刚开始学Hibernate的同学有所帮助</span>。</strong>
		<p>
				<span style="COLOR: red" twffan="done">一、saveorUpdate与unsaved-value</span>
				<br />到底是sava还是update <br />Hibernate需要判断被操作的对象究竟是一个已经持久化过的持久对象还是临时对象。 <br /><b>1）．主键Hibernate的id generator产生</b><br />&lt;id name="id" type="java.lang.Long"&gt; <br />&lt;column name="ID" precision="22" scale="0" /&gt; <br />&lt;generator class="increment" /&gt; <br />&lt;/id&gt;</p>
		<p>Project project = new Project(); <br />project.setId(XXX); <br />this.projectDao.saveOrUpdate(project);</p>
		<p>1、默认unsaved-value="null" <br /><b>主键是对象类型，hebernate判断project的主键是否位null，来判断project是否已被持久化</b><br />是的话，对project对象发送save(project)， <br />若自己设置了主键则直接生成update的sql，发送update(project)，即便数据库里没有那条记录。 <br />主键是基本类型如int/long/double/ <br />自己设置unsaved-null="0"。 <br />所以这样的话save和update操作肯定不会报错。</p>
		<p>2、unsaved-value="none"， <br />由于不论主键属性为任何值，都不可能为none，因此Hibernate总是对project对象发送update(project)</p>
		<p>3、unsaved-value="any" <br />由于不论主键属性为任何值，都肯定为any，因此Hibernate总是对project对象发送save(project)，hibernate生成主键。</p>
		<p>Hibernate文档中写到 <br />saveOrUpdate()完成了如下工作： <br />如果对象已经在这个session中持久化过了，什么都不用做 <br />如果对象没有标识值，调用save()来保存它 <br />如果对象的标识值与unsaved-value中的条件匹配，调用save()来保存它 <br />如果对象使用了版本(version或timestamp),那么除非设置unsaved-value="undefined",版本检查会发生在标识符检查之前. <br />如果这个session中有另外一个对象具有同样的标识符，抛出一个异常 </p>
		<p>
				<b>2）．主键由自己来赋值</b>
				<br />&lt;id name="id" type="java.lang.Long"&gt; <br />&lt;column name="ID" precision="22" scale="0" /&gt; <br />&lt;generator class="assigned" /&gt; <br />&lt;/id&gt;</p>
		<p>Project project = new Project(); <br />project.setId(XXX); <br />this.projectDao.saveOrUpdate(project);</p>
		<p>1、默认unsaved-value="null" <br /><b>这时有所不同，hibernate会根据主键产生一个select，来判断此对象是否已被持久化</b><br />已被持久化则update，未被持久化则save。 <br />2、unsaved-value="none"，update对象，同上</p>
		<p>3、unsaved-value="any" ，save对象， <br />如果自己自己设置的ID在数据库中已存在，则报错。</p>
		<p>
				<span style="COLOR: red" twffan="done">二、save与update操作</span>
				<br />显式的使用session.save()或者session.update()操作一个对象的时候，实际上是用不到unsaved-value的 <br />在同一Session，save没什么可说得 <br />update对象时, 最直接的更改一个对象的方法就是load()它，保持Session打开，然后直接修改即可: <br />Session s =… <br />Project p = (Project) sess.load(Project.class, id) ); <br />p.setName(“test”); <br />s.flush(); <br />不用调用s.update(p);hibernate能察觉到它的变化，会自动更新。当然显示调用的话也不会错</p>
		<p>Hibernate文档中写到 <br />update()方法在下列情形下使用： <br />程序在前面的session中装载了对象 <br />对象被传递到UI（界面）层 <br />对该对象进行了一些修改 <br />对象被传递回业务层 <br />应用程序在第二个session中调用update()保存修改 </p>
		<p>
				<span style="COLOR: red" twffan="done">三、delete操作</span>
				<br />删除时直接自己构造一个project即可删除 <br />this.projectDao.delete(preojct);</p>
		<p>以前删除我是这样写的 <br />public void deleteProject(String id) { <br />Project project = (Project) this.projectDao.get(Project.class, id); <br />if (project != null) { <br />this.projectDao.delete(project); <br />} <br />即这样也是可以的 <br />Project project = new Project(); <br />project.setId(id); <br />this.projectDao.delete(project).</p>
		<p>如果有级联关系，需要把级联的子类也构造出来add进去，同样可以删除。</p>
		<p>好了，罗嗦的够多了。</p>
<img src ="http://www.blogjava.net/czcode/aggbug/88453.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2006-12-18 10:40 <a href="http://www.blogjava.net/czcode/archive/2006/12/18/88453.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POI 搞excell</title><link>http://www.blogjava.net/czcode/archive/2006/12/18/88450.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Mon, 18 Dec 2006 02:36:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2006/12/18/88450.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/88450.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2006/12/18/88450.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/88450.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/88450.html</trackback:ping><description><![CDATA[
		<div style="MARGIN-TOP: 10px; MARGIN-LEFT: 15px" twffan="done">
				<table width="100%">
						<tbody>
								<tr>
										<td>
												<p>
														<b>1、遍历workbook</b>
														<br />
												</p>
												<div class="code_title" twffan="done">代码</div>
												<div class="code_div" twffan="done">
														<div class="dp-highlighter" twffan="done">
																<div class="bar" twffan="done">
																</div>
																<ol class="dp-j">
																		<li class="alt">
																				<span twffan="done">
																						<span class="comment" twffan="done">// load源文件 </span>
																						<span twffan="done">  </span>
																				</span>
																		</li>
																		<li class="">
																				<span twffan="done">POIFSFileSystem fs = </span>
																				<span class="keyword" twffan="done">new</span>
																				<span twffan="done"> POIFSFileSystem(</span>
																				<span class="keyword" twffan="done">new</span>
																				<span twffan="done"> FileInputStream(filePath));   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">HSSFWorkbook wb = </span>
																				<span class="keyword" twffan="done">new</span>
																				<span twffan="done"> HSSFWorkbook(fs);   </span>
																		</li>
																		<li class="">
																				<span twffan="done">
																				</span>
																				<span class="keyword" twffan="done">for</span>
																				<span twffan="done"> (</span>
																				<span class="keyword" twffan="done">int</span>
																				<span twffan="done"> i = </span>
																				<span class="number" twffan="done">0</span>
																				<span twffan="done">; i &lt; wb.getNumberOfSheets(); i++) {   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">    HSSFSheet sheet = wb.getSheetAt(i);   </span>
																		</li>
																		<li class="">
																				<span twffan="done">    </span>
																				<span class="keyword" twffan="done">for</span>
																				<span twffan="done"> (</span>
																				<span class="keyword" twffan="done">int</span>
																				<span twffan="done"> i = sheet.getFirstRowNum(); i &lt; sheet.getLastRowNum(); i ++) {   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">    HSSFRow row = sheet.getRow(i);   </span>
																		</li>
																		<li class="">
																				<span twffan="done">            </span>
																				<span class="keyword" twffan="done">if</span>
																				<span twffan="done"> (row != </span>
																				<span class="keyword" twffan="done">null</span>
																				<span twffan="done">) {   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">        。。。操作}   </span>
																		</li>
																		<li class="">
																				<span twffan="done">       }   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">     }   </span>
																		</li>
																		<li class="">
																				<span twffan="done">
																				</span>
																				<span class="comment" twffan="done">// 目标文件 </span>
																				<span twffan="done">  </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">FileOutputStream fos = </span>
																				<span class="keyword" twffan="done">new</span>
																				<span twffan="done"> FileOutputStream(objectPath);   </span>
																		</li>
																		<li class="">
																				<span twffan="done">
																				</span>
																				<span class="comment" twffan="done">//写文件 </span>
																				<span twffan="done">  </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">swb.write(fos);   </span>
																		</li>
																		<li class="">
																				<span twffan="done">fos.close();  </span>
																		</li>
																</ol>
														</div>
												</div>
												<script><![CDATA[ender_code();]]&gt;</script>
												<p>
												</p>
												<p>
														<b>2、得到列和单元格</b>
														<br />
												</p>
												<div class="code_title" twffan="done">代码</div>
												<div class="code_div" twffan="done">
														<div class="dp-highlighter" twffan="done">
																<div class="bar" twffan="done">
																</div>
																<ol class="dp-j">
																		<li class="alt">
																				<span twffan="done">
																						<span twffan="done">HSSFRow row = sheet.getRow(i);   </span>
																				</span>
																		</li>
																		<li class="">
																				<span twffan="done">HSSFCell cell = row.getCell((</span>
																				<span class="keyword" twffan="done">short</span>
																				<span twffan="done">) j);  </span>
																		</li>
																</ol>
														</div>
												</div>
												<script><![CDATA[ender_code();]]&gt;</script>
												<p>
												</p>
												<p>
														<b>3、设置sheet名称和单元格内容为中文</b>
														<br />
												</p>
												<div class="code_title" twffan="done">代码</div>
												<div class="code_div" twffan="done">
														<div class="dp-highlighter" twffan="done">
																<div class="bar" twffan="done">
																</div>
																<ol class="dp-j">
																		<li class="alt">
																				<span twffan="done">
																						<span twffan="done">wb.setSheetName(n, </span>
																						<span class="string" twffan="done">"中文"</span>
																						<span twffan="done">,HSSFCell.ENCODING_UTF_16);       </span>
																				</span>
																		</li>
																		<li class="">
																				<span twffan="done">cell.setEncoding((</span>
																				<span class="keyword" twffan="done">short</span>
																				<span twffan="done">) </span>
																				<span class="number" twffan="done">1</span>
																				<span twffan="done">);   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">cell.setCellValue(</span>
																				<span class="string" twffan="done">"中文"</span>
																				<span twffan="done">);  </span>
																		</li>
																</ol>
														</div>
												</div>
												<script><![CDATA[ender_code();]]&gt;</script>
												<p>
												</p>
												<p>
														<b>4、单元格内容未公式或数值，可以这样读写</b>
														<br />
												</p>
												<div class="code_title" twffan="done">代码</div>
												<div class="code_div" twffan="done">
														<div class="dp-highlighter" twffan="done">
																<ol class="dp-j">
																		<li class="alt">
																				<span twffan="done">
																						<span twffan="done">cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);   </span>
																				</span>
																		</li>
																		<li class="">
																				<span twffan="done">cell.getNumericCellValue()  </span>
																		</li>
																</ol>
														</div>
												</div>
												<script><![CDATA[ender_code();]]&gt;</script>
												<p>
												</p>
												<p>
														<b>
																<br />5、设置列宽、行高</b>
														<br />
												</p>
												<div class="code_title" twffan="done">代码</div>
												<div class="code_div" twffan="done">
														<div class="dp-highlighter" twffan="done">
																<div class="bar" twffan="done">
																</div>
																<ol class="dp-j">
																		<li class="alt">
																				<span twffan="done">
																						<span twffan="done">sheet.setColumnWidth((</span>
																						<span class="keyword" twffan="done">short</span>
																						<span twffan="done">)column,(</span>
																						<span class="keyword" twffan="done">short</span>
																						<span twffan="done">)width);   </span>
																				</span>
																		</li>
																		<li class="">
																				<span twffan="done">row.setHeight((</span>
																				<span class="keyword" twffan="done">short</span>
																				<span twffan="done">)height);  </span>
																		</li>
																</ol>
														</div>
												</div>
												<script><![CDATA[ender_code();]]&gt;</script>
												<p>
												</p>
												<p>
														<b>
																<br />6、添加区域，合并单元格</b>
														<br />
												</p>
												<div class="code_title" twffan="done">代码</div>
												<div class="code_div" twffan="done">
														<div class="dp-highlighter" twffan="done">
																<div class="bar" twffan="done">
																</div>
																<ol class="dp-j">
																		<li class="alt">
																				<span twffan="done">
																						<span twffan="done">Region region = </span>
																						<span class="keyword" twffan="done">new</span>
																						<span twffan="done"> Region((</span>
																						<span class="keyword" twffan="done">short</span>
																						<span twffan="done">)rowFrom,(</span>
																						<span class="keyword" twffan="done">short</span>
																						<span twffan="done">)columnFrom,(</span>
																						<span class="keyword" twffan="done">short</span>
																						<span twffan="done">)rowTo,(</span>
																						<span class="keyword" twffan="done">short</span>
																						<span twffan="done">)columnTo);   </span>
																				</span>
																		</li>
																		<li class="">
																				<span twffan="done">sheet.addMergedRegion(region);   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">
																				</span>
																				<span class="comment" twffan="done">//得到所有区域 </span>
																				<span twffan="done">  </span>
																		</li>
																		<li class="">
																				<span twffan="done">sheet.getNumMergedRegions()  </span>
																		</li>
																</ol>
														</div>
												</div>
												<script><![CDATA[ender_code();]]&gt;</script>
												<p>
												</p>
												<p>
														<b>7、常用方法</b>
														<br />根据单元格不同属性返回字符串数值 <br /></p>
												<div class="code_title" twffan="done">代码</div>
												<div class="code_div" twffan="done">
														<div class="dp-highlighter" twffan="done">
																<div class="bar" twffan="done">
																</div>
																<ol class="dp-j">
																		<li class="alt">
																				<span twffan="done">
																						<span class="keyword" twffan="done">public</span>
																						<span twffan="done"> String getCellStringValue(HSSFCell cell) {   </span>
																				</span>
																		</li>
																		<li class="">
																				<span twffan="done">        String cellValue = </span>
																				<span class="string" twffan="done">""</span>
																				<span twffan="done">;   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">        </span>
																				<span class="keyword" twffan="done">switch</span>
																				<span twffan="done"> (cell.getCellType()) {   </span>
																		</li>
																		<li class="">
																				<span twffan="done">        </span>
																				<span class="keyword" twffan="done">case</span>
																				<span twffan="done"> HSSFCell.CELL_TYPE_STRING:   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">            cellValue = cell.getStringCellValue();   </span>
																		</li>
																		<li class="">
																				<span twffan="done">            </span>
																				<span class="keyword" twffan="done">if</span>
																				<span twffan="done">(cellValue.trim().equals(</span>
																				<span class="string" twffan="done">""</span>
																				<span twffan="done">)||cellValue.trim().length()&lt;=</span>
																				<span class="number" twffan="done">0</span>
																				<span twffan="done">)   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">                cellValue=</span>
																				<span class="string" twffan="done">" "</span>
																				<span twffan="done">;   </span>
																		</li>
																		<li class="">
																				<span twffan="done">            </span>
																				<span class="keyword" twffan="done">break</span>
																				<span twffan="done">;   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">        </span>
																				<span class="keyword" twffan="done">case</span>
																				<span twffan="done"> HSSFCell.CELL_TYPE_NUMERIC:   </span>
																		</li>
																		<li class="">
																				<span twffan="done">            cellValue = String.valueOf(cell.getNumericCellValue());   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">            </span>
																				<span class="keyword" twffan="done">break</span>
																				<span twffan="done">;   </span>
																		</li>
																		<li class="">
																				<span twffan="done">        </span>
																				<span class="keyword" twffan="done">case</span>
																				<span twffan="done"> HSSFCell.CELL_TYPE_FORMULA:   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">            cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);   </span>
																		</li>
																		<li class="">
																				<span twffan="done">            cellValue = String.valueOf(cell.getNumericCellValue());   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">            </span>
																				<span class="keyword" twffan="done">break</span>
																				<span twffan="done">;   </span>
																		</li>
																		<li class="">
																				<span twffan="done">        </span>
																				<span class="keyword" twffan="done">case</span>
																				<span twffan="done"> HSSFCell.CELL_TYPE_BLANK:   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">            cellValue=</span>
																				<span class="string" twffan="done">" "</span>
																				<span twffan="done">;   </span>
																		</li>
																		<li class="">
																				<span twffan="done">            </span>
																				<span class="keyword" twffan="done">break</span>
																				<span twffan="done">;   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">        </span>
																				<span class="keyword" twffan="done">case</span>
																				<span twffan="done"> HSSFCell.CELL_TYPE_BOOLEAN:   </span>
																		</li>
																		<li class="">
																				<span twffan="done">            </span>
																				<span class="keyword" twffan="done">break</span>
																				<span twffan="done">;   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">        </span>
																				<span class="keyword" twffan="done">case</span>
																				<span twffan="done"> HSSFCell.CELL_TYPE_ERROR:   </span>
																		</li>
																		<li class="">
																				<span twffan="done">            </span>
																				<span class="keyword" twffan="done">break</span>
																				<span twffan="done">;   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">        </span>
																				<span class="keyword" twffan="done">default</span>
																				<span twffan="done">:   </span>
																		</li>
																		<li class="">
																				<span twffan="done">            </span>
																				<span class="keyword" twffan="done">break</span>
																				<span twffan="done">;   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">        }   </span>
																		</li>
																		<li class="">
																				<span twffan="done">        </span>
																				<span class="keyword" twffan="done">return</span>
																				<span twffan="done"> cellValue;   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">    }  </span>
																		</li>
																</ol>
														</div>
												</div>
												<script><![CDATA[ender_code();]]&gt;</script>
												<br />
												<b>
														<br />8、常用单元格边框格式</b>
												<p>
												</p>
												<p>虚线HSSFCellStyle.BORDER_DOTTED <br />实线HSSFCellStyle.BORDER_THIN <br /></p>
												<div class="code_title" twffan="done">代码</div>
												<div class="code_div" twffan="done">
														<div class="dp-highlighter" twffan="done">
																<div class="bar" twffan="done">
																</div>
																<ol class="dp-j">
																		<li class="alt">
																				<span twffan="done">
																						<span class="keyword" twffan="done">public</span>
																						<span twffan="done"> </span>
																						<span class="keyword" twffan="done">static</span>
																						<span twffan="done"> HSSFCellStyle getCellStyle(</span>
																						<span class="keyword" twffan="done">short</span>
																						<span twffan="done"> type)   </span>
																				</span>
																		</li>
																		<li class="">
																				<span twffan="done">    {      </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">       HSSFWorkbook wb = </span>
																				<span class="keyword" twffan="done">new</span>
																				<span twffan="done"> HSSFWorkbook();   </span>
																		</li>
																		<li class="">
																				<span twffan="done">       HSSFCellStyle style = wb.createCellStyle();   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">       style.setBorderBottom(type);</span>
																				<span class="comment" twffan="done">//下边框  </span>
																				<span twffan="done">  </span>
																		</li>
																		<li class="">
																				<span twffan="done">        style.setBorderLeft(type);</span>
																				<span class="comment" twffan="done">//左边框  </span>
																				<span twffan="done">  </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">        style.setBorderRight(type);</span>
																				<span class="comment" twffan="done">//右边框  </span>
																				<span twffan="done">  </span>
																		</li>
																		<li class="">
																				<span twffan="done">        style.setBorderTop(type);</span>
																				<span class="comment" twffan="done">//上边框  </span>
																				<span twffan="done">  </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">       </span>
																				<span class="keyword" twffan="done">return</span>
																				<span twffan="done"> style;   </span>
																		</li>
																		<li class="">
																				<span twffan="done">    }  </span>
																		</li>
																</ol>
														</div>
												</div>
												<script><![CDATA[ender_code();]]&gt;</script>
												<br />
												<b>
														<br />9、设置字体和内容位置</b>
												<br />
												<div class="code_title" twffan="done">代码</div>
												<div class="code_div" twffan="done">
														<div class="dp-highlighter" twffan="done">
																<div class="bar" twffan="done">
																</div>
																<ol class="dp-j">
																		<li class="alt">
																				<span twffan="done">
																						<span twffan="done">HSSFFont f  = wb.createFont();   </span>
																				</span>
																		</li>
																		<li class="">
																				<span twffan="done">f.setFontHeightInPoints((</span>
																				<span class="keyword" twffan="done">short</span>
																				<span twffan="done">) </span>
																				<span class="number" twffan="done">11</span>
																				<span twffan="done">);</span>
																				<span class="comment" twffan="done">//字号 </span>
																				<span twffan="done">  </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);</span>
																				<span class="comment" twffan="done">//加粗 </span>
																				<span twffan="done">  </span>
																		</li>
																		<li class="">
																				<span twffan="done">style.setFont(f);   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">style.setAlignment(HSSFCellStyle.ALIGN_CENTER);</span>
																				<span class="comment" twffan="done">//左右居中 </span>
																				<span twffan="done">  </span>
																		</li>
																		<li class="">
																				<span twffan="done">style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);</span>
																				<span class="comment" twffan="done">//上下居中 </span>
																				<span twffan="done">  </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">style.setRotation(</span>
																				<span class="keyword" twffan="done">short</span>
																				<span twffan="done"> rotation);</span>
																				<span class="comment" twffan="done">//单元格内容的旋转的角度 </span>
																				<span twffan="done">  </span>
																		</li>
																		<li class="">
																				<span twffan="done">HSSFDataFormat df = wb.createDataFormat();   </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">style1.setDataFormat(df.getFormat(</span>
																				<span class="string" twffan="done">"0.00%"</span>
																				<span twffan="done">));</span>
																				<span class="comment" twffan="done">//设置单元格数据格式 </span>
																				<span twffan="done">  </span>
																		</li>
																		<li class="">
																				<span twffan="done">cell.setCellFormula(string);</span>
																				<span class="comment" twffan="done">//给单元格设公式 </span>
																				<span twffan="done">  </span>
																		</li>
																		<li class="alt">
																				<span twffan="done">style.setRotation(</span>
																				<span class="keyword" twffan="done">short</span>
																				<span twffan="done"> rotation);</span>
																				<span class="comment" twffan="done">//单元格内容的旋转的角度 </span>
																				<span twffan="done">  </span>
																		</li>
																		<li class="">
																				<span twffan="done">cell.setCellStyle(style);   </span>
																		</li>
																</ol>
														</div>
												</div>
												<script><![CDATA[ender_code();]]&gt;</script>
												<br />
												<b>
														<br />10、插入图片</b>
												<br />论坛里看到的 <br /><div class="code_title" twffan="done">代码</div><div class="code_div" twffan="done"><div class="dp-highlighter" twffan="done"><div class="bar" twffan="done"></div><ol class="dp-j"><li class="alt"><span twffan="done"><span class="comment" twffan="done">//先把读进来的图片放到一个ByteArrayOutputStream中，以便产生ByteArray </span><span twffan="done">  </span></span></li><li class=""><span twffan="done">      ByteArrayOutputStream byteArrayOut = </span><span class="keyword" twffan="done">new</span><span twffan="done"> ByteArrayOutputStream();   </span></li><li class="alt"><span twffan="done">      BufferedImage bufferImg = ImageIO.read(</span><span class="keyword" twffan="done">new</span><span twffan="done"> File(</span><span class="string" twffan="done">"ok.jpg"</span><span twffan="done">));   </span></li><li class=""><span twffan="done">      ImageIO.write(bufferImg,</span><span class="string" twffan="done">"jpg"</span><span twffan="done">,byteArrayOut);   </span></li><li class="alt"><span twffan="done"></span><span class="comment" twffan="done">//读进一个excel模版 </span><span twffan="done">  </span></li><li class=""><span twffan="done">FileInputStream fos = </span><span class="keyword" twffan="done">new</span><span twffan="done"> FileInputStream(filePathName+</span><span class="string" twffan="done">"/stencil.xlt"</span><span twffan="done">);    </span></li><li class="alt"><span twffan="done">fs = </span><span class="keyword" twffan="done">new</span><span twffan="done"> POIFSFileSystem(fos);   </span></li><li class=""><span twffan="done"></span><span class="comment" twffan="done">//创建一个工作薄 </span><span twffan="done">  </span></li><li class="alt"><span twffan="done">HSSFWorkbook wb = </span><span class="keyword" twffan="done">new</span><span twffan="done"> HSSFWorkbook(fs);   </span></li><li class=""><span twffan="done">HSSFSheet sheet = wb.getSheetAt(</span><span class="number" twffan="done">0</span><span twffan="done">);   </span></li><li class="alt"><span twffan="done">HSSFPatriarch patriarch = sheet.createDrawingPatriarch();   </span></li><li class=""><span twffan="done">HSSFClientAnchor anchor = </span><span class="keyword" twffan="done">new</span><span twffan="done"> HSSFClientAnchor(</span><span class="number" twffan="done">0</span><span twffan="done">,</span><span class="number" twffan="done">0</span><span twffan="done">,</span><span class="number" twffan="done">1023</span><span twffan="done">,</span><span class="number" twffan="done">255</span><span twffan="done">,(</span><span class="keyword" twffan="done">short</span><span twffan="done">) </span><span class="number" twffan="done">0</span><span twffan="done">,</span><span class="number" twffan="done">0</span><span twffan="done">,(</span><span class="keyword" twffan="done">short</span><span twffan="done">)</span><span class="number" twffan="done">10</span><span twffan="done">,</span><span class="number" twffan="done">10</span><span twffan="done">);        </span></li><li class="alt"><span twffan="done">patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));  </span></li></ol></div></div><script><![CDATA[ender_code();]]&gt;</script><p></p></td>
								</tr>
						</tbody>
				</table>
		</div>
		<div class="topic_summary" twffan="done">最后更新：2006-10-30 20:12<br /></div>
<img src ="http://www.blogjava.net/czcode/aggbug/88450.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2006-12-18 10:36 <a href="http://www.blogjava.net/czcode/archive/2006/12/18/88450.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用Java＋POI 读写Excel文档&amp;向Excel中插入图片</title><link>http://www.blogjava.net/czcode/archive/2006/12/18/88448.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Mon, 18 Dec 2006 02:35:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2006/12/18/88448.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/88448.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2006/12/18/88448.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/88448.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/88448.html</trackback:ping><description><![CDATA[
		<p>
				<font face="宋体" size="2">一．POI简介</font>
		</p>
		<p>
				<font face="宋体" size="2">Jakarta POI 是apache的子项目，目标是处理ole2对象。它提供了一组操纵Windows文档的Java API</font>
		</p>
		<p>
				<font face="宋体" size="2">目前比较成熟的是HSSF接口，处理MS Excel（97-2002）对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西，而是真正的Excel对象，你可以控制一些属性如sheet,cell等等。</font>
		</p>
		<p>
				<font face="宋体" size="2">二．HSSF概况</font>
		</p>
		<p>
				<font face="宋体" size="2">HSSF 是Horrible SpreadSheet Format的缩写，也即“讨厌的电子表格格式”。也许HSSF的名字有点滑稽，就本质而言它是一个非常严肃、正规的API。通过HSSF，你可以用纯Java代码来读取、写入、修改Excel文件。</font>
		</p>
		<p>
				<font face="宋体" size="2">HSSF 为读取操作提供了两类API：usermodel和eventusermodel，即“用户模型”和“事件-用户模型”。前者很好理解，后者比较抽象，但操作效率要高得多。</font>
		</p>
		<p>
				<font face="宋体" size="2">三．开始编码</font>
		</p>
		<p>
				<font face="宋体" size="2">1 ． 准备工作</font>
		</p>
		<p>
				<font face="宋体" size="2">要求:JDK 1.4+POI开发包</font>
		</p>
		<p>
				<font face="宋体" size="2">可以到</font>
				<a href="http://www.apache.org/dyn/closer.cgi/jakarta/poi/">
						<font face="宋体" size="2">http://www.apache.org/dyn/closer.cgi/jakarta/poi/</font>
				</a>
				<font face="宋体" size="2">最新的POI工具包</font>
		</p>
		<p>
				<font face="宋体" size="2">2 ． EXCEL 结构</font>
		</p>
		<p>
				<font face="宋体" size="2">HSSFWorkbook excell 文档对象介绍<br />HSSFSheet excell的表单<br />HSSFRow excell的行<br />HSSFCell excell的格子单元<br />HSSFFont excell字体<br />HSSFName 名称<br />HSSFDataFormat 日期格式<br />在poi1.7中才有以下2项：<br />HSSFHeader sheet头<br />HSSFFooter sheet尾<br />和这个样式<br />HSSFCellStyle cell样式<br />辅助操作包括<br />HSSFDateUtil 日期<br />HSSFPrintSetup 打印<br />HSSFErrorConstants 错误信息表</font>
		</p>
		<p>
				<font face="宋体" size="2">3 ．具体用法实例 （采用 usermodel ）</font>
		</p>
		<p>
				<font face="宋体" size="2">如何读Excel</font>
		</p>
		<p>
				<font face="宋体" size="2">读取Excel文件时，首先生成一个POIFSFileSystem对象，由POIFSFileSystem对象构造一个HSSFWorkbook，该HSSFWorkbook对象就代表了Excel文档。下面代码读取上面生成的Excel文件写入的消息字串：<br />try{<br />   POIFSFileSystem fs=new POIFSFileSystem(new FileInputStream("d:/workbook.xls"));<br />   HSSFWorkbook wb = new HSSFWorkbook(fs);<br />   HSSFSheet sheet = wb.getSheetAt(0);<br />   HSSFRow row = sheet.getRow(0);<br />   HSSFCell cell = row.getCell((short) 0);<br />   String msg = cell.getStringCellValue();<br />   System.out.println(msg);<br />  }catch(Exception e){<br />   e.printStackTrace();<br />  }</font>
		</p>
		<p>
				<font face="宋体" size="2">如何写excel，</font>
		</p>
		<p>
				<font face="宋体" size="2">将excel的第一个表单第一行的第一个单元格的值写成“a test”。</font>
		</p>
		<p>
				<font face="宋体" size="2">POIFSFileSystem fs =new POIFSFileSystem(new FileInputStream("workbook.xls"));</font>
		</p>
		<p>
				<font face="宋体" size="2">    HSSFWorkbook wb = new HSSFWorkbook(fs);</font>
		</p>
		<p>
				<font face="宋体" size="2">    HSSFSheet sheet = wb.getSheetAt(0);</font>
		</p>
		<p>
				<font face="宋体" size="2">    HSSFRow row = sheet.getRow(0);</font>
		</p>
		<p>
				<font face="宋体" size="2">    HSSFCell cell = row.getCell((short)0);</font>
		</p>
		<p>
				<font face="宋体" size="2">    cell.setCellValue("a test");</font>
		</p>
		<p>
				<font face="宋体" size="2">    // Write the output to a file</font>
		</p>
		<p>
				<font face="宋体" size="2">    FileOutputStream fileOut = new FileOutputStream("workbook.xls");</font>
		</p>
		<p>
				<font face="宋体" size="2">    wb.write(fileOut);</font>
		</p>
		<p>
				<font face="宋体" size="2">fileOut.close();</font>
		</p>
		<p>
				<font face="宋体" size="2">4 ． 可参考文档</font>
		</p>
		<p>
				<font face="宋体" size="2">POI 主页：</font>
				<a href="http://jakarta.apache.org/poi/">
						<font face="宋体" size="2">http://jakarta.apache.org/poi/</font>
				</a>
				<font face="宋体" size="2">，</font>
		</p>
		<p>
				<font face="宋体" size="2">初学者如何快速上手使用POI HSSF</font>
		</p>
		<p>
				<a href="http://jakarta.apache.org/poi/hssf/quick-guide.html">
						<font face="宋体" size="2">http://jakarta.apache.org/poi/hssf/quick-guide.html</font>
				</a>
				<font face="宋体" size="2">。</font>
		</p>
		<p>
				<font face="宋体" size="2">里面有很多例子代码，可以很方便上手。</font>
		</p>
		<p>
				<font face="宋体" size="2">四．使用心得</font>
		</p>
		<p>
				<font face="宋体" size="2">POI HSSF 的usermodel包把Excel文件映射成我们熟悉的结构，诸如Workbook、Sheet、Row、Cell等，它把整个结构以一组对象的形式保存在内存之中，便于理解，操作方便，基本上能够满足我们的要求，所以说这个一个不错的选择。</font>
		</p>
		<p>
				<font color="#000066">
						<strong>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<br /></strong>前面已经讲过利用POI读写Excel，下面是一个用POI向Excel中插入图片的例子。<br /><br /></font>
				<font color="#000066">
						<span class="postbody" twffan="done">官方文档：<br />Images are part of the drawing support. To add an image just call createPicture() on the drawing patriarch. At the time of writing the following types are supported:<br />PNG<br />JPG<br />DIB<br />It is not currently possible to read existing images and it should be noted that any existing drawings may be erased once you add a image to a sheet.<br /><br />// Create the drawing patriarch. This is the top level container for<br />// all shapes. This will clear out any existing shapes for that sheet.</span>
						<br />
						<br />
				</font>
				<font color="#000066">
						<span class="postbody" twffan="done">通过HSSFPatriarch类createPicture方法的在指定的wb中的sheet创建图片,它接受二个参数，第一个是HSSFClientAnchor，设定图片的大小。<br /><br /></span>
				</font>
		</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: #008080"> 1</span>
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> com.poi.hssf.test;<br /></span>
				<span style="COLOR: #008080"> 2</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080"> 3</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.io.FileOutputStream;<br /></span>
				<span style="COLOR: #008080"> 4</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.io.File;<br /></span>
				<span style="COLOR: #008080"> 5</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.io.ByteArrayOutputStream;<br /></span>
				<span style="COLOR: #008080"> 6</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.io.IOException;<br /></span>
				<span style="COLOR: #008080"> 7</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080"> 8</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.awt.image.BufferedImage;<br /></span>
				<span style="COLOR: #008080"> 9</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> javax.imageio.</span>
				<span style="COLOR: #000000">*</span>
				<span style="COLOR: #000000">;<br /></span>
				<span style="COLOR: #008080">10</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080">11</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> org.apache.poi.hssf.usermodel.HSSFWorkbook;<br /></span>
				<span style="COLOR: #008080">12</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> org.apache.poi.hssf.usermodel.HSSFSheet;<br /></span>
				<span style="COLOR: #008080">13</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> org.apache.poi.hssf.usermodel.HSSFPatriarch;<br /></span>
				<span style="COLOR: #008080">14</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> org.apache.poi.hssf.usermodel.HSSFClientAnchor;;<br /></span>
				<span style="COLOR: #008080">15</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080">16</span>
				<span style="COLOR: #000000">
						<img id="Codehighlighter1_440_2605_Open_Image" onclick="this.style.display='none'; Codehighlighter1_440_2605_Open_Text.style.display='none'; Codehighlighter1_440_2605_Closed_Image.style.display='inline'; Codehighlighter1_440_2605_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_440_2605_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_440_2605_Closed_Text.style.display='none'; Codehighlighter1_440_2605_Open_Image.style.display='inline'; Codehighlighter1_440_2605_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"> TestPOI </span>
				<span id="Codehighlighter1_440_2605_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_440_2605_Open_Text">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080">17</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
						</span>
						<span style="COLOR: #008080">18</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_486_2603_Open_Image" onclick="this.style.display='none'; Codehighlighter1_486_2603_Open_Text.style.display='none'; Codehighlighter1_486_2603_Closed_Image.style.display='inline'; Codehighlighter1_486_2603_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_486_2603_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_486_2603_Closed_Text.style.display='none'; Codehighlighter1_486_2603_Open_Image.style.display='inline'; Codehighlighter1_486_2603_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_486_2603_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_486_2603_Open_Text">
								<span style="COLOR: #000000">{<br /></span>
								<span style="COLOR: #008080">19</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            FileOutputStream fileOut </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">;<br /></span>
								<span style="COLOR: #008080">20</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            BufferedImage bufferImg </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">;<br /></span>
								<span style="COLOR: #008080">21</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            BufferedImage bufferImg1 </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">;<br /></span>
								<span style="COLOR: #008080">22</span>
								<span style="COLOR: #000000">
										<img id="Codehighlighter1_636_2010_Open_Image" onclick="this.style.display='none'; Codehighlighter1_636_2010_Open_Text.style.display='none'; Codehighlighter1_636_2010_Closed_Image.style.display='inline'; Codehighlighter1_636_2010_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_636_2010_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_636_2010_Closed_Text.style.display='none'; Codehighlighter1_636_2010_Open_Image.style.display='inline'; Codehighlighter1_636_2010_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span>
								<span style="COLOR: #0000ff">try</span>
								<span id="Codehighlighter1_636_2010_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_636_2010_Open_Text">
										<span style="COLOR: #000000">{<br /></span>
										<span style="COLOR: #008080">23</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                <br /></span>
										<span style="COLOR: #008080">24</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />          </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">先把读进来的图片放到一个ByteArrayOutputStream中，以便产生ByteArray</span>
										<span style="COLOR: #008000">
												<br />
										</span>
										<span style="COLOR: #008080">25</span>
										<span style="COLOR: #008000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										</span>
										<span style="COLOR: #000000">          ByteArrayOutputStream byteArrayOut </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> ByteArrayOutputStream();<br /></span>
										<span style="COLOR: #008080">26</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />          ByteArrayOutputStream byteArrayOut1 </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> ByteArrayOutputStream();<br /></span>
										<span style="COLOR: #008080">27</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />          bufferImg </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> ImageIO.read(</span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> File(</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">d:/PieChart.jpg</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">));<br /></span>
										<span style="COLOR: #008080">28</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />          bufferImg1 </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> ImageIO.read(</span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> File(</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">d:/fruitBarChart.jpg</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">));<br /></span>
										<span style="COLOR: #008080">29</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />          ImageIO.write(bufferImg,</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">jpg</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">,byteArrayOut);<br /></span>
										<span style="COLOR: #008080">30</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />          ImageIO.write(bufferImg1,</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">jpg</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">,byteArrayOut1);<br /></span>
										<span style="COLOR: #008080">31</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />          <br /></span>
										<span style="COLOR: #008080">32</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">创建一个工作薄</span>
										<span style="COLOR: #008000">
												<br />
										</span>
										<span style="COLOR: #008080">33</span>
										<span style="COLOR: #008000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										</span>
										<span style="COLOR: #000000">        HSSFWorkbook wb </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> HSSFWorkbook();<br /></span>
										<span style="COLOR: #008080">34</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        HSSFSheet sheet1 </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> wb.createSheet(</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">new sheet</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">);<br /></span>
										<span style="COLOR: #008080">35</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">HSSFRow row = sheet1.createRow(2);</span>
										<span style="COLOR: #008000">
												<br />
										</span>
										<span style="COLOR: #008080">36</span>
										<span style="COLOR: #008000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										</span>
										<span style="COLOR: #000000">        HSSFPatriarch patriarch </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> sheet1.createDrawingPatriarch();<br /></span>
										<span style="COLOR: #008080">37</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        HSSFClientAnchor anchor </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> HSSFClientAnchor(</span>
										<span style="COLOR: #000000">0</span>
										<span style="COLOR: #000000">,</span>
										<span style="COLOR: #000000">0</span>
										<span style="COLOR: #000000">,</span>
										<span style="COLOR: #000000">512</span>
										<span style="COLOR: #000000">,</span>
										<span style="COLOR: #000000">255</span>
										<span style="COLOR: #000000">,(</span>
										<span style="COLOR: #0000ff">short</span>
										<span style="COLOR: #000000">) </span>
										<span style="COLOR: #000000">1</span>
										<span style="COLOR: #000000">,</span>
										<span style="COLOR: #000000">1</span>
										<span style="COLOR: #000000">,(</span>
										<span style="COLOR: #0000ff">short</span>
										<span style="COLOR: #000000">)</span>
										<span style="COLOR: #000000">10</span>
										<span style="COLOR: #000000">,</span>
										<span style="COLOR: #000000">20</span>
										<span style="COLOR: #000000">);<br /></span>
										<span style="COLOR: #008080">38</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        HSSFClientAnchor anchor1 </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> HSSFClientAnchor(</span>
										<span style="COLOR: #000000">0</span>
										<span style="COLOR: #000000">,</span>
										<span style="COLOR: #000000">0</span>
										<span style="COLOR: #000000">,</span>
										<span style="COLOR: #000000">512</span>
										<span style="COLOR: #000000">,</span>
										<span style="COLOR: #000000">255</span>
										<span style="COLOR: #000000">,(</span>
										<span style="COLOR: #0000ff">short</span>
										<span style="COLOR: #000000">) </span>
										<span style="COLOR: #000000">2</span>
										<span style="COLOR: #000000">,</span>
										<span style="COLOR: #000000">30</span>
										<span style="COLOR: #000000">,(</span>
										<span style="COLOR: #0000ff">short</span>
										<span style="COLOR: #000000">)</span>
										<span style="COLOR: #000000">10</span>
										<span style="COLOR: #000000">,</span>
										<span style="COLOR: #000000">60</span>
										<span style="COLOR: #000000">);<br /></span>
										<span style="COLOR: #008080">39</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        anchor1.setAnchorType(</span>
										<span style="COLOR: #000000">2</span>
										<span style="COLOR: #000000">);<br /></span>
										<span style="COLOR: #008080">40</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">插入图片</span>
										<span style="COLOR: #008000">
												<br />
										</span>
										<span style="COLOR: #008080">41</span>
										<span style="COLOR: #008000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										</span>
										<span style="COLOR: #000000">        patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));<br /></span>
										<span style="COLOR: #008080">42</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        patriarch.createPicture(anchor1 , wb.addPicture(byteArrayOut1.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));<br /></span>
										<span style="COLOR: #008080">43</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span>
										<span style="COLOR: #008080">44</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            fileOut </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">new</span>
										<span style="COLOR: #000000"> FileOutputStream(</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">d:/workbook.xls</span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">);<br /></span>
										<span style="COLOR: #008080">45</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span>
										<span style="COLOR: #008000">//</span>
										<span style="COLOR: #008000">写入excel文件</span>
										<span style="COLOR: #008000">
												<br />
										</span>
										<span style="COLOR: #008080">46</span>
										<span style="COLOR: #008000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
										</span>
										<span style="COLOR: #000000">            wb.write(fileOut);<br /></span>
										<span style="COLOR: #008080">47</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            fileOut.close();<br /></span>
										<span style="COLOR: #008080">48</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span>
										<span style="COLOR: #008080">49</span>
										<span style="COLOR: #000000">
												<img id="Codehighlighter1_2032_2161_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2032_2161_Open_Text.style.display='none'; Codehighlighter1_2032_2161_Closed_Image.style.display='inline'; Codehighlighter1_2032_2161_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
												<img id="Codehighlighter1_2032_2161_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2032_2161_Closed_Text.style.display='none'; Codehighlighter1_2032_2161_Open_Image.style.display='inline'; Codehighlighter1_2032_2161_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            }</span>
								</span>
								<span style="COLOR: #0000ff">catch</span>
								<span style="COLOR: #000000">(IOException io)</span>
								<span id="Codehighlighter1_2032_2161_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_2032_2161_Open_Text">
										<span style="COLOR: #000000">{<br /></span>
										<span style="COLOR: #008080">50</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    io.printStackTrace();<br /></span>
										<span style="COLOR: #008080">51</span>
										<span style="COLOR: #000000">
												<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">io erorr :  </span>
										<span style="COLOR: #000000">"</span>
										<span style="COLOR: #000000">+</span>
										<span style="COLOR: #000000"> io.getMessage());<br /></span>
										<span style="COLOR: #008080">52</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span>
								</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">finally</span>
								<span style="COLOR: #000000">
										<br />
								</span>
								<span style="COLOR: #008080">53</span>
								<span style="COLOR: #000000">
										<img id="Codehighlighter1_2183_2597_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2183_2597_Open_Text.style.display='none'; Codehighlighter1_2183_2597_Closed_Image.style.display='inline'; Codehighlighter1_2183_2597_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_2183_2597_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2183_2597_Closed_Text.style.display='none'; Codehighlighter1_2183_2597_Open_Image.style.display='inline'; Codehighlighter1_2183_2597_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span>
								<span id="Codehighlighter1_2183_2597_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_2183_2597_Open_Text">
										<span style="COLOR: #000000">{<br /></span>
										<span style="COLOR: #008080">54</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span>
										<span style="COLOR: #0000ff">if</span>
										<span style="COLOR: #000000"> (fileOut </span>
										<span style="COLOR: #000000">!=</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">null</span>
										<span style="COLOR: #000000">)<br /></span>
										<span style="COLOR: #008080">55</span>
										<span style="COLOR: #000000">
												<img id="Codehighlighter1_2238_2583_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2238_2583_Open_Text.style.display='none'; Codehighlighter1_2238_2583_Closed_Image.style.display='inline'; Codehighlighter1_2238_2583_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
												<img id="Codehighlighter1_2238_2583_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2238_2583_Closed_Text.style.display='none'; Codehighlighter1_2238_2583_Open_Image.style.display='inline'; Codehighlighter1_2238_2583_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span>
										<span id="Codehighlighter1_2238_2583_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_2238_2583_Open_Text">
												<span style="COLOR: #000000">{<br /></span>
												<span style="COLOR: #008080">56</span>
												<span style="COLOR: #000000">
														<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                           <br /></span>
												<span style="COLOR: #008080">57</span>
												<span style="COLOR: #000000">
														<img id="Codehighlighter1_2292_2366_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2292_2366_Open_Text.style.display='none'; Codehighlighter1_2292_2366_Closed_Image.style.display='inline'; Codehighlighter1_2292_2366_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
														<img id="Codehighlighter1_2292_2366_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2292_2366_Closed_Text.style.display='none'; Codehighlighter1_2292_2366_Open_Image.style.display='inline'; Codehighlighter1_2292_2366_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_2292_2366_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_2292_2366_Open_Text">
														<span style="COLOR: #000000">{<br /></span>
														<span style="COLOR: #008080">58</span>
														<span style="COLOR: #000000">
																<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                              fileOut.close();<br /></span>
														<span style="COLOR: #008080">59</span>
														<span style="COLOR: #000000">
																<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                         }</span>
												</span>
												<span style="COLOR: #000000">
														<br />
												</span>
												<span style="COLOR: #008080">60</span>
												<span style="COLOR: #000000">
														<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    </span>
												<span style="COLOR: #0000ff">catch</span>
												<span style="COLOR: #000000"> (IOException e)<br /></span>
												<span style="COLOR: #008080">61</span>
												<span style="COLOR: #000000">
														<img id="Codehighlighter1_2430_2565_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2430_2565_Open_Text.style.display='none'; Codehighlighter1_2430_2565_Closed_Image.style.display='inline'; Codehighlighter1_2430_2565_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
														<img id="Codehighlighter1_2430_2565_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2430_2565_Closed_Text.style.display='none'; Codehighlighter1_2430_2565_Open_Image.style.display='inline'; Codehighlighter1_2430_2565_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                    </span>
												<span id="Codehighlighter1_2430_2565_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_2430_2565_Open_Text">
														<span style="COLOR: #000000">{<br /></span>
														<span style="COLOR: #008080">62</span>
														<span style="COLOR: #000000">
																<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                            </span>
														<span style="COLOR: #008000">//</span>
														<span style="COLOR: #008000"> TODO Auto-generated catch block</span>
														<span style="COLOR: #008000">
																<br />
														</span>
														<span style="COLOR: #008080">63</span>
														<span style="COLOR: #008000">
																<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
														</span>
														<span style="COLOR: #000000">                            e.printStackTrace();<br /></span>
														<span style="COLOR: #008080">64</span>
														<span style="COLOR: #000000">
																<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                     }</span>
												</span>
												<span style="COLOR: #000000">
														<br />
												</span>
												<span style="COLOR: #008080">65</span>
												<span style="COLOR: #000000">
														<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span>
										</span>
										<span style="COLOR: #000000">
												<br />
										</span>
										<span style="COLOR: #008080">66</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
								</span>
								<span style="COLOR: #008080">67</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080">68</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
<img src ="http://www.blogjava.net/czcode/aggbug/88448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2006-12-18 10:35 <a href="http://www.blogjava.net/czcode/archive/2006/12/18/88448.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Java动态代理实现AOP </title><link>http://www.blogjava.net/czcode/archive/2006/12/13/87433.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Wed, 13 Dec 2006 03:43:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2006/12/13/87433.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/87433.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2006/12/13/87433.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/87433.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/87433.html</trackback:ping><description><![CDATA[
		<p>目前整个开发社区对AOP(Aspect Oriented Programing)推崇备至，也涌现出大量支持AOP的优秀Framework,--Spring, JAC, Jboss AOP 等等。AOP似乎一时之间成了潮流。Java初学者不禁要发出感慨，OOP还没有学通呢，又来AOP。本文不是要在理论上具体阐述何为AOP, 为何要进行AOP . 要详细了解学习AOP可以到它老家http://aosd.net去瞧瞧。这里只是意图通过一个简单的例子向初学者展示一下如何来进行AOP.<br /><br />　　为了简单起见，例子没有没有使用任何第三方的AOP Framework, 而是利用Java语言本身自带的动态代理功能来实现AOP. <br /><br />　　让我们先回到AOP本身，AOP主要应用于日志记录，性能统计，安全控制,事务处理等方面。它的主要意图就要将日志记录，性能统计，安全控制等等代码从商业逻辑代码中清楚的划分出来，我们可以把这些行为一个一个单独看作系统所要解决的问题，就是所谓的面向问题的编程(不知将AOP译作面向问题的编程是否欠妥)。通过对这些行为的分离，我们希望可以将它们独立地配置到商业方法中，而要改变这些行为也不需要影响到商业方法代码。 <br /><br />　　假设系统由一系列的BusinessObject所完成业务逻辑功能，系统要求在每一次业务逻辑处理时要做日志记录。这里我们略去具体的业务逻辑代码。 <br /><br />public interface BusinessInterface { <br />　public void processBusiness(); <br />} <br /><br />public class BusinessObject implements BusinessInterface { <br />　private Logger logger = Logger.getLogger(this.getClass().getName()); <br />　public void processBusiness(){ <br />　　try { <br />　　　logger.info("start to processing..."); <br />　　　//business logic here. <br />　　　System.out.println(“here is business logic”); <br />　　　logger.info("end processing..."); <br />　　} catch (Exception e){ <br />　　　logger.info("exception happends..."); <br />　　　//exception handling <br />　　} <br />　} <br />} <br />　　这里处理商业逻辑的代码和日志记录代码混合在一起，这给日后的维护带来一定的困难，并且也会造成大量的代码重复。完全相同的log代码将出现在系统的每一个BusinessObject中。 <br /><br />　　按照AOP的思想，我们应该把日志记录代码分离出来。要将这些代码分离就涉及到一个问题，我们必须知道商业逻辑代码何时被调用，这样我们好插入日志记录代码。一般来说要截获一个方法，我们可以采用回调方法或者动态代理。动态代理一般要更加灵活一些，目前多数的AOP Framework也大都采用了动态代理来实现。这里我们也采用动态代理作为例子。 <br /><br />　　JDK1.2以后提供了动态代理的支持，程序员通过实现java.lang.reflect.InvocationHandler接口提供一个执行处理器，然后通过java.lang.reflect.Proxy得到一个代理对象，通过这个代理对象来执行商业方法,在商业方法被调用的同时，执行处理器会被自动调用。 <br /><br />　　有了JDK的这种支持，我们所要做的仅仅是提供一个日志处理器。 <br /><br />public class LogHandler implements InvocationHandler { <br /><br />　private Logger logger ＝ Logger.getLogger(this.getClass().getName()); <br />　　private Object delegate; <br />　　public LogHandler(Object delegate){ <br />　　　this.delegate = delegate; <br />　　} <br /><br />　public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { <br />　　Object o = null; <br />　　try { <br />　　　logger.info("method stats..." ＋ method); <br />　　　o = method.invoke(delegate,args); <br />　　　logger.info("method ends..." + method); <br />　　} catch (Exception e){ <br />　　　logger.info("Exception happends..."); <br />　　　//excetpion handling. <br />　　} <br />　　return o; <br />　} <br />} <br />　　现在我们可以把BusinessObject里面的所有日志处理代码全部去掉了。 <br /><br />public class BusinessObject implements BusinessInterface { <br /><br />　private Logger logger = Logger.getLogger(this.getClass().getName()); <br />　public void processBusiness(){ <br />　　//business processing <br />　　System.out.println(“here is business logic”); <br />　} <br />} <br />　　客户端调用商业方法的代码如下：<br /><br />BusinessInterface businessImp = new BusinessObject(); <br /><br />InvocationHandler handler = new LogHandler(businessImp); <br /><br />BusinessInterface proxy = (BusinessInterface) Proxy.newProxyInstance( <br />　businessImp.getClass().getClassLoader(), <br />　businessImp.getClass().getInterfaces(), <br />　handler); <br /><br />proxy.processBusiness(); <br />　　程序输出如下： <br /><br />INFO: method stats... <br />here is business logic <br />INFO: method ends... <br />　　至此我们的第一次小尝试算是完成了。可以看到，采用AOP之后，日志记录和业务逻辑代码完全分开了，以后要改变日志记录的话只需要修改日志记录处理器就行了，而业务对象本身（BusinessObject）无需做任何修改。并且这个日志记录不会造成重复代码了，所有的商业处理对象都可以重用这个日志处理器。 <br /><br />　　当然在实际应用中，这个例子就显得太粗糙了。由于JDK的动态代理并没有直接支持一次注册多个InvocationHandler，那么我们对业务处理方法既要日志记录又要性能统计时，就需要自己做一些变通了。一般我们可以自己定义一个Handler接口，然后维护一个队列存放所有Handler, 当InvocationHandler被触发的时候我们依次调用自己的Handler。所幸的是目前几乎所有的AOP Framework都对这方面提供了很好的支持.这里推荐大家使用Spring。<br /></p>
<img src ="http://www.blogjava.net/czcode/aggbug/87433.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2006-12-13 11:43 <a href="http://www.blogjava.net/czcode/archive/2006/12/13/87433.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用JS的延时</title><link>http://www.blogjava.net/czcode/archive/2006/12/06/85839.html</link><dc:creator>崔振</dc:creator><author>崔振</author><pubDate>Wed, 06 Dec 2006 06:22:00 GMT</pubDate><guid>http://www.blogjava.net/czcode/archive/2006/12/06/85839.html</guid><wfw:comment>http://www.blogjava.net/czcode/comments/85839.html</wfw:comment><comments>http://www.blogjava.net/czcode/archive/2006/12/06/85839.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czcode/comments/commentRss/85839.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czcode/services/trackbacks/85839.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: #008080"> 1</span> <span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> start</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> n;<br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> init(){<br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000">  start</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000">  }<br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> process(i){<br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">  n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">setTimeout(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">init()</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">);<br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">  </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(start</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">i){<br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000">   clearTimeout(n);<br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000">    start</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /></span><span style="COLOR: #008080">12</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这里写你需要执行的代码</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">13</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">  }<br /></span><span style="COLOR: #008080">14</span> <span style="COLOR: #000000">}<br /></span><span style="COLOR: #008080">15</span> <span style="COLOR: #000000"></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div>其中process(i) i为你要设置延迟的时间 秒为单位 <br />关于timeout:<br />它其实就是一个循环而已，在循环里调用它的第一个参数，第2个参数是Thread.sleep的时间间隔，当然如果你不在合适的时候clearTimeout的话，它将成为一个死循环 <img src ="http://www.blogjava.net/czcode/aggbug/85839.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czcode/" target="_blank">崔振</a> 2006-12-06 14:22 <a href="http://www.blogjava.net/czcode/archive/2006/12/06/85839.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>