﻿<?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-应用，一定要应用-随笔分类-其他应用</title><link>http://www.blogjava.net/flyffa/category/16807.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 03:46:04 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 03:46:04 GMT</pubDate><ttl>60</ttl><item><title>【web】面向对象的javascript</title><link>http://www.blogjava.net/flyffa/archive/2006/12/28/90493.html</link><dc:creator>flyffa</dc:creator><author>flyffa</author><pubDate>Thu, 28 Dec 2006 06:39:00 GMT</pubDate><guid>http://www.blogjava.net/flyffa/archive/2006/12/28/90493.html</guid><wfw:comment>http://www.blogjava.net/flyffa/comments/90493.html</wfw:comment><comments>http://www.blogjava.net/flyffa/archive/2006/12/28/90493.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/flyffa/comments/commentRss/90493.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyffa/services/trackbacks/90493.html</trackback:ping><description><![CDATA[
		<h2 style="MARGIN: 13pt 0cm 13pt 1cm; TEXT-INDENT: -1cm; mso-list: l1 level2 lfo1; tab-stops: list 1.0cm">
				<span lang="EN-US" style="mso-bidi-font-family: Arial; mso-fareast-font-family: Arial">
						<span style="mso-list: Ignore">
								<font face="Arial">1.1.</font>
								<span style="FONT: 7pt 'Times New Roman'">
								</span>
						</span>
				</span>
				<span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">继承</span>
		</h2>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">今天遇到了需要在</span>
				<span lang="EN-US">javascript</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中继承的问题：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">查了一些帖子，自己又写了几个例子测试了一下，总结如下：</span>
		</p>
		<h3 style="MARGIN: 13pt 0cm 13pt 35.45pt; TEXT-INDENT: -35.45pt; mso-list: l0 level3 lfo2; tab-stops: list 35.45pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">
								<font size="5">1.1.1.</font>
								<span style="FONT: 7pt 'Times New Roman'">    </span>
						</span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<font size="5">三种方法</font>
				</span>
		</h3>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">js</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中实现继承有三种方法：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">假设父类为</span>
				<span lang="EN-US">Parent,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">子类为</span>
				<span lang="EN-US">Child,</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第一种，子类强制调用父类构造</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">function Child(){</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>Parent.call(this);</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第二种，子类间接调用父类构造</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">function Child(){</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>this.base = Parent;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>this.base();</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第三种：设置原型</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">function Child(){}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">Child.prototype = new Parent(); </span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这种方式虽然不够直观，却应该是最有效率的方式。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<h3 style="MARGIN: 13pt 0cm 13pt 35.45pt; TEXT-INDENT: -35.45pt; mso-list: l0 level3 lfo2; tab-stops: list 35.45pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">
								<font size="5">1.1.2.</font>
								<span style="FONT: 7pt 'Times New Roman'">    </span>
						</span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<font size="5">总结：</font>
				</span>
		</h3>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其实</span>
				<span lang="EN-US">js</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">本身是没有什么继承之类的概念的，只是为了使用利用</span>
				<span lang="EN-US">js</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的一些特性而加的。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">js</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的原型方式</span>
				<span lang="EN-US">prototype,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使得许多的工作变得容易。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个</span>
				<span lang="EN-US">function</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象和根据</span>
				<span lang="EN-US">function</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">构造出来的对象是不同的。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个</span>
				<span lang="EN-US">function</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象的原型其实就是一个根据</span>
				<span lang="EN-US">function</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象构建出来的对象。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">记住：这个对象可与</span>
				<span lang="EN-US">new</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">出来的对象不一样。在</span>
				<span lang="EN-US">function</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内部的代码并不会被执行，如：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">this.funcName = function()</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样的代码。而</span>
				<span lang="EN-US">new</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">出来的对象则不然，他具有执行后的对象特性。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">function</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的局部变量相当于</span>
				<span lang="EN-US">class</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里的私有变量，无法在子类中获取和操作。但</span>
				<span lang="EN-US">this.</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的部分是可以的。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<h3 style="MARGIN: 13pt 0cm 13pt 35.45pt; TEXT-INDENT: -35.45pt; mso-list: l0 level3 lfo2; tab-stops: list 35.45pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">
								<font size="5">1.1.3.</font>
								<span style="FONT: 7pt 'Times New Roman'">    </span>
						</span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<font size="5">猜测和假想</font>
				</span>
		</h3>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（这是我推断的，没有任何的根据，当然也是可以测试的）：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当一个</span>
				<span lang="EN-US">Child</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">被</span>
				<span lang="EN-US">new</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时，第一二种方法中，</span>
				<span lang="EN-US">js</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">执行器</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、先分配一个空间，（相当于</span>
				<span lang="EN-US"> this = new Object()</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span>
				<span lang="EN-US">(msdn</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中有具体的描述</span>
				<span lang="EN-US">)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、拷贝原型：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">3</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、执行构造：也就是</span>
				<span lang="EN-US">Child.call(this)</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（相当于</span>
				<span lang="EN-US">child(),</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">此时</span>
				<span lang="EN-US">this</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象有值）（</span>
				<span lang="EN-US">msdn</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中有描述）</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后执行</span>
				<span lang="EN-US">Parent();</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个时候</span>
				<span lang="EN-US">parent</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的构造函数执行以下几步：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、将</span>
				<span lang="EN-US">parent</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">prototype</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">拷贝到</span>
				<span lang="EN-US">object</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">区域，这时覆盖了前面的区域</span>
				<span lang="EN-US"> (</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">好像测试证明</span>
				<span lang="EN-US">parent</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的原型并不会被拷贝，此步不会被执行</span>
				<span lang="EN-US">)</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、对这个区域执行初始化，也就是正常的</span>
				<span lang="EN-US">function</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调用的过程。（相当于</span>
				<span lang="EN-US">Parent(),this</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">变量有值）</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而普通的</span>
				<span lang="EN-US">function</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调用应该是这个样子：由于没有</span>
				<span lang="EN-US">new </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">操作符，所以没有为其分配当前的</span>
				<span lang="EN-US">this(</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也没有空间</span>
				<span lang="EN-US">),</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">this</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">被放到了</span>
				<span lang="EN-US">window</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象上。但是</span>
				<span lang="EN-US">new</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的时候显然不是这样。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">obj.func()</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的调用和</span>
				<span lang="EN-US">func()</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调用是完全不一样的，</span>
				<span lang="EN-US">obj.func</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中</span>
				<span lang="EN-US">this</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象是</span>
				<span lang="EN-US">obj</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象，而</span>
				<span lang="EN-US">func()</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调用</span>
				<span lang="EN-US">this</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象是</span>
				<span lang="EN-US">window</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象，这个应该和</span>
				<span lang="EN-US">jvm</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中静态方法和类实例方法调用的区别的原理一样。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<h2 style="MARGIN: 13pt 0cm 13pt 1cm; TEXT-INDENT: -1cm; mso-list: l1 level2 lfo1; tab-stops: list 1.0cm">
				<span lang="EN-US" style="mso-bidi-font-family: Arial; mso-fareast-font-family: Arial">
						<span style="mso-list: Ignore">
								<font face="Arial">1.2.</font>
								<span style="FONT: 7pt 'Times New Roman'">
								</span>
						</span>
				</span>
				<span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">方法重载</span>
		</h2>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在实现了对象继承之后，我开始面临到第二个问题，重载。</span>
		</p>
		<h3 style="MARGIN: 13pt 0cm 13pt 35.45pt; TEXT-INDENT: -35.45pt; mso-list: l0 level3 lfo2; tab-stops: list 35.45pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">
								<font size="5">1.1.4.</font>
								<span style="FONT: 7pt 'Times New Roman'">    </span>
						</span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<font size="5">两种方法</font>
				</span>
		</h3>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">js</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">怎样实现重载。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、简单的重载：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在这种重载中，子类的方法无需调用父类的方法，直接在执行父类构造之后，再执行子类的重载方法，如</span>
				<span lang="EN-US">Parent</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">toString()</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法，这时只需执行</span>
				<span lang="EN-US">this.toString = function(){....}</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就可以了。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、调用父类方法的重载：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由于</span>
				<span lang="EN-US">js</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">实际运行时并没有父类、子类两个实例空间，所以</span>
				<span lang="EN-US">super.toString()</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">肯定是不行的，而在子类的</span>
				<span lang="EN-US">toString</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法中进行</span>
				<span lang="EN-US">this.toString()</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调用只能引起内存溢出，其实这种也可以想办法做到。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">this.super_toString = this.toString();</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">this.toString=function(){</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>..............</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>this.super_toString();</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>..............</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">}</span>
		</p>
<img src ="http://www.blogjava.net/flyffa/aggbug/90493.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyffa/" target="_blank">flyffa</a> 2006-12-28 14:39 <a href="http://www.blogjava.net/flyffa/archive/2006/12/28/90493.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>得到准确的在线人数统计－减少搜索引擎的干扰</title><link>http://www.blogjava.net/flyffa/archive/2006/12/14/87722.html</link><dc:creator>flyffa</dc:creator><author>flyffa</author><pubDate>Thu, 14 Dec 2006 07:10:00 GMT</pubDate><guid>http://www.blogjava.net/flyffa/archive/2006/12/14/87722.html</guid><wfw:comment>http://www.blogjava.net/flyffa/comments/87722.html</wfw:comment><comments>http://www.blogjava.net/flyffa/archive/2006/12/14/87722.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/flyffa/comments/commentRss/87722.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyffa/services/trackbacks/87722.html</trackback:ping><description><![CDATA[
		<h2 style="MARGIN: 13pt 0cm">
				<span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">基本方法：</span>
		</h2>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">基本的方法，网上到处都是，在</span>
				<span lang="EN-US">java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中就是在</span>
				<span lang="EN-US">web.xml</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注册一个</span>
				<span lang="EN-US">Listener</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，如下：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">&lt;listener&gt;<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>&lt;listener-class&gt;xp.web.SessionCounter&lt;/listener-class&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">&lt;/listener&gt;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">SessionCounter.java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">实现</span>
				<span lang="EN-US">javax.servlet.http.HttpSessionListener</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">接口，分别在</span>
				<span lang="EN-US">sessionCreated</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法和</span>
				<span lang="EN-US">sessionDestroyed</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法中处理</span>
				<span lang="EN-US">session</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数目。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这样的方法有一定的问题：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、对于真正从网页访问的和搜索引擎的</span>
				<span lang="EN-US">spider</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">无法区分。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、当</span>
				<span lang="EN-US">Tomcat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">重启时，加载了上次持久化的</span>
				<span lang="EN-US">session</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时，无法准确计算在线数。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">第二个问题我们可以不予考虑，这是</span>
				<span lang="EN-US">tomcat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">容器实现不标准的问题，我们要解决的是的第一个问题，如何知道你的访问的是真实的。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<strong>
						<span class="2Char">
								<span style="FONT-SIZE: 16pt; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial; mso-bidi-font-family: 'Times New Roman'">用</span>
						</span>
						<span class="2Char">
								<span lang="EN-US" style="FONT-SIZE: 16pt; mso-bidi-font-family: 'Times New Roman'">
										<font face="Arial">js</font>
								</span>
						</span>
						<span class="2Char">
								<span style="FONT-SIZE: 16pt; FONT-FAMILY: 黑体; mso-ascii-font-family: Arial; mso-bidi-font-family: 'Times New Roman'">绕过搜索引擎</span>
						</span>
				</strong>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">做过</span>
				<span lang="EN-US">pv</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">统计的都知道，可以用</span>
				<span lang="EN-US">script</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的方式得到你真实的</span>
				<span lang="EN-US">pageView</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数目，我们现在要做的就是这样的一件事情，我们在所有的页面都加入一段话：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">&lt;script type="text/javascript"&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">document.write ("&lt;iframe src='/sessionCountServlet' width=0 height=0 frameborder=no border=0 MARGINWIDTH=0 MARGINHEIGHT=0 SCROLLING=no&gt;&lt;/iframe&gt;");<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">&lt;/script&gt;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后我们写上一个</span>
				<span lang="EN-US">servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来记录这些真正的访问者。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">import java.io.*;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">import javax.servlet.*;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">import javax.servlet.http.*;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">public class SessionCounterServlet extends HttpServlet {<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>public SessionCounterServlet() {<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">        </span>super();<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>public void doGet(HttpServletRequest request,<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">                      </span>HttpServletResponse response) throws IOException,<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">            </span>ServletException {<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">        </span>process(request, response);<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>public void doPost(HttpServletRequest request,<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">                       </span>HttpServletResponse response) throws IOException,<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">            </span>ServletException {<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">        </span>process(request, response);<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>public void process(HttpServletRequest request,<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">                        </span>HttpServletResponse response) throws IOException,<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">            </span>ServletException {<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">        </span>SessionCounter.put(request.getSession().getId());<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21.75pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们可以看到这个</span>
				<span lang="EN-US">servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">只是做了一件事情，在</span>
				<span lang="EN-US">process</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里面做了</span>
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">SessionCounter.put(request.getSession().getId());</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个动作。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们来看看我们的</span>
				<span lang="EN-US">SessionCounter</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">做了些什么：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">import javax.servlet.http.*;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">import java.util.Hashtable;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">public class SessionCounter implements HttpSessionListener {<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>public SessionCounter() {<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>public static Hashtable m_real = new Hashtable();<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>private static long count = 0;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>public void sessionCreated(HttpSessionEvent e) {<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">        </span>count++;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>public void sessionDestroyed(HttpSessionEvent e) {<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">        </span>if (count &gt; 0) {<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">            </span>count--;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">        </span>}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">        </span>m_real.remove(e.getSession().getId());<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>public static long getSessionCount() {<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">        </span>return count;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>public static void put(String sessionId){<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">        </span>m_real.put(sessionId,"1");<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>public static int getRealCount(){<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">        </span>return m_real.size();<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">
						<span style="mso-spacerun: yes">    </span>}<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="BACKGROUND: silver; mso-highlight: silver">}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们记录了一个静态的</span>
				<span lang="EN-US">hash</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表来记录激活状态的</span>
				<span lang="EN-US">sessionid</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，并在</span>
				<span lang="EN-US">session</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">销毁的时候将这个</span>
				<span lang="EN-US">sessionid</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">置为空。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">怎么把</span>
				<span lang="EN-US">servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置到</span>
				<span lang="EN-US">web</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应用中我就不罗唆了。</span>
		</p>
<img src ="http://www.blogjava.net/flyffa/aggbug/87722.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyffa/" target="_blank">flyffa</a> 2006-12-14 15:10 <a href="http://www.blogjava.net/flyffa/archive/2006/12/14/87722.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【服务配置】apache+tomcat配置负载均衡的网站</title><link>http://www.blogjava.net/flyffa/archive/2006/11/06/79356.html</link><dc:creator>flyffa</dc:creator><author>flyffa</author><pubDate>Mon, 06 Nov 2006 03:49:00 GMT</pubDate><guid>http://www.blogjava.net/flyffa/archive/2006/11/06/79356.html</guid><wfw:comment>http://www.blogjava.net/flyffa/comments/79356.html</wfw:comment><comments>http://www.blogjava.net/flyffa/archive/2006/11/06/79356.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/flyffa/comments/commentRss/79356.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyffa/services/trackbacks/79356.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在网上找了一些文档，还是觉得不是很清楚，自己走了些弯路，才把这个配置好，还是写下来吧，以备后查。																		1.   								目标								使用				apache				和				tomcat				配置一个可以应用的				web				网站，要达到以下要求：									...&nbsp;&nbsp;<a href='http://www.blogjava.net/flyffa/archive/2006/11/06/79356.html'>阅读全文</a><img src ="http://www.blogjava.net/flyffa/aggbug/79356.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyffa/" target="_blank">flyffa</a> 2006-11-06 11:49 <a href="http://www.blogjava.net/flyffa/archive/2006/11/06/79356.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Proxool连接池的简单配置</title><link>http://www.blogjava.net/flyffa/archive/2006/11/02/78639.html</link><dc:creator>flyffa</dc:creator><author>flyffa</author><pubDate>Thu, 02 Nov 2006 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/flyffa/archive/2006/11/02/78639.html</guid><wfw:comment>http://www.blogjava.net/flyffa/comments/78639.html</wfw:comment><comments>http://www.blogjava.net/flyffa/archive/2006/11/02/78639.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/flyffa/comments/commentRss/78639.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyffa/services/trackbacks/78639.html</trackback:ping><description><![CDATA[      自己以前做程序都是自己写连接池，那个时候项目大，环境各异，为了便于实施，总是由自己进行连接池的管理，等到自己想做一些小东西的时候，才发现这个连接池成了一个专用的东西，和系统做了太多的绑定，只能找连接池用，用过resin自带的连接池，再用tomcat连接池的时候就很不爽，没有监控的功能，在网上选来选去，最后选择了Proxool。<br /><br />      Proxool连接池是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池，最为关键的是这个连接池提供监控的功能，方便易用，便于发现连接泄漏的情况。开源项目地址是：<a href="http://proxool.sourceforge.net/"><br />http://proxool.sourceforge.net/</a><br /><br />配置连接池比较的简单：<br />1、将下载的包解开，从包中的lib目录下将proxool-xxx.jar(xxx随着不同的版本号变化)加入你的工程中。<br />2、配置数据源：<br />      在web-info下建立文件：proxool.xml，文件内容如下：<br /><font style="BACKGROUND-COLOR: #d3d3d3"><font size="2">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;something-else-entirely&gt;<br />  &lt;proxool&gt;<br />    &lt;alias&gt;Develop&lt;/alias&gt;<br />    &lt;driver-url&gt;jdbc:mysql://localhost/kuanxue&lt;/driver-url&gt;<br />    &lt;driver-class&gt;com.mysql.jdbc.Driver&lt;/driver-class&gt;<br />    &lt;driver-properties&gt;<br />      &lt;property name="user" value="root"/&gt;<br />      &lt;property name="password" value=""/&gt;<br />      &lt;property name="useUnicode" value="true"/&gt;<br />      &lt;property name="characterEncoding" value="GBK"/&gt;<br />    &lt;/driver-properties&gt;<br />    &lt;maximum-connection-count&gt;500&lt;/maximum-connection-count&gt;<br />    &lt;house-keeping-test-sql&gt;select CURRENT_DATE&lt;/house-keeping-test-sql&gt;<br />  &lt;/proxool&gt;<br /> &lt;/something-else-entirely&gt;<br /></font><br /><font style="BACKGROUND-COLOR: #ffffff">3、配置web.xml<br />在web.xml中增加：<br /><font style="BACKGROUND-COLOR: #d3d3d3" size="2">&lt;!-- 配置初始化servlet,在web容器加载的时候自动加载配置文件，如果不是web程序，这个部分就需要通过开发接口来初始化了 --&gt;<br />&lt;servlet&gt;<br />     &lt;servlet-name&gt;proxoolInitialServlet&lt;/servlet-name&gt;<br /> &lt;servlet-class&gt;org.logicalcobwebs.proxool.configuration.ServletConfigurator&lt;/servlet-class&gt;<br />     &lt;init-param&gt;<br />       &lt;param-name&gt;xmlFile&lt;/param-name&gt;<br />       &lt;param-value&gt;WEB-INF/proxool.xml&lt;/param-value&gt;<br />     &lt;/init-param&gt;<br />     &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />   &lt;/servlet&gt;<br />&lt;!--配置监控servlet,其实如果不想监控的话，可以不配--&gt;<br />   &lt;servlet&gt;<br />    &lt;servlet-name&gt;dbpoolAdmin&lt;/servlet-name&gt;<br />    &lt;servlet-class&gt;org.logicalcobwebs.proxool.admin.servlet.AdminServlet&lt;/servlet-class&gt;<br />  &lt;/servlet&gt;<br />   &lt;servlet-mapping&gt;<br />    &lt;servlet-name&gt;dbpoolAdmin&lt;/servlet-name&gt;<br />    &lt;url-pattern&gt;/dbpool&lt;/url-pattern&gt;<br />  &lt;/servlet-mapping&gt;<br /></font><br /></font></font><font style="BACKGROUND-COLOR: #ffffff">4、在程序中调用<br />一般我将获取connection的行为封装为一个工厂模式，便于多种情况的切换，以下是其中proxool数据源的getConnection方法的实现：<br /><br /></font><font style="BACKGROUND-COLOR: #d3d3d3" size="2">public Connection getConnection() {<br />        try{<br />            Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");<br />            return DriverManager.getConnection("proxool.Develop");<br />        }catch(Exception ex){<br />            ex.printStackTrace();<br />        }<br />        return null;<br />    }<br /><br /><font style="BACKGROUND-COLOR: #ffffff">5、应用开发：<br />      在实际的应用中，我们可能需要更多的功能，比如监控功能不够强大，权限不好控制，我们希望能够编写出更强大的功能，比如杀死一些大的查询语句等，记录各种查询语句占用的时间，这就需要对开发接口进行进一步的研究了。<br /></font></font><img src ="http://www.blogjava.net/flyffa/aggbug/78639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyffa/" target="_blank">flyffa</a> 2006-11-02 12:00 <a href="http://www.blogjava.net/flyffa/archive/2006/11/02/78639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>