﻿<?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/reallypride/</link><description>专业源于兴趣和努力</description><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 13:24:34 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 13:24:34 GMT</pubDate><ttl>60</ttl><item><title>PureMVC的原理和逻辑</title><link>http://www.blogjava.net/reallypride/archive/2008/09/07/227544.html</link><dc:creator>真的骄傲</dc:creator><author>真的骄傲</author><pubDate>Sun, 07 Sep 2008 07:06:00 GMT</pubDate><guid>http://www.blogjava.net/reallypride/archive/2008/09/07/227544.html</guid><wfw:comment>http://www.blogjava.net/reallypride/comments/227544.html</wfw:comment><comments>http://www.blogjava.net/reallypride/archive/2008/09/07/227544.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/reallypride/comments/commentRss/227544.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/reallypride/services/trackbacks/227544.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PureMVC，就如同它的名字是，它是一个纯粹的小巧的MVC框架。许多人都错误地把PureMVC误认为它是一个Flash的MVC框架或者是Flex的MVC框架。既然它是一个纯框架，那么，它就不仅仅是支持某种特定的语言，它的设计是与语言无关的。去过它的官网的人都看到，它支持了好多种常用的编程语言,下面是它的官网的一个支持的开发语言的截图：</p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/reallypride/EntryImages/20080907/puremvc.jpg" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;看到了上面的C#，学ASP.NET的人是不是看到了福音了？平时看到JSP有Struts，Hibernate，Spring等众多优秀的框架，而.NET的好像还没有，心里真是一百个的不爽，现在我们终于也有MVC框架了。虽然微软现在正在出一个ASP.NET MVC框架，但是它现在还是Preview5，也不知道什么时候才能出正式版，期待一下吧，微软出的东西应该是很容易使用的。不过，据说这个框架只支持.NET3.5的版本，如果真是这样的话，这是像我这种还在使用.NET2.0的人来说是一大的遗憾。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;还有一点的是，这个框架和我上面提到过的JSP框架不同，它是一个真正的MVC框架，它不像Struts它们那样只支持Web应用的开发，虽然现在这种开发很流行。它只是一个框架，它是让我们更好的管理我们的程序，使得它易于维护，易于扩展和移植。它只是一个真正的MVC框架，它并不面向于特定的应用。我们可以使用它开发桌面应用，Web应用等等。同时，它还是一个轻量级的框架，而且还是很轻的那种，它的大小最多也就2，30K而已。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;关于PureMVC的学习教程真的好少，找了好几天，结果还是只找到官网上的那个Best Practices。本人比较愚笨，研究了好几天，把那个文档看了又看，终于才明白了它大概的原理，现在写下来，分享一下心得。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PureMVC框架的目标很明确，即把程序分为低耦合的三层：Model、View和Controller。它们合称为PureMVC框架的核心，由Facade统一管理。关于它的核心层，我们不需要管太多，只需要记得下面几点就可以了：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一、Model保存对Proxy对象的引用，Proxy负责操作数据模型，与远程服务通信存取数据。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;二、View保存对Mediator对象的引用。由Mediator对象来操作具体的视图组件（View Component，例如Flex的DataGrid组件），包括：添加事件监听器，发送或接收Notification ，直接改变视图组件的状态。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;三、Controller保存所有Command的映射。Command可以获取Proxy对象并与之交互，通过发送Notification来执行其他的Command。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上面的什么对什么的引用，可以一开始看的时候很难理解，我们暂时不用管它谁对谁的引用的。这些已经由框架为我们管理好了，我们要所要做的是编写具体的Command，Mediator，Proxy。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一、Proxy是负责操作数据模型的，什么是数据模型？数据模型就是数据库，XML等等。我们可以直观地理解为，Proxy是用来对数据模型进行查询、插入、更新、删除等操作的类。操作完成后，它就会发送Notification，也就是通知，告诉其它两个层我已经完成工作了。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;二、Mediator负责操作具体的视图组件，包括：添加事件监听器，发送或接收Notification ，直接改变视图组件的状态。好像抽象了点。具体的说吧，Mediator是负责管理用户界面，与用户进行交互操作的。如：给Button添加事件，当用户点击按钮时，发送Notification，告诉Controler我们执行什么样的操作。比如这是一个登录的按钮，那么Mediator就会告诉发送通知给Controler，告诉它要执行登录操作。此外，Mediator还负责直接改变视图的状态。就像，我点击了登录按钮后，Mediator就改变它，让登录按钮不过用，避免重复操作。它还可以在视图上显示一条信息，告诉我正在执行登录操作。总的来说，Mediator是用来管理视图的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;三、Command可以获取Proxy对象并与之交互，通过发送Notification来执行其他的Command。再拿上面的登录例子作解释，当点击了登录按钮后，Mediator就会告诉Controler要执行相应的Command了，比如LoginComand。既然是登录，那么还得要知道用户的信息才行。Command就会发送Notification告知Proxy，我需要某个用户的信息。那么Proxy就会访问数据库（也可以是别的数据模型），查询对应的用户信息，然后发送Notification通知Command我已经查询好了，差把信息返回给Command进行验证，与些同时，Mediator也可以接收Proxy发送的Notification，通过视图告诉用户正在验证信息。Command验证了用户信息后，发送Notification把验证结果返回给Mediatory，告诉用户验证的结果。或者，Command也可以发送Notification执行其它的Command操作，比如验证通过后，读取用户的详细资料。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上面的Command，Mediator，Proxy的具体实现类都是要自己编写的，工作量还是比较大的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PureMVC框架的原理大概就是这样子，写得不足的地方还请各位大虾多多指点。</p>
<img src ="http://www.blogjava.net/reallypride/aggbug/227544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/reallypride/" target="_blank">真的骄傲</a> 2008-09-07 15:06 <a href="http://www.blogjava.net/reallypride/archive/2008/09/07/227544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ExtJS学习笔记1--onReady</title><link>http://www.blogjava.net/reallypride/archive/2008/09/05/227300.html</link><dc:creator>真的骄傲</dc:creator><author>真的骄傲</author><pubDate>Fri, 05 Sep 2008 10:44:00 GMT</pubDate><guid>http://www.blogjava.net/reallypride/archive/2008/09/05/227300.html</guid><wfw:comment>http://www.blogjava.net/reallypride/comments/227300.html</wfw:comment><comments>http://www.blogjava.net/reallypride/archive/2008/09/05/227300.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/reallypride/comments/commentRss/227300.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/reallypride/services/trackbacks/227300.html</trackback:ping><description><![CDATA[<p style="margin: 0cm 0cm 0pt; text-indent: 21pt"><font size="3"><font color="#000000"><span style="font-size: 14pt"><span style="font-family: 宋体">这几天在学习</span>ExtJS<span style="font-family: 宋体">，爱上了它丰富的漂亮的</span>UI<span style="font-family: 宋体">。让人开心的是，只要通过编写</span>javascript<span style="font-family: 宋体">就能做出专业的美工来，这对于开发人员来说是如此大的魅力呢。</span></span></font></font></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt"><font size="3"><font color="#000000"><span style="font-size: 14pt"><span style="font-family: 宋体">首先是使用</span>ExtJS<span style="font-family: 宋体">的准备工作，把</span>adapter<span style="font-family: 宋体">和</span>resources<span style="font-family: 宋体">两个文件夹，和</span>ext-all.js<span style="font-family: 宋体">文件复制到我们的项目中。然后在页面中引入，代码如下：</span></span></font></font></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">link&nbsp;</span><span style="color: #ff0000">href</span><span style="color: #0000ff">="ExtJS/resources/css/ext-all.css"</span><span style="color: #ff0000">&nbsp;rel</span><span style="color: #0000ff">="stylesheet"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="text/css"</span><span style="color: #ff0000">&nbsp;</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="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text/javascript"</span><span style="color: #ff0000">&nbsp;src</span><span style="color: #0000ff">="ExtJS/adapter/ext/ext-base.js"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">script</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="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text/javascript"</span><span style="color: #ff0000">&nbsp;src</span><span style="color: #0000ff">="ExtJS/ext-all.js"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span></div>
<span style="font-size: 14pt">这样我们就能使用ExJS了。</span>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 14pt">首先从基本的Ext.onReady(Function fn,Object scope,boolean override)开始。onReady方法将会在页面加载完成后执行，相当于我们平时常用到的window.onload方法，它是Ext.EventManager.onDocumentReady的缩写版。onReady一共有三个参数：第一个参数是页面加载完成后要执行的函数，这也是我们用的最多的</span>。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;init()<br />
<img id="Codehighlighter1_16_63_Open_Image" onclick="this.style.display='none'; Codehighlighter1_16_63_Open_Text.style.display='none'; Codehighlighter1_16_63_Closed_Image.style.display='inline'; Codehighlighter1_16_63_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_16_63_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_16_63_Closed_Text.style.display='none'; Codehighlighter1_16_63_Open_Image.style.display='inline'; Codehighlighter1_16_63_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_16_63_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_16_63_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Ext.MessageBox.alert(</span><span style="color: #000000">"</span><span style="color: #000000">Alert</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">页面加载完成!</span><span style="color: #000000">"</span><span style="color: #000000">);<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="" />Ext.onReady(init);</span></div>
<img height="140" alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/reallypride/457073/o_index.jpg" width="155" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第二个参数是指定要执行的函数所在的域。<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_9_23_Open_Image" onclick="this.style.display='none'; Codehighlighter1_9_23_Open_Text.style.display='none'; Codehighlighter1_9_23_Closed_Image.style.display='inline'; Codehighlighter1_9_23_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_9_23_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_9_23_Closed_Text.style.display='none'; Codehighlighter1_9_23_Open_Image.style.display='inline'; Codehighlighter1_9_23_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;show</span><span style="color: #000000">=</span><span id="Codehighlighter1_9_23_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_9_23_Open_Text"><span style="color: #000000">{mss:</span><span style="color: #000000">"</span><span style="color: #000000">我加载完成了！</span><span style="color: #000000">"</span><span style="color: #000000">}</span></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;init()<br />
<img id="Codehighlighter1_42_88_Open_Image" onclick="this.style.display='none'; Codehighlighter1_42_88_Open_Text.style.display='none'; Codehighlighter1_42_88_Closed_Image.style.display='inline'; Codehighlighter1_42_88_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_42_88_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_42_88_Closed_Text.style.display='none'; Codehighlighter1_42_88_Open_Image.style.display='inline'; Codehighlighter1_42_88_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_42_88_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_88_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Ext.MessageBox.alert(</span><span style="color: #000000">"</span><span style="color: #000000">Alert</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #0000ff">this</span><span style="color: #000000">.mss);<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="" />Ext.onReady(init,show);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img height="133" alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/reallypride/457073/o_index1.jpg" width="144" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;至于第三个参数，我也不太清楚，大概是用来控制函数的执行的吧，一般很少会用到。<br />
<img src ="http://www.blogjava.net/reallypride/aggbug/227300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/reallypride/" target="_blank">真的骄傲</a> 2008-09-05 18:44 <a href="http://www.blogjava.net/reallypride/archive/2008/09/05/227300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript中获得页面元素的位置信息</title><link>http://www.blogjava.net/reallypride/archive/2008/09/03/226757.html</link><dc:creator>真的骄傲</dc:creator><author>真的骄傲</author><pubDate>Wed, 03 Sep 2008 11:59:00 GMT</pubDate><guid>http://www.blogjava.net/reallypride/archive/2008/09/03/226757.html</guid><wfw:comment>http://www.blogjava.net/reallypride/comments/226757.html</wfw:comment><comments>http://www.blogjava.net/reallypride/archive/2008/09/03/226757.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/reallypride/comments/commentRss/226757.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/reallypride/services/trackbacks/226757.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#993300">在做javascript的时候，经常会需要获取页面上某个元素的位置。javascript中的offsetTop和offsetLeft方法返回的是该对象相对于&#8220;相对父元素&#8221;的位置信息。元素的相对父元素是offsetParent而不是parentNode，这点很重要，如果使用parentNode，在页面的元素的样式中设置有float属性的时候，得到的很可能会是错误的位置信息。获得元素位置信息的代码如下：</font>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#993300">function positionOffset(element)</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#993300">{</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#993300">var top=0, left=0;</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#993300">do</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#993300">{</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#993300">top+=element.offsetTop || 0;</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#993300">left+=element.offsetLeft || 0;</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#993300">element=element.offsetParent;</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#993300">}while(element);</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#993300">return [top, left];</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#993300">}</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#993300">经过测试，OK没问题。</font></p>
<img src ="http://www.blogjava.net/reallypride/aggbug/226757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/reallypride/" target="_blank">真的骄傲</a> 2008-09-03 19:59 <a href="http://www.blogjava.net/reallypride/archive/2008/09/03/226757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用JSP实现显示用户是否在线</title><link>http://www.blogjava.net/reallypride/archive/2008/09/03/226756.html</link><dc:creator>真的骄傲</dc:creator><author>真的骄傲</author><pubDate>Wed, 03 Sep 2008 11:58:00 GMT</pubDate><guid>http://www.blogjava.net/reallypride/archive/2008/09/03/226756.html</guid><wfw:comment>http://www.blogjava.net/reallypride/comments/226756.html</wfw:comment><comments>http://www.blogjava.net/reallypride/archive/2008/09/03/226756.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/reallypride/comments/commentRss/226756.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/reallypride/services/trackbacks/226756.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #333399">&nbsp;在一些博客网站和论坛里，我们能看到某个用户是否在线，或者显示有在线用户，而这个功能是怎么实现的呢？</span>
<p style="font-size: 14pt"><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;大多数情况下，我们都是使用HttpSession来保存登录用户的信息，如果用户手动点击了【注销】，我们就很轻易地知道了该用户已经下线了。</font></p>
<p style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#000080">但是，在大部分情况下，我们很少会手动点击【注销】按钮的，我们通常是直接关闭浏览器，这样我们就无法在【注销】的功能里面获得用户下线的信息了。</font></p>
<p style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#000080">我们都知道，HttpSession是有时限的。我们可以使用HttpSessionBindingListener 来监听数据对HttpSession的绑定和解绑。</font></p>
<p style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#000080">什么是数据对HttpSession的绑定和解绑呢？</font></p>
<p style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#000080">把数据保存到HttpSession中叫做绑定，数据从HttpSession中删除叫做解绑。当HttpSession失效时，数据是会自动解绑的。</font></p>
<p style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#000080">利用这个我们就能很轻松地实现查看用户是否在线的功能了。</font></p>
<p style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#000080">代码如下：</font></p>
<p style="font-size: 14pt"><font color="#000080"></font>&nbsp;</p>
<p style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#000080">import javax.servlet.http.HttpSessionBindingEvent;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import javax.servlet.http.HttpSessionBindingListener;</font></p>
<p style="font-size: 14pt"><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public class UserInfo implements HttpSessionBindingListener {</font></p>
<p style="font-size: 14pt"><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public void valueBound(HttpSessionBindingEvent arg0) {</font></p>
<p style="font-size: 14pt"><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("该用户已上线！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font></p>
<p style="font-size: 14pt"><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public void valueUnbound(HttpSessionBindingEvent arg0) {</font></p>
<p style="font-size: 14pt"><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("该用户已下线！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font></p>
<p style="font-size: 14pt"><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font></p>
<p style="font-size: 14pt"><font color="#000080"></font>&nbsp;</p>
<p style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#000080">代码很简单，只要在valueBound和valueUnbound中实现就行了。</font></p>
<p style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#000080">哈，很简单吧。</font></p>
 <img src ="http://www.blogjava.net/reallypride/aggbug/226756.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/reallypride/" target="_blank">真的骄傲</a> 2008-09-03 19:58 <a href="http://www.blogjava.net/reallypride/archive/2008/09/03/226756.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用JSP实现在线用户和已登录用户的统计</title><link>http://www.blogjava.net/reallypride/archive/2008/09/03/226755.html</link><dc:creator>真的骄傲</dc:creator><author>真的骄傲</author><pubDate>Wed, 03 Sep 2008 11:56:00 GMT</pubDate><guid>http://www.blogjava.net/reallypride/archive/2008/09/03/226755.html</guid><wfw:comment>http://www.blogjava.net/reallypride/comments/226755.html</wfw:comment><comments>http://www.blogjava.net/reallypride/archive/2008/09/03/226755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/reallypride/comments/commentRss/226755.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/reallypride/services/trackbacks/226755.html</trackback:ping><description><![CDATA[<font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpSessionListener&nbsp;&nbsp;&nbsp;&nbsp;接口用于监听HttpSession的创建和消除，使用这个接口，我们可以统计在线用户和登录用户的信息。方法的实现有很多种，这里介绍使用数据库保存用户的信息。</font>
<p style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#000080">建立一张表，包含两个字段：HttpSessionId和用户的Id。当有新的HttpSession创建时，把新创建的HttpSessionId插入到该表中，如果该用户登录，则修改相应的HttpSessionId的用户Id为当前用户Id。当HttpSession失效时，则删除掉表中的相应HttpSessionId的记录。</font></p>
<p style="font-size: 14pt"><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import javax.servlet.http.HttpSessionEvent;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;import javax.servlet.http.HttpSessionListener;</font></p>
<p style="font-size: 14pt"><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public class OnlineUser implements HttpSessionListener {</font></p>
<p style="font-size: 14pt"><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public void sessionCreated(HttpSessionEvent arg0) {</font></p>
<p style="font-size: 14pt"><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("又有人登录了。");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font></p>
<p style="font-size: 14pt"><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public void sessionDestroyed(HttpSessionEvent arg0) {</font></p>
<p style="font-size: 14pt"><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("又有人退出了。");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font></p>
<p style="font-size: 14pt"><font color="#000080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</font></p>
<p style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#000080">最后，还要在web.xml文件中配置一下监听器：</font></p>
<p style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#000080">&lt;listener&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;display-name&gt;listener&lt;/display-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;listener-class&gt;info.OnlineUser&lt;/listener-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/listener&gt;</font></p>
<p style="font-size: 14pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#000080">大功告成了。</font></p>
 <img src ="http://www.blogjava.net/reallypride/aggbug/226755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/reallypride/" target="_blank">真的骄傲</a> 2008-09-03 19:56 <a href="http://www.blogjava.net/reallypride/archive/2008/09/03/226755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>