﻿<?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-larry-java学习交流空间</title><link>http://www.blogjava.net/larry/</link><description>hibernate、spring、webwork、struts、Portal、ajax技术交流</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 08:53:18 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 08:53:18 GMT</pubDate><ttl>60</ttl><item><title>Java中抽象类和接口的区别</title><link>http://www.blogjava.net/larry/archive/2008/11/26/242753.html</link><dc:creator>larryjava</dc:creator><author>larryjava</author><pubDate>Wed, 26 Nov 2008 03:24:00 GMT</pubDate><guid>http://www.blogjava.net/larry/archive/2008/11/26/242753.html</guid><wfw:comment>http://www.blogjava.net/larry/comments/242753.html</wfw:comment><comments>http://www.blogjava.net/larry/archive/2008/11/26/242753.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/larry/comments/commentRss/242753.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/larry/services/trackbacks/242753.html</trackback:ping><description><![CDATA[<p>　　在Java语言中， abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在，才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性，甚至可以相互替换，因此很多开发者在进 行抽象类定义时对于abstract class和interface的选择显得比较随意。其实，两者之间还是有很大的区别的，对于它们的选择甚至反映出对 于问题领域本质的理解、对于设计意图的理解是否正确、合理。本文将对它们之间的区别进行一番剖析，试图给开发者提供一个在二者之间进行选择的依据。 </p>
<p><strong>　　理解抽象类</strong></p>
<p>　　abstract class和interface在Java语言中都是用来进行抽象类（本文 中的抽象类并非从abstract class翻译而来，它表示的是一个抽象体，而abstract class为Java语言中用于定义抽象类的一种方法， 请读者注意区分）定义的，那么什么是抽象类，使用抽象类能为我们带来什么好处呢？</p>
<p>　　在 面向对象的概念中，我们知道所有的对象都是通过类来描绘的，但是反过来却不是这样。并不是 所有的类都是用来描绘对象的，如果一个类中没有包含足够的信息来描绘一个具体的对象，这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念，是对一系列看上去不同，但是本质上相同的具体概念的抽象。比如：如果我们进行一个图形编辑软件的开发，就会发现问题领域存在着圆、 三角形这样一些具体概念，它们是不同的，但是它们又都属于形状这样一个概念，形状这个概念在问题领域是不存在的，它就是一个抽象概念。正是因为抽象的概念 在问题领域没有对应的具体概念，所以用以表征抽象概念的抽象类是不能够实例化的。</p>
<p>　　在面向对象领域，抽象类主要用来进行类型隐藏。 我们可以构造出一个固定的一组行为的抽象描 述，但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类，而这一组任意个可能的具体实现则表现为所有可能的派生类。模块可以操作一个 抽象体。由于模块依赖于一个固定的抽象体，因此它可以是不允许修改的；同时，通过从这个抽象体派生，也可扩展此模块的行为功能。熟悉OCP的读者一定知 道，为了能够实现面向对象设计的一个最核心的原则OCP(Open-Closed Principle)，抽象类是其中的关键所在。</p>
<p>　　从语法定义层面看abstract class 和 interface</p>
<p>　　在语法层面，Java语言对于abstract class和interface给出了不同的定义方式，下面以定义一个名为Demo的抽象类为例来说明这种不同。</p>
<p>　　使用abstract class的方式定义Demo抽象类的方式如下：</p>
<p>abstract class Demo｛<br />
abstract void method1();<br />
abstract void method2();<br />
&#8230;<br />
｝<br />
　　使用interface的方式定义Demo抽象类的方式如下：</p>
<p>interface Demo{<br />
void method1();<br />
void method2();<br />
&#8230;<br />
}<br />
　　在abstract class方式中，Demo可以有自己的数据成员，也可以有非 abstract的成员方法，而在interface方式的实现中，Demo只能够有静态的不能被修改的数据成员（也就是必须是static final 的，不过在interface中一般不定义数据成员），所有的成员方法都是abstract的。从某种意义上说，interface是一种特殊形式的 abstract class。</p>
<p>　　从编程的角度来看，abstract class和interface都可以用来实现 "design by contract" 的思想。但是在具体的使用上面还是有一些区别的。</p>
<p>　　首先，abstract class 在 Java 语言中表示的是一种继承关系，一个类只能使用一次继承关系(因为Java不支持多继承 -- 转注)。但是，一个类却可以实现多个interface。也许，这是Java语言的设计者在考虑Java对于多重继承的支持方面的一种折中考虑吧。</p>
<p>　　其次，在abstract class的定义中，我们可以赋予方法的默认行为。但是在interface的定义中，方法却不能拥有默认行为，为了绕过这个限制，必须使用委托，但是这会增加一些复杂性，有时会造成很大的麻烦。</p>
<p>　　在 抽象类中不能定义默认行为还存在另一个比较严重的问题，那就是可能会造成维护上的麻烦。因 为如果后来想修改类的界面（一般通过 abstract class 或者interface来表示）以适应新的情况（比如，添加新的方法或者给已用的方法中添 加新的参数）时，就会非常的麻烦，可能要花费很多的时间（对于派生类很多的情况，尤为如此）。但是如果界面是通过abstract class来实现的，那 么可能就只需要修改定义在abstract class中的默认行为就可以了。</p>
<p>　　同样，如果不能在抽象类中定义默认行为，就会导致同样的方法实现出现在该抽象类的每一个派生类中，违反了 "one rule，one place" 原则，造成代码重复，同样不利于以后的维护。因此，在abstract class和interface间进行选择时要非常的小心。</p>
<p><strong>　　从设计理念层面看 abstract class 和 interface</strong></p>
<p>　　上面主要从语法定义和编程的角度论述了abstract class和interface的区 别，这些层面的区别是比较低层次的、非本质的。本小节将从另一个层面：abstract class和interface所反映出的设计理念，来分析一下二者的区别。作者认为，从这个层面进行分析才能理解二者概念的本质所在。</p>
<p>　　前面已经提到过，abstract class在Java语言中体现了一种继承关系，要想使得 继承关系合理，父类和派生类之间必须存在"is-a"关系，即父类和派生类在概念本质上应该是相同的。对于interface来说则不然，并不要求interface的实现者和interface定义在概念本质上是一致的， 仅仅是实现了interface定义的契约而已。为了使论述便于理解，下面将通过一个简单的实例进行说明。</p>
<p>　　考虑这样一个例子，假设在我们的问题领域中有一个关于Door的抽象概念，该Door具有执行两个动作open和close，此时我们可以通过abstract class或者interface来定义一个表示该抽象概念的类型，定义方式分别如下所示：</p>
<p>　　使用abstract class方式定义Door：</p>
<p>abstract class Door{<br />
abstract void open();<br />
abstract void close()；<br />
}<br />
　　使用interface方式定义Door：</p>
<p>interface Door{<br />
void open();<br />
void close();<br />
}<br />
　　其他具体的Door类型可以extends使用abstract class方式定义的Door或者implements使用interface方式定义的Door。看起来好像使用abstract class和interface没有大的区别。</p>
<p>　　如果现在要求Door还要具有报警的功能。我们该如何设计针对该例子的类结构呢（在本例中， 主要是为了展示 abstract class 和interface 反映在设计理念上的区别，其他方面无关的问题都做了简化或者忽略）？下面将罗列出可能的解 决方案，并从设计理念层面对这些不同的方案进行分析。</p>
<p><strong>　　解决方案一：</strong></p>
<p>　　简单的在Door的定义中增加一个alarm方法，如下：</p>
<p>abstract class Door{<br />
abstract void open();<br />
abstract void close()；<br />
abstract void alarm();<br />
}<br />
　　或者</p>
<p>interface Door{<br />
void open();<br />
void close();<br />
void alarm();<br />
}<br />
　　那么具有报警功能的AlarmDoor的定义方式如下：</p>
<p>class AlarmDoor extends Door{<br />
void open(){&#8230;}<br />
void close(){&#8230;}<br />
void alarm(){&#8230;}<br />
}<br />
　　或者</p>
<p>class AlarmDoor implements Door｛<br />
void open(){&#8230;}<br />
void close(){&#8230;}<br />
void alarm(){&#8230;}<br />
｝<br />
　　这种方法违反了面向对象设计中的一个核心原则 ISP (Interface Segregation Principle)，在Door的定义中把Door概念本身固有的行为方法和另外一个概念"报警器"的行为方 法混在了一起。这样引起的一个问题是那些仅仅依赖于Door这个概念的模块会因为"报警器"这个概念的改变（比如：修改alarm方法的参数）而改变，反 之依然。</p>
<p><strong>　　解决方案二：</strong></p>
<p>　　既然open、close和alarm属于两个不同的概念，根据ISP原则应该把它们分别定 义在代表这两个概念的抽象类中。定义方式有：这两个概念都使用 abstract class 方式定义；两个概念都使用interface方式定义；一个概念 使用 abstract class 方式定义，另一个概念使用interface方式定义。</p>
<p>　　显然，由于Java语言不支持多重继承，所以两个概念都使用abstract class方式定义是不可行的。后面两种方式都是可行的，但是对于它们的选择却反映出对于问题领域中的概念本质的理解、对于设计意图的反映是否正确、合理。我们一一来分析、说明。</p>
<p>　　如果两个概念都使用interface方式来定义，那么就反映出两个问题：1、我们可能没有 理解清楚问题领域，AlarmDoor在概念本质上到底是Door还是报警器？2、如果我们对于问题领域的理解没有问题，比如：我们通过对于问题领域的分 析发现AlarmDoor在概念本质上和Door是一致的，那么我们在实现时就没有能够正确的揭示我们的设计意图，因为在这两个概念的定义上（均使用 interface方式定义）反映不出上述含义。</p>
<p>　　如果我们对于问题领域的理解是：AlarmDoor在概念本质上是Door，同时它有具有报 警的功能。我们该如何来设计、实现来明确的反映出我们的意思呢？前面已经说过，abstract class在Java语言中表示一种继承关系，而继承关系 在本质上是"is-a"关系。所以对于Door这个概念，我们应该使用abstarct class方式来定义。另外，AlarmDoor又具有报警功能，说 明它又能够完成报警概念中定义的行为，所以报警概念可以通过interface方式定义。如下所示：</p>
<p>abstract class Door{<br />
abstract void open();<br />
abstract void close()；<br />
}<br />
interface Alarm{<br />
void alarm();<br />
}<br />
class Alarm Door extends Door implements Alarm{<br />
void open(){&#8230;}<br />
void close(){&#8230;}<br />
void alarm(){&#8230;}<br />
}<br />
　　这种实现方式基本上能够明确的反映出我们对于问题领域的理解，正确的揭示我们的设计意图。其 实abstract class表示的是"is-a"关系，interface表示的是"like-a"关系，大家在选择时可以作为一个依据，当然这是建立在对问题领域的理解上的，比如：如果我们认为AlarmDoor在概念本质上是报警器，同时又具有Door的功能，那么上述的定义方式就要反过来了。</p>
<p><strong>　　小结</strong></p>
<p>　　1.abstract class 在 Java 语言中表示的是一种继承关系，一个类只能使用一次继承关系。但是，一个类却可以实现多个interface。</p>
<p>　　2.在abstract class 中可以有自己的数据成员，也可以有非abstarct的成员方法，而在interface中，只能够有静态的不能被修改的数据成员（也就是必须是static final的，不过在 interface中一般不定义数据成员），所有的成员方法都是abstract的。</p>
<p>　　3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系，interface表示的是"like-a"关系。 </p>
<p>　　4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。</p>
<p>　　5.接口中定义的变量默认是public static final 型，且必须给其初值，所以实现类中不能重新定义，也不能改变其值。</p>
<p>　　6.抽象类中的变量默认是 friendly 型，其值可以在子类中重新定义，也可以重新赋值。 </p>
<p>　　7.接口中的方法默认都是 public,abstract 类型的。</p>
<p><strong>　　结论</strong></p>
<p>　　abstract class 和 interface 是 Java语言中的两种定义抽象类的方式，它们之间有很大的相似性。但是对于它们的选择却又往往反映出对于问题领域中的概 念本质的理解、对于设计意图的反映是否正确、合理，因为它们表现了概念间的不同的关系（虽然都能够实现需求的功能）。这其实也是语言的一种的惯用法，希望读者朋友能够细细体会。</p>
<img src ="http://www.blogjava.net/larry/aggbug/242753.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/larry/" target="_blank">larryjava</a> 2008-11-26 11:24 <a href="http://www.blogjava.net/larry/archive/2008/11/26/242753.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面试记录</title><link>http://www.blogjava.net/larry/archive/2008/11/26/242752.html</link><dc:creator>larryjava</dc:creator><author>larryjava</author><pubDate>Wed, 26 Nov 2008 03:23:00 GMT</pubDate><guid>http://www.blogjava.net/larry/archive/2008/11/26/242752.html</guid><wfw:comment>http://www.blogjava.net/larry/comments/242752.html</wfw:comment><comments>http://www.blogjava.net/larry/archive/2008/11/26/242752.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/larry/comments/commentRss/242752.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/larry/services/trackbacks/242752.html</trackback:ping><description><![CDATA[<span style="color: red">1.为什么要用抽象类实现接口</span><br />
&nbsp;&nbsp; 答：
<p>抽象类和接口比起来，有一个好处，就是某些函数可以实现具体的方法，而并不一定是声明抽象的方法，而接口只能声明抽象方法，所以用一个抽象类来实现某个接口可以实现一些通用的方法，而这些具体实现的方法里还可以调用抽象方法，所以减少了子类中的重复代码。</p>
<p>java库里也有不少这这样的设计，</p>
<p>比如java.util.AbstractList实现了java.util.List,而其实某些方法就是调用了抽象方法。</p>
<p>还有一个好处就是可以给子类一个默认的实现，而不必给所有的子类实现所有的方法。</p>
<p>另外还有一个好处就是可以提供一些公用的方法给子类使用。</p>
2.
<img src ="http://www.blogjava.net/larry/aggbug/242752.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/larry/" target="_blank">larryjava</a> 2008-11-26 11:23 <a href="http://www.blogjava.net/larry/archive/2008/11/26/242752.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring+quartz的定时器功能</title><link>http://www.blogjava.net/larry/archive/2008/11/06/239068.html</link><dc:creator>larryjava</dc:creator><author>larryjava</author><pubDate>Thu, 06 Nov 2008 09:06:00 GMT</pubDate><guid>http://www.blogjava.net/larry/archive/2008/11/06/239068.html</guid><wfw:comment>http://www.blogjava.net/larry/comments/239068.html</wfw:comment><comments>http://www.blogjava.net/larry/archive/2008/11/06/239068.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/larry/comments/commentRss/239068.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/larry/services/trackbacks/239068.html</trackback:ping><description><![CDATA[第一种通过spring中的CronTrigger复杂触发器实现<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Code_Open_Image_170933" style="display: none" onclick="this.style.display='none'; Code_Open_Text_170933.style.display='none'; Code_Closed_Image_170933.style.display='inline'; Code_Closed_Text_170933.style.display='inline';" height="16" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"  alt="" /><span id="Code_Open_Text_170933" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">&lt;!--</span><span style="color: #008000">要调度的对象</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="job"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="com.ApManager.util.TJob"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="scheduler"</span><span style="color: #ff0000">&nbsp;ref</span><span style="color: #0000ff">="schedulerFactory"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="scheduleInfoManager"</span><span style="color: #ff0000">&nbsp;ref</span><span style="color: #0000ff">="scheduleInfoManager"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;定义目标bean和bean中的方法&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="jobtask"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="targetObject"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ref&nbsp;</span><span style="color: #ff0000">local</span><span style="color: #0000ff">="job"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="targetMethod"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">doAuth</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="concurrent"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="false"</span><span style="color: #0000ff">/&gt;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;对于相同的JobDetail，当指定多个Trigger时,&nbsp;很可能第一个job完成之前，第二个job就开始了。指定concurrent设为false，多个job不会并发运行，第二个job将不会在第一个job完成之前开始&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;定义触发的时间&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id&nbsp;</span><span style="color: #0000ff">=&nbsp;"cron"</span><span style="color: #ff0000">&nbsp;class&nbsp;</span><span style="color: #0000ff">=&nbsp;"org.springframework.scheduling.quartz.CronTriggerBean"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="jobDetail"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ref&nbsp;</span><span style="color: #ff0000">bean</span><span style="color: #0000ff">="jobtask"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="cronExpression"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">0&nbsp;*&nbsp;11&nbsp;*&nbsp;*&nbsp;?</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;总管理&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">autowire&nbsp;</span><span style="color: #0000ff">=&nbsp;"no"</span><span style="color: #ff0000">&nbsp;class&nbsp;</span><span style="color: #0000ff">=&nbsp;"org.springframework.scheduling.quartz.SchedulerFactoryBean"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="triggers"</span><span style="color: #0000ff">&gt;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;triggers：通过再添加其他的ref元素可在list中放置多个触发器&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ref&nbsp;</span><span style="color: #ff0000">local&nbsp;</span><span style="color: #0000ff">="cron"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span></span></div>
<br />
第二通过spring中的SimpleTrigger简单触发器实现<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Code_Open_Image_170541" style="display: none" onclick="this.style.display='none'; Code_Open_Text_170541.style.display='none'; Code_Closed_Image_170541.style.display='inline'; Code_Closed_Text_170541.style.display='inline';" height="16" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" /><span id="Code_Open_Text_170541" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="simpleTrigger"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="org.springframework.scheduling.quartz.SimpleTriggerBean"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="jobDetail"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ref&nbsp;</span><span style="color: #ff0000">bean</span><span style="color: #0000ff">="methodInvokingJobDetail"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="startDelay"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1000</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="repeatInterval"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">3000</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span></span></div>
<br />
<hr />
参考：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.javaeye.com/topic/115666" target="_blank">http://www.javaeye.com/topic/115666</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.javaeye.com/topic/117244" target="_blank">http://www.javaeye.com/topic/117244</a><br />
<br />
<br />
<img src ="http://www.blogjava.net/larry/aggbug/239068.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/larry/" target="_blank">larryjava</a> 2008-11-06 17:06 <a href="http://www.blogjava.net/larry/archive/2008/11/06/239068.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>教你一步步搭建功能强大的开源邮件服务</title><link>http://www.blogjava.net/larry/archive/2008/09/19/230016.html</link><dc:creator>larryjava</dc:creator><author>larryjava</author><pubDate>Fri, 19 Sep 2008 12:41:00 GMT</pubDate><guid>http://www.blogjava.net/larry/archive/2008/09/19/230016.html</guid><wfw:comment>http://www.blogjava.net/larry/comments/230016.html</wfw:comment><comments>http://www.blogjava.net/larry/archive/2008/09/19/230016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/larry/comments/commentRss/230016.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/larry/services/trackbacks/230016.html</trackback:ping><description><![CDATA[在这里希望和大家分享 iRedMail 开源邮件方案的详细安装、配置文档，希望对大家有所帮助。<br />
<br />
基于 Postfix + MySQL 的文档：<a href="http://www.iredmail.org/wiki/index.php/IRedMail-doc-MySQL-0.2" target="_blank">http://www.iredmail.org/wiki/index.php/IRedMail-doc-MySQL-0.2</a><br />
基于 Postfix + OpenLDAP 的文档：<a href="http://www.iredmail.org/wiki/index.php/IRedMail-doc-OpenLDAP-0.2" target="_blank">http://www.iredmail.org/wiki/index.php/IRedMail-doc-OpenLDAP-0.2</a><br />
<br />
Extmail webmail系统&nbsp; <a href="http://www.extmail.org/">http://www.extmail.org/</a> <br />
Postfix&nbsp; <a href="http://www.postfix.org.cn">http://www.postfix.org.cn</a>
<img src ="http://www.blogjava.net/larry/aggbug/230016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/larry/" target="_blank">larryjava</a> 2008-09-19 20:41 <a href="http://www.blogjava.net/larry/archive/2008/09/19/230016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate sum 函数的使用</title><link>http://www.blogjava.net/larry/archive/2008/05/09/199470.html</link><dc:creator>larryjava</dc:creator><author>larryjava</author><pubDate>Fri, 09 May 2008 05:17:00 GMT</pubDate><guid>http://www.blogjava.net/larry/archive/2008/05/09/199470.html</guid><wfw:comment>http://www.blogjava.net/larry/comments/199470.html</wfw:comment><comments>http://www.blogjava.net/larry/archive/2008/05/09/199470.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/larry/comments/commentRss/199470.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/larry/services/trackbacks/199470.html</trackback:ping><description><![CDATA[<h3>使用Hibernate的sum函数进行数据的统计时,出现一个错误: </h3>
<p>&nbsp;</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 alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">String&nbsp;sql&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">select&nbsp;SUM(nf.fee)&nbsp;from&nbsp;CFee&nbsp;as&nbsp;nf&nbsp;where&nbsp;&nbsp;&nbsp;nf.adminAccount='testaccount'&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_138_405_Open_Image" onclick="this.style.display='none'; Codehighlighter1_138_405_Open_Text.style.display='none'; Codehighlighter1_138_405_Closed_Image.style.display='inline'; Codehighlighter1_138_405_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_138_405_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_138_405_Closed_Text.style.display='none'; Codehighlighter1_138_405_Open_Image.style.display='inline'; Codehighlighter1_138_405_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;getListSqlCountsLong(String&nbsp;sql)&nbsp;</span><span id="Codehighlighter1_138_405_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_138_405_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beginTransaction();&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;li&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getSession().createQuery(sql).list();&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_273_311_Open_Image" onclick="this.style.display='none'; Codehighlighter1_273_311_Open_Text.style.display='none'; Codehighlighter1_273_311_Closed_Image.style.display='inline'; Codehighlighter1_273_311_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_273_311_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_273_311_Closed_Text.style.display='none'; Codehighlighter1_273_311_Open_Image.style.display='inline'; Codehighlighter1_273_311_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(li&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;li.isEmpty())&nbsp;</span><span id="Codehighlighter1_273_311_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_273_311_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_318_396_Open_Image" onclick="this.style.display='none'; Codehighlighter1_318_396_Open_Text.style.display='none'; Codehighlighter1_318_396_Closed_Image.style.display='inline'; Codehighlighter1_318_396_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_318_396_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_318_396_Closed_Text.style.display='none'; Codehighlighter1_318_396_Open_Image.style.display='inline'; Codehighlighter1_318_396_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_318_396_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_318_396_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;((Integer)&nbsp;li.get(</span><span style="color: #000000">0</span><span style="color: #000000">)).longValue();&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span></div>
这样使用报null错误. <br />
List的size明明等于1,但li.get(0)还是为空.(数据库中查询的账号sum本来就为null??可能是.) <br />
解决方法:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">String&nbsp;sql&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">select&nbsp;SUM(nf.fee)&nbsp;from&nbsp;CFee&nbsp;as&nbsp;nf&nbsp;where&nbsp;&nbsp;&nbsp;nf.adminAccount='testaccount'&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_138_491_Open_Image" onclick="this.style.display='none'; Codehighlighter1_138_491_Open_Text.style.display='none'; Codehighlighter1_138_491_Closed_Image.style.display='inline'; Codehighlighter1_138_491_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_138_491_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_138_491_Closed_Text.style.display='none'; Codehighlighter1_138_491_Open_Image.style.display='inline'; Codehighlighter1_138_491_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;getListSqlCountsLong(String&nbsp;sql)&nbsp;</span><span id="Codehighlighter1_138_491_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_138_491_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beginTransaction();&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;li&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getSession().createQuery(sql).list();&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_273_311_Open_Image" onclick="this.style.display='none'; Codehighlighter1_273_311_Open_Text.style.display='none'; Codehighlighter1_273_311_Closed_Image.style.display='inline'; Codehighlighter1_273_311_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_273_311_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_273_311_Closed_Text.style.display='none'; Codehighlighter1_273_311_Open_Image.style.display='inline'; Codehighlighter1_273_311_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(li&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">||</span><span style="color: #000000">&nbsp;li.isEmpty())&nbsp;</span><span id="Codehighlighter1_273_311_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_273_311_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_318_482_Open_Image" onclick="this.style.display='none'; Codehighlighter1_318_482_Open_Text.style.display='none'; Codehighlighter1_318_482_Closed_Image.style.display='inline'; Codehighlighter1_318_482_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_318_482_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_318_482_Closed_Text.style.display='none'; Codehighlighter1_318_482_Open_Image.style.display='inline'; Codehighlighter1_318_482_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_318_482_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_318_482_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_366_412_Open_Image" onclick="this.style.display='none'; Codehighlighter1_366_412_Open_Text.style.display='none'; Codehighlighter1_366_412_Closed_Image.style.display='inline'; Codehighlighter1_366_412_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_366_412_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_366_412_Closed_Text.style.display='none'; Codehighlighter1_366_412_Open_Image.style.display='inline'; Codehighlighter1_366_412_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(li.get(</span><span style="color: #000000">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_366_412_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_366_412_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;((Integer)&nbsp;li.get(</span><span style="color: #000000">0</span><span style="color: #000000">)).longValue();&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
解决方法很简单,就是增加一个判断就可以了,如果li.get(0)为空,则返回0,不为空,返回值. 
<img src ="http://www.blogjava.net/larry/aggbug/199470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/larry/" target="_blank">larryjava</a> 2008-05-09 13:17 <a href="http://www.blogjava.net/larry/archive/2008/05/09/199470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于JavaScript的gzip静态压缩方法 </title><link>http://www.blogjava.net/larry/archive/2008/02/22/181333.html</link><dc:creator>larryjava</dc:creator><author>larryjava</author><pubDate>Fri, 22 Feb 2008 03:32:00 GMT</pubDate><guid>http://www.blogjava.net/larry/archive/2008/02/22/181333.html</guid><wfw:comment>http://www.blogjava.net/larry/comments/181333.html</wfw:comment><comments>http://www.blogjava.net/larry/archive/2008/02/22/181333.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/larry/comments/commentRss/181333.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/larry/services/trackbacks/181333.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div class="blog_content">传统的JS压缩(删除注释,删除多余空格等)提供的压缩率有时还是不尽不意,幸亏现在的浏览器都支持压缩传输(通过设置http header的Content-Encoding=gzip),可以通过服务器的配置(如apache)为你的js提供压缩传输,或是appfuse中使用的GZipFilter使tomcat也提供这种能力 <br />
<br />
现在的问题是这种动态的压缩会导致服务器CPU占用率过高,现在我想到的解决辨法是通过提供静态压缩(就是将js预先通过gzip.exe压缩好) <br />
<br />
一.下面描述在tomcat中的应用 <br />
<br />
1.将prototype.js通过gzip.exe压缩保存成prototype.gzjs <br />
2.设置header,我编写了一个简单的AddHeadersFilter来将所有以gzjs结尾的文件增加设置header Content-Encoding=gzip <br />
web.xml中的配置 <br />
<pre class="java" name="code">	&lt;filter&gt;
&lt;filter-name&gt;AddHeaderFilter&lt;/filter-name&gt;
&lt;filter-class&gt;
badqiu.web.filter.AddHeaderFilter
&lt;/filter-class&gt;
&lt;init-param&gt;
&lt;param-name&gt;headers&lt;/param-name&gt;
&lt;param-value&gt;Content-Encoding=gzip&lt;/param-value&gt;
&lt;/init-param&gt;
&lt;/filter&gt;
&lt;filter-mapping&gt;
&lt;filter-name&gt;AddHeaderFilter&lt;/filter-name&gt;
&lt;url-pattern&gt;*.gzjs&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;
</pre>
<br />
<br />
测试prototype.js是否正常的代码 <br />
<pre class="java" name="code">&lt;html&gt;
&lt;head&gt;
&lt;!-- type="text/javascript"不可少,有些浏览器缺少这个不能运行,具体已经忘记了 --&gt;
&lt;script src="prototype.gzjs" type="text/javascript"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;input id="username" name="username" value="badqiu"/&gt;&lt;br /&gt;
&lt;input id="email" value="badqiu@gmail.com"/&gt;
&lt;script&gt;
&lt;!-- 测试prototype的方法是否正常--&gt;
alert($F('username'))
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<br />
<br />
在Apache httpd中可以直接通过在httpd.conf增加AddEncoding x-gzip .gzjs来映射.gzjs文件的header <br />
<br />
二.相关压缩率数据 <br />
1. prototype.js 1.5.0_rc0原始大小56KB,未经任何处理直接使用gzip压缩为12KB,总压缩率79% <br />
2. 通过js压缩工具压缩过的protytype.js为20KB,使用gzip压缩为10KB,总压缩率为83% <br />
3. 实际项目中的多个js合并成的文件 439KB,直接通过gzip压缩为85KB,总压缩率81% <br />
4. 439KB经过js压缩为165KB,再经过gzip压缩为65KB,总压缩率86% <br />
<br />
基本上你都可以忽略js压缩工具的压缩率,直接使用gzip压缩 <br />
<br />
gzip下载地址 <a href="http://www.gzip.org/" target="_blank">http://www.gzip.org</a> <br />
tomcat的压缩配置示例下载地址: <a href="http://www.blogjava.net/Files/badqiu/gziptest.rar">http://www.blogjava.net/Files/badqiu/gziptest.rar</a> </div>
<img src ="http://www.blogjava.net/larry/aggbug/181333.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/larry/" target="_blank">larryjava</a> 2008-02-22 11:32 <a href="http://www.blogjava.net/larry/archive/2008/02/22/181333.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache + Tomcat + Linux 集群和均衡负载 （Session 同步复制） 配置实践指南</title><link>http://www.blogjava.net/larry/archive/2008/01/13/175024.html</link><dc:creator>larryjava</dc:creator><author>larryjava</author><pubDate>Sun, 13 Jan 2008 12:48:00 GMT</pubDate><guid>http://www.blogjava.net/larry/archive/2008/01/13/175024.html</guid><wfw:comment>http://www.blogjava.net/larry/comments/175024.html</wfw:comment><comments>http://www.blogjava.net/larry/archive/2008/01/13/175024.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/larry/comments/commentRss/175024.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/larry/services/trackbacks/175024.html</trackback:ping><description><![CDATA[<p>经过我的多次测试实践，在linux和window下测试通过，win的比较简单，因为在默认的情况下，组播就已经打开。<br />
1 在linux 下同一台服务器上测试通过（注意端口不要冲突。特别要注意那个tcpListenPort=&#8221;4001&#8243; ）<br />
2 在window下的同一台服务器上测试通过，注意要点同上<br />
3 window下多台不同主机上测试通过，没有什么好注意点，可以完全备份一个tomcat<br />
4.linux多台不同tomcat服务器上测试通过。这个也是最后实现，最实际的方案。（一般不用在win下部署tomcatweb应用。呵呵。我觉得) </p>
<p>这里讲下第四中情况</p>
<p>先讲一下环境：都是在Red Hat Linux AS4上测试通过<br />
Apache:ip:192.168.1.11 (一台) 版本:2.0/2.2 （做均换负载服务器）<br />
Tomcat:ip1:192.168.1.12 ip2:192.168.1.13 （两台) 版本：5.0、5.5 （web应用的Real Server）<br />
Jdk:版本1.5 安装在 192.168.1.12 和192.168.1.13上的tomcat服务器上</p>
<p>安装tomcat和apache ,在这里就不讲了。<br />
软件都可以在www.apache.org 的网站上找到(apache,tomcat,mod_jk)</p>
<p>1.下载mod_jk.so 文件放到apache 下的modules下<br />
地址：http://apache.mirror.phpchina.com/tomcat/tomcat-connectors/jk/binaries/ 请选择正确的操作系统和Apache的版本。<br />
2.在apache的conf下建立文件workers.properties</p>
<p>添加内容：</p>
<div class="hl-surround">
<div class="hl-main">#<br />
# workers.properties<br />
#<br />
<br />
# list the workers by name<br />
worker.list=tomcatlb, status<br />
<br />
# localhost server 1<br />
# ------------------------<br />
worker.tomcat12.port=8009<br />
worker.tomcat12.host=192.168.1.12<br />
worker.tomcat12.type=ajp13<br />
worker.tomcat12.lbfactor=1<br />
worker.tomcat12.connection_pool_timeout=750<br />
worker.tomcat12.socket_keepalive=0<br />
worker.tomcat12.socket_timeout=300000<br />
worker.tomcat12.connect_timeout=10000<br />
worker.tomcat12.reply_timeout=330000<br />
<br />
# localhost server 3<br />
# ------------------------<br />
worker.tomcat13.port=8009<br />
worker.tomcat13.host=192.168.1.13<br />
worker.tomcat13.type=ajp13<br />
worker.tomcat13.lbfactor=1<br />
worker.tomcat13.connection_pool_timeout=750<br />
worker.tomcat13.socket_keepalive=0<br />
worker.tomcat13.socket_timeout=300000<br />
worker.tomcat13.connect_timeout=10000<br />
worker.tomcat13.reply_timeout=330000<br />
<br />
worker.tomcatlb.type=lb<br />
worker.retries=3<br />
worker.tomcatlb.balanced_workers=tomcat12,tomcat13<br />
worker.tomcatlb.sticky_session=1<br />
<br />
worker.status.type=status</div>
</div>
<p>3.在conf下添加一个mod_jk.conf文件</p>
<div class="hl-surround">
<div class="hl-main">LoadModule&nbsp; &nbsp; jk_module&nbsp; modules/mod_jk.so<br />
<br />
#configure mod_jk<br />
JkWorkersFile conf/workers.properties<br />
JkLogFile logs/mod_jk.log<br />
JkLogLevel debug</div>
</div>
<p>4.增加一个虚拟机配置文件vhosts.conf （这个不是必须的，可以将JkMount 的写其他的配置文件中）</p>
<div class="hl-surround">
<div class="hl-main">&lt;VirtualHost *:80&gt;<br />
&nbsp;&nbsp; &nbsp;ServerAdmin webmaster@dummy-host.example.com<br />
&nbsp;&nbsp; &nbsp;DocumentRoot /data/google<br />
&nbsp;&nbsp; &nbsp;ServerName my.linuxcoffee.org<br />
&nbsp;&nbsp; &nbsp;ErrorLog logs/my.linuxcoffee.org-error_log<br />
&nbsp;&nbsp; &nbsp;CustomLog logs/my.linuxcoffee.org-access_log common<br />
&nbsp;&nbsp; &nbsp;DirectoryIndex index.htm&nbsp; index.html<br />
<br />
JkMount /*.jsp tomcatlb<br />
JkMount /*.action tomcatlb<br />
JKMount /jkstatus status<br />
&lt;/VirtualHost&gt;</div>
</div>
<p>4.修改conf下的httpd.conf文件加上</p>
<div class="hl-surround">
<div class="hl-main">Include conf/vhosts.conf<br />
Include conf/mod_jk.conf</div>
</div>
<p>5.配置tomcat<br />
讲Cluster 前的注释去掉，启用tomcat集群功能。<br />
一般不需要修改什么东西，但在我这边，两台linux的tomcat就是死活找不到node，而同样的配置文件在window下的跑得很是正常。<br />
有个东西要说明下，因为tomcat的session同步功能需要用到组播，windows默认情况下是开通组播服务的，但是linux默认情况下并没有开通，可以通过指令打开route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0，如果需要服务器启动时即开通组播需在/etc/sysconfig/static-routes文件内加入eht0 net 224.0.0.0 netmask 240.0.0.0。具体组播概念请查阅CCNP相关内容。<br />
可以通过netstate -g 来查看组播状态，也可以在route -e 命令中看到</p>
<p>原来一直提示这个问题<br />
信息: Manager [/clusterapp]: skipping state transfer. No members active in cluster group.<br />
最后测试只要修改在Cluster之间的一段代码</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: olive">&lt;</span><span style="color: green">Receiver</span><span style="color: gray">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
</span><span style="color: #00008b">className</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red"><br />
org.apache.catalina.cluster.tcp.ReplicationListener</span><span style="color: #8b0000">"</span><span style="color: gray"><br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b">tcpListenAddress</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">auto</span><span style="color: #8b0000">"</span><span style="color: gray"><br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b">tcpListenPort</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">4001</span><span style="color: #8b0000">"</span><span style="color: gray"><br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b">tcpSelectorTimeout</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">100</span><span style="color: #8b0000">"</span><span style="color: gray"><br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b">tcpThreadCount</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">6</span><span style="color: #8b0000">"</span><span style="color: olive">/&gt;</span></div>
</div>
<p>改为</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: olive">&lt;</span><span style="color: green">Receiver</span><span style="color: gray">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
</span><span style="color: #00008b">className</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red"><br />
org.apache.catalina.cluster.tcp.ReplicationListener</span><span style="color: #8b0000">"</span><span style="color: gray"><br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b">tcpListenAddress</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">192.168.1.12</span><span style="color: #8b0000">"</span><span style="color: gray"><br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b">tcpListenPort</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">4001</span><span style="color: #8b0000">"</span><span style="color: gray"><br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b">tcpSelectorTimeout</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">100</span><span style="color: #8b0000">"</span><span style="color: gray"><br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #00008b">tcpThreadCount</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">6</span><span style="color: #8b0000">"</span><span style="color: olive">/&gt;</span></div>
</div>
<p>在13的服务器上也将这一段修改为自己的ip</p>
<p>然后打开jvmRoute ，跟workers.properties 的两个tomcat名字相匹配<br />
ip1</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: olive">&lt;</span><span style="color: green">Engine</span><span style="color: gray"> </span><span style="color: #00008b">name</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">Standalone</span><span style="color: #8b0000">"</span><span style="color: gray"> </span><span style="color: #00008b">defaultHost</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">localhost</span><span style="color: #8b0000">"</span><span style="color: gray"> </span><span style="color: #00008b">jvmRoute</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">tomcat12</span><span style="color: #8b0000">"</span><span style="color: olive">/&gt;</span></div>
</div>
<p>ip2</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: olive">&lt;</span><span style="color: green">Engine</span><span style="color: gray"> </span><span style="color: #00008b">name</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">Standalone</span><span style="color: #8b0000">"</span><span style="color: gray"> </span><span style="color: #00008b">defaultHost</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">localhost</span><span style="color: #8b0000">"</span><span style="color: gray"> </span><span style="color: #00008b">jvmRoute</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">tomcat13</span><span style="color: #8b0000">"</span><span style="color: olive">/&gt;</span></div>
</div>
<p>好了，apache和tomcat的配置好了，可以访问了。<br />
这里，再提供一个链接，可以监控和配置负载均衡的各种信息<br />
http://192.168.1.11/jkstatus或http://my.linuxcoffee.org、jkstatus来访问网站。</p>
<p>注：需要在web.xml的display-name后面 下加上一段。 这个跟顺序有关的，不然，xml文件会变红哦。</p>
<div class="hl-surround">
<div class="hl-main"><span style="color: olive">&lt;?</span><span style="color: green">xml</span><span style="color: gray"> </span><span style="color: #00008b">version</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">1.0</span><span style="color: #8b0000">"</span><span style="color: gray"> </span><span style="color: #00008b">encoding</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">UTF-8</span><span style="color: #8b0000">"</span><span style="color: olive">?&gt;</span><span style="color: gray"> <br />
</span><span style="color: olive">&lt;</span><span style="color: green">web-app</span><span style="color: gray"> </span><span style="color: #00008b">xmlns</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">http://java.sun.com/xml/ns/j2ee</span><span style="color: #8b0000">"</span><span style="color: gray"> </span><span style="color: #00008b">xmlns:xsi</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">http://www.w3.org/2001/XMLSchema-instance</span><span style="color: #8b0000">"</span><span style="color: gray"> </span><span style="color: #00008b">xsi:schemaLocation</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</span><span style="color: #8b0000">"</span><span style="color: gray"> </span><span style="color: #00008b">version</span><span style="color: gray">=</span><span style="color: #8b0000">"</span><span style="color: red">2.4</span><span style="color: #8b0000">"</span><span style="color: olive">&gt;</span><span style="color: gray"> <br />
</span><span style="color: olive">&lt;</span><span style="color: green">display-name</span><span style="color: olive">&gt;</span><span style="color: gray">TomcatDemo</span><span style="color: olive">&lt;/</span><span style="color: green">display-name</span><span style="color: olive">&gt;</span><span style="color: gray"> <br />
</span><span style="color: olive">&lt;</span><span style="color: green">distributable</span><span style="color: olive">/&gt;</span><span style="color: gray"> <br />
</span><span style="color: olive">&lt;/</span><span style="color: green">web-app</span><span style="color: olive">&gt;</span></div>
</div>
<p>参考文章：<br />
<a href="http://jakarta.apache.org/tomcat/tomcat-5.0-doc/index.html">Tomcat 5 Home Page</a><br />
<a href="http://jakarta.apache.org/tomcat/tomcat-5.0-doc/cluster-howto.html">Clustering Home Page on Tomcat site </a><br />
<a href="http://jakarta.apache.org/tomcat/tomcat-5.0-doc/balancer-howto.html">Load Balancer Home Page on Tomcat site </a></p>
<img src ="http://www.blogjava.net/larry/aggbug/175024.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/larry/" target="_blank">larryjava</a> 2008-01-13 20:48 <a href="http://www.blogjava.net/larry/archive/2008/01/13/175024.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关闭浏览器窗口时事件 </title><link>http://www.blogjava.net/larry/archive/2007/12/11/166916.html</link><dc:creator>larryjava</dc:creator><author>larryjava</author><pubDate>Tue, 11 Dec 2007 05:35:00 GMT</pubDate><guid>http://www.blogjava.net/larry/archive/2007/12/11/166916.html</guid><wfw:comment>http://www.blogjava.net/larry/comments/166916.html</wfw:comment><comments>http://www.blogjava.net/larry/archive/2007/12/11/166916.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/larry/comments/commentRss/166916.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/larry/services/trackbacks/166916.html</trackback:ping><description><![CDATA[<p>一<br />
&nbsp;&nbsp; </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"  alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;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;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;g_blnCheckUnload&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_89_197_Open_Image" onclick="this.style.display='none'; Codehighlighter1_89_197_Open_Text.style.display='none'; Codehighlighter1_89_197_Closed_Image.style.display='inline'; Codehighlighter1_89_197_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_89_197_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_89_197_Closed_Text.style.display='none'; Codehighlighter1_89_197_Open_Image.style.display='inline'; Codehighlighter1_89_197_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;RunOnBeforeUnload()&nbsp;</span><span id="Codehighlighter1_89_197_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"  alt="" /></span><span id="Codehighlighter1_89_197_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_118_191_Open_Image" onclick="this.style.display='none'; Codehighlighter1_118_191_Open_Text.style.display='none'; Codehighlighter1_118_191_Closed_Image.style.display='inline'; Codehighlighter1_118_191_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_118_191_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_118_191_Closed_Text.style.display='none'; Codehighlighter1_118_191_Open_Image.style.display='inline'; Codehighlighter1_118_191_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(g_blnCheckUnload)&nbsp;</span><span id="Codehighlighter1_118_191_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"  alt="" /></span><span id="Codehighlighter1_118_191_Open_Text"><span style="color: #000000">{window.event.returnValue&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;'You&nbsp;will&nbsp;lose&nbsp;any&nbsp;unsaved&nbsp;content';&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">body&nbsp;&nbsp;onbeforeunload</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">RunOnBeforeUnload()</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">body</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
二、<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;window.onbeforeunload()<br />
<img id="Codehighlighter1_42_192_Open_Image" onclick="this.style.display='none'; Codehighlighter1_42_192_Open_Text.style.display='none'; Codehighlighter1_42_192_Closed_Image.style.display='inline'; Codehighlighter1_42_192_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_42_192_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_42_192_Closed_Text.style.display='none'; Codehighlighter1_42_192_Open_Image.style.display='inline'; Codehighlighter1_42_192_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_42_192_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"  alt="" /></span><span id="Codehighlighter1_42_192_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(event.clientX</span><span style="color: #000000">&gt;</span><span style="color: #000000">document.body.clientWidth</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">event.clientY</span><span style="color: #000000">&lt;</span><span style="color: #000000">0</span><span style="color: #000000">||</span><span style="color: #000000">event.altKey)<br />
<img id="Codehighlighter1_121_163_Open_Image" onclick="this.style.display='none'; Codehighlighter1_121_163_Open_Text.style.display='none'; Codehighlighter1_121_163_Closed_Image.style.display='inline'; Codehighlighter1_121_163_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_121_163_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_121_163_Closed_Text.style.display='none'; Codehighlighter1_121_163_Open_Image.style.display='inline'; Codehighlighter1_121_163_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_121_163_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"  alt="" /></span><span id="Codehighlighter1_121_163_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.event.returnValue</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">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img id="Codehighlighter1_170_190_Open_Image" onclick="this.style.display='none'; Codehighlighter1_170_190_Open_Text.style.display='none'; Codehighlighter1_170_190_Closed_Image.style.display='inline'; Codehighlighter1_170_190_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_170_190_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_170_190_Closed_Text.style.display='none'; Codehighlighter1_170_190_Open_Image.style.display='inline'; Codehighlighter1_170_190_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_170_190_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"  alt="" /></span><span id="Codehighlighter1_170_190_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">你在刷新</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span></div>
<img src ="http://www.blogjava.net/larry/aggbug/166916.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/larry/" target="_blank">larryjava</a> 2007-12-11 13:35 <a href="http://www.blogjava.net/larry/archive/2007/12/11/166916.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>更新记录后关闭子窗口并刷新父窗口的Javascript </title><link>http://www.blogjava.net/larry/archive/2007/12/05/165521.html</link><dc:creator>larryjava</dc:creator><author>larryjava</author><pubDate>Wed, 05 Dec 2007 07:04:00 GMT</pubDate><guid>http://www.blogjava.net/larry/archive/2007/12/05/165521.html</guid><wfw:comment>http://www.blogjava.net/larry/comments/165521.html</wfw:comment><comments>http://www.blogjava.net/larry/archive/2007/12/05/165521.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/larry/comments/commentRss/165521.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/larry/services/trackbacks/165521.html</trackback:ping><description><![CDATA[父窗口代码:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">a&nbsp;href</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript:void(0)</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;onclick</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">window.open('child.html','child','width=400,height=300,left=200,top=200');</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">打开子窗口</span><span style="color: #000000">&lt;/</span><span style="color: #000000">a</span><span style="color: #000000">&gt;</span></div>
<br />
<br />
子窗口代码:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_84_265_Open_Image" onclick="this.style.display='none'; Codehighlighter1_84_265_Open_Text.style.display='none'; Codehighlighter1_84_265_Closed_Image.style.display='inline'; Codehighlighter1_84_265_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_84_265_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_84_265_Closed_Text.style.display='none'; Codehighlighter1_84_265_Open_Image.style.display='inline'; Codehighlighter1_84_265_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;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">&nbsp;type</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text/javascript</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&lt;!--</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;refreshParent()&nbsp;</span><span id="Codehighlighter1_84_265_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"  alt="" /></span><span id="Codehighlighter1_84_265_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.opener.location.href&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;window.opener.location.href;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(window.opener.progressWindow)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_191_243_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"  alt="" /></span><span id="Codehighlighter1_191_243_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.opener.progressWindow.close();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.close();&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">--&gt;&nbsp;&lt;/script&gt;&nbsp;&nbsp;&lt;a&nbsp;href="javascript:void(0)"&nbsp;onclick="refreshParent()"&gt;刷新父窗口并关闭当前窗口&lt;/a&gt;&nbsp;</span></div>
<br />
<br />
<a title="更新记录后关闭子窗口并刷新父窗口的Javascript" href="http://www.codebit.cn/pub/html/javascript/tip/refresh_parent/parent.php" target="_blank">点此查看示例</a> 
 <img src ="http://www.blogjava.net/larry/aggbug/165521.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/larry/" target="_blank">larryjava</a> 2007-12-05 15:04 <a href="http://www.blogjava.net/larry/archive/2007/12/05/165521.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>限制用户在文本框输入的字数 </title><link>http://www.blogjava.net/larry/archive/2007/09/17/145816.html</link><dc:creator>larryjava</dc:creator><author>larryjava</author><pubDate>Mon, 17 Sep 2007 05:09:00 GMT</pubDate><guid>http://www.blogjava.net/larry/archive/2007/09/17/145816.html</guid><wfw:comment>http://www.blogjava.net/larry/comments/145816.html</wfw:comment><comments>http://www.blogjava.net/larry/archive/2007/09/17/145816.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/larry/comments/commentRss/145816.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/larry/services/trackbacks/145816.html</trackback:ping><description><![CDATA[<p>&nbsp;</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 alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;language</span><span style="color: #000000">=</span><span style="color: #000000">javascript</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;gbcount(message,total,used,remain)<br />
<img id="Codehighlighter1_75_615_Open_Image" onclick="this.style.display='none'; Codehighlighter1_75_615_Open_Text.style.display='none'; Codehighlighter1_75_615_Closed_Image.style.display='inline'; Codehighlighter1_75_615_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_75_615_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_75_615_Closed_Text.style.display='none'; Codehighlighter1_75_615_Open_Image.style.display='inline'; Codehighlighter1_75_615_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_75_615_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_75_615_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;max;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />max&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;total.value;<br />
<img id="Codehighlighter1_137_250_Open_Image" onclick="this.style.display='none'; Codehighlighter1_137_250_Open_Text.style.display='none'; Codehighlighter1_137_250_Closed_Image.style.display='inline'; Codehighlighter1_137_250_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_137_250_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_137_250_Closed_Text.style.display='none'; Codehighlighter1_137_250_Open_Image.style.display='inline'; Codehighlighter1_137_250_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(message.value.length&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;max)&nbsp;</span><span id="Codehighlighter1_137_250_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_137_250_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />message.value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;message.value.substring(</span><span style="color: #000000">0</span><span style="color: #000000">,max);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />used.value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;max;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />remain.value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />alert(</span><span style="color: #000000">"</span><span style="color: #000000">内容不允许超过&nbsp;1000&nbsp;个字!</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_257_613_Open_Image" onclick="this.style.display='none'; Codehighlighter1_257_613_Open_Text.style.display='none'; Codehighlighter1_257_613_Closed_Image.style.display='inline'; Codehighlighter1_257_613_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_257_613_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_257_613_Closed_Text.style.display='none'; Codehighlighter1_257_613_Open_Image.style.display='inline'; Codehighlighter1_257_613_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_257_613_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_257_613_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;iLength&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">message.value.length;i</span><span style="color: #000000">++</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_322_521_Open_Image" onclick="this.style.display='none'; Codehighlighter1_322_521_Open_Text.style.display='none'; Codehighlighter1_322_521_Closed_Image.style.display='inline'; Codehighlighter1_322_521_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_322_521_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_322_521_Closed_Text.style.display='none'; Codehighlighter1_322_521_Open_Image.style.display='inline'; Codehighlighter1_322_521_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;</span><span id="Codehighlighter1_322_521_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_322_521_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(message.value.charCodeAt(i)&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">255</span><span style="color: #000000">)</span><span style="color: #008000">//</span><span style="color: #008000">字母数字的ascii编码都小于255而汉字的编码肯定大于255</span><span style="color: #008000"><br />
<img id="Codehighlighter1_396_414_Open_Image" onclick="this.style.display='none'; Codehighlighter1_396_414_Open_Text.style.display='none'; Codehighlighter1_396_414_Closed_Image.style.display='inline'; Codehighlighter1_396_414_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_396_414_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_396_414_Closed_Text.style.display='none'; Codehighlighter1_396_414_Open_Image.style.display='inline'; Codehighlighter1_396_414_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_396_414_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_396_414_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;iLength&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;}</span></span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(message.value.charCodeAt(i)</span><span style="color: #000000">==</span><span style="color: #000000">32</span><span style="color: #000000">)</span><span style="color: #008000">//</span><span style="color: #008000">空格</span><span style="color: #008000"><br />
<img id="Codehighlighter1_461_481_Open_Image" onclick="this.style.display='none'; Codehighlighter1_461_481_Open_Text.style.display='none'; Codehighlighter1_461_481_Closed_Image.style.display='inline'; Codehighlighter1_461_481_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_461_481_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_461_481_Closed_Text.style.display='none'; Codehighlighter1_461_481_Open_Image.style.display='inline'; Codehighlighter1_461_481_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_461_481_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_461_481_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;iLength&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;}</span></span><span style="color: #0000ff">else</span><span style="color: #008000">//</span><span style="color: #008000">字母或数字</span><span style="color: #008000"><br />
<img id="Codehighlighter1_496_518_Open_Image" onclick="this.style.display='none'; Codehighlighter1_496_518_Open_Text.style.display='none'; Codehighlighter1_496_518_Closed_Image.style.display='inline'; Codehighlighter1_496_518_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_496_518_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_496_518_Closed_Text.style.display='none'; Codehighlighter1_496_518_Open_Image.style.display='inline'; Codehighlighter1_496_518_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;</span><span id="Codehighlighter1_496_518_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_496_518_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;iLength&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />used.value</span><span style="color: #000000">=</span><span style="color: #000000">iLength;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">used.value&nbsp;=&nbsp;message.value.length;</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">remain.value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;max&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;used.value;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">form</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">textarea&nbsp;&nbsp;&nbsp;&nbsp;onkeydown</span><span style="color: #000000">=</span><span style="color: #000000">gbcount(</span><span style="color: #0000ff">this</span><span style="color: #000000">.form.contents,</span><span style="color: #0000ff">this</span><span style="color: #000000">.form.total,</span><span style="color: #0000ff">this</span><span style="color: #000000">.form.used,</span><span style="color: #0000ff">this</span><span style="color: #000000">.form.remain);&nbsp;onkeyup</span><span style="color: #000000">=</span><span style="color: #000000">gbcount(</span><span style="color: #0000ff">this</span><span style="color: #000000">.form.contents,</span><span style="color: #0000ff">this</span><span style="color: #000000">.form.total,</span><span style="color: #0000ff">this</span><span style="color: #000000">.form.used,</span><span style="color: #0000ff">this</span><span style="color: #000000">.form.remain);&nbsp;cols</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">80</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;rows</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">8</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;wrap</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">VIRTUAL</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;id</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">contents</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">textarea</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />最多字数：</span><span style="color: #000000">&lt;</span><span style="color: #000000">INPUT&nbsp;&nbsp;disabled&nbsp;maxLength</span><span style="color: #000000">=</span><span style="color: #000000">4</span><span style="color: #000000">&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">total&nbsp;size</span><span style="color: #000000">=</span><span style="color: #000000">3</span><span style="color: #000000">&nbsp;value</span><span style="color: #000000">=</span><span style="color: #000000">1000</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />已用字数：</span><span style="color: #000000">&lt;</span><span style="color: #000000">INPUT&nbsp;&nbsp;disabled&nbsp;maxLength</span><span style="color: #000000">=</span><span style="color: #000000">4</span><span style="color: #000000">&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">used&nbsp;size</span><span style="color: #000000">=</span><span style="color: #000000">3</span><span style="color: #000000">&nbsp;value</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />可用字数：</span><span style="color: #000000">&lt;</span><span style="color: #000000">INPUT&nbsp;&nbsp;disabled&nbsp;maxLength</span><span style="color: #000000">=</span><span style="color: #000000">4</span><span style="color: #000000">&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">remain&nbsp;size</span><span style="color: #000000">=</span><span style="color: #000000">3</span><span style="color: #000000">&nbsp;value</span><span style="color: #000000">=</span><span style="color: #000000">1000</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">form</span><span style="color: #000000">&gt;</span></div>
<p>&lt;htmel&gt;&lt;title&gt;字数&lt;/title&gt;<br />
&lt;script language="javascript"&gt;<br />
function gbcount(message,total,used,remain)<br />
{<br />
var max;<br />
max=total.value;<br />
if(message.value.length &gt; max){<br />
message.value = message.value.substring(0,max);<br />
used.value = max;<br />
remain.value = 0;<br />
alert('不能超过300个字!');<br />
}<br />
else{<br />
used.value = message.value.length;<br />
remain.value = max - used.value;<br />
}<br />
}<br />
&lt;/script&gt;</p>
<p>&lt;body&gt;&lt;form&gt;<br />
&lt;textarea&nbsp; cols="60" rows="8" id="memo1" onkeydown="gbcount(this.form.memo1,this.form.total1,this.form.used1,this.form.remain1);"&nbsp; onkeyup="gbcount(this.form.memo1,this.form.total1,this.form.used1,this.form.remain1);"&gt;&lt;/textarea&gt;<br />
&lt;br&gt;<br />
最多字数：&lt;INPUT disabled maxLength=4 name=total1 size=3 value=500&gt;<br />
已用字数：&lt;INPUT disabled maxLength=4 name=used1 size=3 value=0&gt;<br />
剩余字数：&lt;INPUT disabled maxLength=4 name=remain1 size=3 value=500&gt; &lt;/form&gt;<br />
&lt;/body&gt;&lt;/html&gt;<br />
</p>
<img src ="http://www.blogjava.net/larry/aggbug/145816.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/larry/" target="_blank">larryjava</a> 2007-09-17 13:09 <a href="http://www.blogjava.net/larry/archive/2007/09/17/145816.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>