<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>过儿oO</title>
    <description>山一样的男人</description>
    <link>http://guoeroo.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>JSF的6个生命周期</title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/198902" style="color:red;">http://guoeroo.javaeye.com/blog/198902</a>&nbsp;
          发表时间: 2008年05月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1、触发一个请求。<br />2、将数据绑定到请求中。<br />3、处理验证。<br />4、更新模型。<br />5、出来application应用。<br />6、重绘视图。
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/198902#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 31 May 2008 09:13:08 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/198902</link>
        <guid>http://guoeroo.javaeye.com/blog/198902</guid>
      </item>
      <item>
        <title>servlet跳转到jsp页面的服务器端跳转</title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/180766" style="color:red;">http://guoeroo.javaeye.com/blog/180766</a>&nbsp;
          发表时间: 2008年04月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          可以使用<br /><pre name="code" class="java">
request.getRequestDispatcher("xxx.jsp").forward(request,response);
</pre><br /><br />就是&lt;jsp:forward page=""/>标签封装的内容
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/180766#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Apr 2008 11:42:34 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/180766</link>
        <guid>http://guoeroo.javaeye.com/blog/180766</guid>
      </item>
      <item>
        <title>计算机自动重启的可能性分析</title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/180056" style="color:red;">http://guoeroo.javaeye.com/blog/180056</a>&nbsp;
          发表时间: 2008年04月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1．病毒 ，清除病毒，木马。 <br />2、检查CPU和显卡的温度是否过高 ，CPU和显卡温度过高常常会引起保护性自动重启。给风扇除尘，上油或更换新风扇。 <br />3、市电压不稳、机箱电源功率不足，当运行大型的3D游戏等占用CPU资源较大的软件时，CPU需要大功率供电时，电源功率不够而超载引起电源保护而重启。换高质量大功率计算机电源。 <br />4、内存热稳定性不良、芯片损坏或者设置错误也会造成重启。加大内存，更换内存。 <br />5、集成显卡、声卡与添加的独立显卡、声卡冲突造成重启。屏蔽主板自带的集成显卡、声卡。 <br />6、还有显卡、网卡松动， 并口、串口、USB接口接入有故障或不兼容时也会自动重启 。插紧、更换。 <br />7、系统文件被破坏，系统在启动时会因此无法完成初始化而强迫重新启动。覆盖安装或重新安装。
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/180056#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 07 Apr 2008 12:20:23 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/180056</link>
        <guid>http://guoeroo.javaeye.com/blog/180056</guid>
      </item>
      <item>
        <title>关于inputFileUpload标签上传文件时的问题</title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/134782" style="color:red;">http://guoeroo.javaeye.com/blog/134782</a>&nbsp;
          发表时间: 2007年10月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>前提我用tomcat做web容器时，当用<font face="Arial">inputFileUpload这个标签上传文件时，如果上传20几M的文件，连续上传会出现虚拟机内存泄漏，因为tomcat默认就不大，我发现的是如果你连续上传还没有到达虚拟机自动清理无用对象的时候，就已经超出了，这个时候就会发生这个错误，也就是说它在这个时间段内累计了</font></p>
<p>解决办法是加上<font face="Arial">storage=&quot;file&quot;这个属性</font></p>
<p>不用这个属性是走的UploadedFileDefaultMemoryImp这个实现类，是把文件放在内存中，而类UploadedFileDefaultFileImpl使用一个非序列化域(transient field)来保存一个对FileItem实例的引用。只有当getInputStream()被调用时，才通过这个引用读取上传文件的内容。</p>
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/134782#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 23 Oct 2007 14:52:36 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/134782</link>
        <guid>http://guoeroo.javaeye.com/blog/134782</guid>
      </item>
      <item>
        <title>ICEface官方文档翻译（原创--不断更新中...）</title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/129631" style="color:red;">http://guoeroo.javaeye.com/blog/129631</a>&nbsp;
          发表时间: 2007年10月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Begin</p>
<p>&nbsp;&nbsp;&nbsp; 这个文档将帮助你快速的建立起ICEfaces的应用。通过阅读文档你将：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.对什么是ICEfaces，它能帮你做什么有个基本的了解。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.安装ICEfaces和在本地服务器运行应用例子。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.通过基本的ICEfaces指南，用ICEfaces来将标准的JSF改造成rich web应用程序。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.了解怎样将ICEfaces整合到多样的J2EE服务和开发环境。</p>
<p>&nbsp;&nbsp;&nbsp; 先决条件</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ICEfaces应用是JSF应用，所以首先你必须是一个熟练的JSF开发者。</p>
<p align="center">&nbsp;&nbsp;&nbsp;<strong> 第一章 ICEfaces入门</strong></p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong>ICEfaces是为标准java快速建立的基于AJAX方案企业的第一标准。rich web应用是易维护的，易扩展的，有层次且低花&nbsp;&nbsp; 费 的。ICEfaces为<font face="Arial">JavaServer Faces应用和基于AJAX交互式访问提高和JSF框架标准提供了一个rich web的表述环境。</font></p>
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/129631#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 08 Oct 2007 09:41:03 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/129631</link>
        <guid>http://guoeroo.javaeye.com/blog/129631</guid>
      </item>
      <item>
        <title>Ajax4jsf过滤器的相关问题</title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/123823" style="color:red;">http://guoeroo.javaeye.com/blog/123823</a>&nbsp;
          发表时间: 2007年09月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我按官方网站配置好Ajax4jsf过滤器后，一切运行正常，就是当我导出excel的时候，我发现excel文件已经写了，但是当你保存或打开的时候，就会直接到处当前的页面而不是要生成的数据，而把过滤器去掉就没有问题，谁遇到过这个问题，或者过滤器怎么改
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/123823#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 14 Sep 2007 15:12:50 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/123823</link>
        <guid>http://guoeroo.javaeye.com/blog/123823</guid>
      </item>
      <item>
        <title>关于hibernate中Qurey类的setDate方法自动截掉时分秒的解决办法</title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/121340" style="color:red;">http://guoeroo.javaeye.com/blog/121340</a>&nbsp;
          发表时间: 2007年09月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>遇到一个这样的问题</p>
<p>在hibernate应用时，Qurey对象qurey</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>Query&nbsp;query&nbsp;=&nbsp;ses.createQuery(HQL); &nbsp;&nbsp;</span></span></li>
    <li class=""><span>query.setDate(</span><span class="string">&quot;endTime&quot;</span><span>,</span><span class="keyword">new</span><span>&nbsp;Date()); &nbsp;&nbsp;</span></li>
</ol>
</div>
<p>这个时候的new Date()被截去了时分秒</p>
<p>解决办法</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>Query&nbsp;query&nbsp;=&nbsp;ses.createQuery(HQL);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>query.setTimestamp(</span><span class="string">&quot;endTime&quot;</span><span>,</span><span class="keyword">new</span><span>&nbsp;Date());&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
这样就可以了=. =
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/121340#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 06 Sep 2007 16:55:19 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/121340</link>
        <guid>http://guoeroo.javaeye.com/blog/121340</guid>
      </item>
      <item>
        <title>关于ActionMessage对象</title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/105704" style="color:red;">http://guoeroo.javaeye.com/blog/105704</a>&nbsp;
          发表时间: 2007年07月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>高于struts1.2才能够识别这个对象，如果你的程序因为这个报类的转换错误，那就是你的版本不对，有的时候你明明弄来个包是1.2的放上去就是不好用。可能你那个版本是假的。不过那天我在官方网站下的1.3.8的包放上去居然也不识别这个对象。。</p>
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/105704#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Jul 2007 11:00:00 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/105704</link>
        <guid>http://guoeroo.javaeye.com/blog/105704</guid>
      </item>
      <item>
        <title>XML学习中理解（不断更新中）</title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/94745" style="color:red;">http://guoeroo.javaeye.com/blog/94745</a>&nbsp;
          发表时间: 2007年06月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>XML的意思是可扩展的标记语言。</p>
<p>1、格式方面要求比HTML要严格，有开始必须有结束，如<aoao></aoao>还得必须有</p>
<p>2、在XML中有且只能有一个根元素。</p>
<p>3、XML中CDATA段的应用，如果在有程序或算法等程式的信息，那么可能会包含很多特殊字符串，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 都转化成那种实体引用，那会是相当大的工作量，还有在表达上也一目了然，一眼就能看出这个程式</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 的逻辑内容，以后出错也好改。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; CDATA段举例：</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag"><!--sp--><span class="tag-name"><font color="#2b91af">&lt;</font>xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span> </span></li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">java</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><!--ATA[</--><span class="cdata"><!--DATA[ </sp--></span></li>
    <li class=""><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;if(a&gt;b&nbsp;&amp;&amp;&nbsp;c)</span></span> </li>
    <li class="alt"><span><span class="cdata">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max=a; </span>&nbsp;</span> </li>
    <li class=""><span><span class="cdata">]]&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span></span><span class="tag"><span class="tag-name"><span class="tag">&lt;/<span class="tag-name">java</span>&gt;</span></span></span></li>
</ol>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/94745#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 27 Jun 2007 16:07:22 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/94745</link>
        <guid>http://guoeroo.javaeye.com/blog/94745</guid>
      </item>
      <item>
        <title>关于接口作用的自己的一些理解</title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/94567" style="color:red;">http://guoeroo.javaeye.com/blog/94567</a>&nbsp;
          发表时间: 2007年06月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>首先，说接口是一个无具体实现的抽象的类</p>
<p>使用接口的几大原因我感觉有以下几点：</p>
<p>1、便于管理，接口就像一个方法List一样，很容易维护，大型项目，可能有高级程序员先把接口定义好，按照公司或项目</p>
<p>的规定定义，具体功能有文档说明那种。然后，底下的开发人员具体实现这个List中的每一个方法，要知道，接口里的方法是必</p>
<p>须全实现，才能正确实现。</p>
<p>2、java里是不能做到类的多继承的，而接口可以做到，比如说我一个接口完全可以有多个实现类</p>
<p>3、如果用类来写公共类，写代码的时候还要每次都new一个此类的对象，如果不想这么做就必须给它预先分配个空间吧写成static，而接口可以直接aoaoDao.wahahaha( )对吧 ^ ^</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/94567#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 27 Jun 2007 10:54:58 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/94567</link>
        <guid>http://guoeroo.javaeye.com/blog/94567</guid>
      </item>
      <item>
        <title>MD5算法的原理</title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/92813" style="color:red;">http://guoeroo.javaeye.com/blog/92813</a>&nbsp;
          发表时间: 2007年06月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p dir="ltr" style="MARGIN-RIGHT: 0px">   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在一些初始化处理后，MD5以512位分组来处理输入文本，每一分组又划分为16个32位子分组。算法的输出由四个32位分组组成，将它们级联形成一个128位散列值。<br />
首先填充消息使其长度恰好为一个比512位的倍数仅小64位的数。填充方法是附一个1在消息后面，后接所要求的多个0，然后在其后附上64位的消息长度（填充前）。这两步的作用是使消息长度恰好是512位的整数倍（算法的其余部分要求如此），同时确保不同的消息在填充后不相同。<br />
四个32位变量初始化为：<br />
A=0x01234567<br />
B=0x89abcdef<br />
C=0xfedcba98<br />
D=0x76543210<br />
它们称为链接变量（chaining variable）<br />
接着进行算法的主循环，循环的次数是消息中512位消息分组的数目。<br />
将上面四个变量复制到别外的变量中：A到a，B到b，C到c，D到d。<br />
主循环有四轮（MD4只有三轮），每轮很相拟。第一轮进行16次操作。每次操作对a，b，c和d中的其中三个作一次非线性函数运算，然后将所得结果加上第四个变量，文本的一个子分组和一个常数。再将所得结果向右环移一个不定的数，并加上a，b，c或d中之一。最后用该结果取代a，b，c或d中之一。<br />
以一下是每次操作中用到的四个非线性函数（每轮一个）。<br />
F(X,Y,Z)=(X&amp;Y)|((~X)&amp;Z)<br />
G(X,Y,Z)=(X&amp;Z)|(Y&amp;(~Z))<br />
H(X,Y,Z)=X^Y^Z<br />
I(X,Y,Z)=Y^(X|(~Z))<br />
(&amp;是与,|是或,~是非,^是异或)<br />
这些函数是这样设计的：如果X、Y和Z的对应位是独立和均匀的，那么结果的每一位也应是独立和均匀的。<br />
函数F是按逐位方式操作：如果X，那么Y，否则Z。函数H是逐位奇偶操作符。<br />
设Mj表示消息的第j个子分组（从0到15），&lt;&lt;FF(a,b,c,d,Mj,s,ti)表示a=b+((a+(F(b,c,d)+Mj+ti)&lt;&lt;GG(a,b,c,d,Mj,s,ti)表示a=b+((a+(G(b,c,d)+Mj+ti)&lt;&lt;HH(a,b,c,d,Mj,s,ti)表示a=b+((a+(H(b,c,d)+Mj+ti)&lt;&lt;II(a,b,c,d,Mj,s,ti)表示a=b+((a+(I(b,c,d)+Mj+ti)&lt;&lt;这四轮（64步）是：<br />
第一轮<br />
FF(a,b,c,d,M0,7,0xd76aa478)<br />
FF(d,a,b,c,M1,12,0xe8c7b756)<br />
FF(c,d,a,b,M2,17,0x242070db)<br />
FF(b,c,d,a,M3,22,0xc1bdceee)<br />
FF(a,b,c,d,M4,7,0xf57c0faf)<br />
FF(d,a,b,c,M5,12,0x4787c62a)<br />
FF(c,d,a,b,M6,17,0xa8304613)<br />
FF(b,c,d,a,M7,22,0xfd469501)<br />
FF(a,b,c,d,M8,7,0x698098d8)<br />
FF(d,a,b,c,M9,12,0x8b44f7af)<br />
FF(c,d,a,b,M10,17,0xffff5bb1)<br />
FF(b,c,d,a,M11,22,0x895cd7be)<br />
FF(a,b,c,d,M12,7,0x6b901122)<br />
FF(d,a,b,c,M13,12,0xfd987193)<br />
FF(c,d,a,b,M14,17,0xa679438e)<br />
FF(b,c,d,a,M15,22,0x49b40821)<br />
第二轮<br />
GG(a,b,c,d,M1,5,0xf61e2562)<br />
GG(d,a,b,c,M6,9,0xc040b340)<br />
GG(c,d,a,b,M11,14,0x265e5a51)<br />
GG(b,c,d,a,M0,20,0xe9b6c7aa)<br />
GG(a,b,c,d,M5,5,0xd62f105d)<br />
GG(d,a,b,c,M10,9,0x02441453)<br />
GG(c,d,a,b,M15,14,0xd8a1e681)<br />
GG(b,c,d,a,M4,20,0xe7d3fbc8)<br />
GG(a,b,c,d,M9,5,0x21e1cde6)<br />
GG(d,a,b,c,M14,9,0xc33707d6)<br />
GG(c,d,a,b,M3,14,0xf4d50d87)<br />
GG(b,c,d,a,M8,20,0x455a14ed)<br />
GG(a,b,c,d,M13,5,0xa9e3e905)<br />
GG(d,a,b,c,M2,9,0xfcefa3f8)<br />
GG(c,d,a,b,M7,14,0x676f02d9)<br />
GG(b,c,d,a,M12,20,0x8d2a4c8a)<br />
第三轮<br />
HH(a,b,c,d,M5,4,0xfffa3942)<br />
HH(d,a,b,c,M8,11,0x8771f681)<br />
HH(c,d,a,b,M11,16,0x6d9d6122)<br />
HH(b,c,d,a,M14,23,0xfde5380c)<br />
HH(a,b,c,d,M1,4,0xa4beea44)<br />
HH(d,a,b,c,M4,11,0x4bdecfa9)<br />
HH(c,d,a,b,M7,16,0xf6bb4b60)<br />
HH(b,c,d,a,M10,23,0xbebfbc70)<br />
HH(a,b,c,d,M13,4,0x289b7ec6)<br />
HH(d,a,b,c,M0,11,0xeaa127fa)<br />
HH(c,d,a,b,M3,16,0xd4ef3085)<br />
HH(b,c,d,a,M6,23,0x04881d05)<br />
HH(a,b,c,d,M9,4,0xd9d4d039)<br />
HH(d,a,b,c,M12,11,0xe6db99e5)<br />
HH(c,d,a,b,M15,16,0x1fa27cf8)<br />
HH(b,c,d,a,M2,23,0xc4ac5665)<br />
第四轮<br />
II(a,b,c,d,M0,6,0xf4292244)<br />
II(d,a,b,c,M7,10,0x432aff97)<br />
II(c,d,a,b,M14,15,0xab9423a7)<br />
II(b,c,d,a,M5,21,0xfc93a039)<br />
II(a,b,c,d,M12,6,0x655b59c3)<br />
II(d,a,b,c,M3,10,0x8f0ccc92)<br />
II(c,d,a,b,M10,15,0xffeff47d)<br />
II(b,c,d,a,M1,21,0x85845dd1)<br />
II(a,b,c,d,M8,6,0x6fa87e4f)<br />
II(d,a,b,c,M15,10,0xfe2ce6e0)<br />
II(c,d,a,b,M6,15,0xa3014314)<br />
II(b,c,d,a,M13,21,0x4e0811a1)<br />
II(a,b,c,d,M4,6,0xf7537e82)<br />
II(d,a,b,c,M11,10,0xbd3af235)<br />
II(c,d,a,b,M2,15,0x2ad7d2bb)<br />
II(b,c,d,a,M9,21,0xeb86d391)<br />
常数ti可以如下选择：<br />
在第i步中，ti是4294967296*abs(sin(i))的整数部分,i的单位是弧度。<br />
(2的32次方)<br />
所有这些完成之后，将A，B，C，D分别加上a，b，c，d。然后用下一分组数据继续运行算法，最后的输出是A，B，C和D的级联。 </p>
<p>MD5的安全性</p>
<p>MD5相对MD4所作的改进：<br />
1.增加了第四轮.<br />
2.每一步均有唯一的加法常数.<br />
3.为减弱第二轮中函数G的对称性从(X&amp;Y)|(X&amp;Z)|(Y&amp;Z)变为(X&amp;Z)|(Y&amp;(~Z))<br />
4.第一步加上了上一步的结果,这将引起更快的雪崩效应.<br />
5.改变了第二轮和第三轮中访问消息子分组的次序,使其更不相似.<br />
6.近似优化了每一轮中的循环左移位移量以实现更快的雪崩效应.各轮的位移量互不相同.</p>
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/92813#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 21 Jun 2007 16:19:54 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/92813</link>
        <guid>http://guoeroo.javaeye.com/blog/92813</guid>
      </item>
      <item>
        <title>判断radio是否有被选中值</title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/92492" style="color:red;">http://guoeroo.javaeye.com/blog/92492</a>&nbsp;
          发表时间: 2007年06月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>function judgeRadioChecked(obj)<br />
{<br />
&nbsp;&nbsp; if (obj){<br />
&nbsp;&nbsp;&nbsp; if (obj.length!=undefined)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0;i &lt; obj.length;i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (obj[i].checked) return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (obj.checked) return true;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; return false;<br />
}</p>
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/92492#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 20 Jun 2007 20:37:45 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/92492</link>
        <guid>http://guoeroo.javaeye.com/blog/92492</guid>
      </item>
      <item>
        <title>关于新弹出子窗口的一些属性 </title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/91658" style="color:red;">http://guoeroo.javaeye.com/blog/91658</a>&nbsp;
          发表时间: 2007年06月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span>&nbsp;&lt;script LANGUAGE=&quot;javascript&quot;&gt; js脚本开始； <br />
&nbsp;window.open 弹出新窗口的命令； <br />
&nbsp;page.html 弹出新窗口的文件名； <br />
&nbsp;newwindow 弹出窗口的名字（不是文件名），可用空 &Prime;代替； <br />
&nbsp;height=100 窗口高度； <br />
&nbsp;top=0 窗口距离屏幕上方的像素值； <br />
&nbsp;left=0 窗口距离屏幕左侧的像素值； <br />
&nbsp;toolbar=no 是否显示工具栏，yes为显示； <br />
&nbsp;menubar,scrollbars 表示菜单栏和滚动栏； <br />
&nbsp;resizable=no 是否允许改变窗口大小，yes为允许； <br />
&nbsp;location=no 是否显示地址栏，yes为允许； <br />
&nbsp;status=no 是否显示状态栏内的信息（通常是文件已经打开），yes为允许； <br />
&nbsp;&lt;/script&gt; js脚本结束。</span>
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/91658#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 18 Jun 2007 17:56:21 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/91658</link>
        <guid>http://guoeroo.javaeye.com/blog/91658</guid>
      </item>
      <item>
        <title>synchronized和native关键字的使用方法 </title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/91657" style="color:red;">http://guoeroo.javaeye.com/blog/91657</a>&nbsp;
          发表时间: 2007年06月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="txtcontent"><span>
<p>一、&nbsp;Synchronized关键字&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;关键字synchronized可以作为JAVA方法修饰符，也可以作为JAVA方法内的语句。<br />
被它修饰的代码部分往往被描述为临界区。这使很多人认为，由于代码被syscharonized保护着，因此同一时刻只能有一个线程访问它。<br />
对于JAVA类中的方法，关键字sysnchronized其实并不锁定该方法或该方法的部分代码，它只是锁定对象。<br />
当synchronized被当做方法修饰符的时候，他所取得的lock将被交给方法调用者（某对象）。如果synchronized作用于某对象的引用，则取得的lock将交给该引用所指的对象。<br />
对一个对象进行同步控制到底意味什么呢？它说明调用该方法的线程将会取得对象的lock。持有对象A的lock的线程，如果另外通过synchronized函数或者synchronized语句来申请对象A的lock的线程，在该lock被释放前无法获得满足。<br />
因此，synchronized方法或synchronized区段内的代码在同一时刻下可有多个线程执行，只要是对不同的对象调用该方法。</p>
<p>1.&nbsp;synchronized&nbsp;方法：通过在方法声明中加入&nbsp;synchronized关键字来声明&nbsp;synchronized&nbsp;方法。如：&nbsp;&nbsp;</p>
<p>　　public&nbsp;synchronized&nbsp;void&nbsp;accessVal(int&nbsp;newVal);<br />
　　<br />
　　&nbsp;synchronized&nbsp;方法控制对类成员变量的访问：每个类实例对应一把锁，每个&nbsp;synchronized&nbsp;方法都必须获得调用该方法的类实例的锁方能执行，否则所属线程阻塞，方法一旦执行，就独占该锁，直到从该方法返回时才将锁释放，此后被阻塞的线程方能获得该锁，重新进入可执行状态。&nbsp;</p>
<p>　　这种机制确保了同一时刻对于每一个类实例，其所有声明为&nbsp;synchronized&nbsp;的成员函数中至多只有一个处于可执行状态（因为至多只有一个能够获得该类实例对应的锁），从而有效避免了类成员变量的访问冲突（只要所有可能访问类成员变量的方法均被声明为&nbsp;synchronized）。&nbsp;</p>
<p>　　在Java中，不光是类实例，每一个类也对应一把锁，这样我们也可将类的静态成员函数声明为&nbsp;synchronized&nbsp;，以控制其对类的静态成员变量的访问。&nbsp;</p>
<p>　　synchronized&nbsp;方法的缺陷：若将一个大的方法声明为synchronized&nbsp;将会大大影响效率，典型地，若将线程类的方法&nbsp;run()&nbsp;声明为&nbsp;synchronized&nbsp;，由于在线程的整个生命期内它一直在运行，因此将导致它对本类任何&nbsp;synchronized&nbsp;方法的调用都永远不会成功。当然我们可以通过将访问类成员变量的代码放到专门的方法中，将其声明为&nbsp;synchronized&nbsp;，并在主方法中调用来解决这一问题，但是&nbsp;Java为我们提供了更好的解决办法，那就是&nbsp;synchronized&nbsp;块。&nbsp;</p>
<p>　　2.&nbsp;synchronized&nbsp;块：通过&nbsp;synchronized关键字来声明synchronized&nbsp;块。语法如下：&nbsp;</p>
<p>　　synchronized(syncObject)<br />
　　{&nbsp;<br />
　　//允许访问控制的代码&nbsp;<br />
　　}<br />
　　<br />
　　synchronized&nbsp;块是这样一个代码块，其中的代码必须获得对象&nbsp;syncObject&nbsp;（如前所述，可以是类实例或类）的锁方能执行，具体机制同前所述。由于可以针对任意代码块，且可任意指定上锁的对象，故灵活性较高。</p>
<p>二、&nbsp;Native关键字<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用native关键字说明这个方法是原生函数，也就是这个方法是用C/C++语言实现的，并且被编译成了DLL，由java去调用。<br />
这些函数的实现体在DLL中，JDK的源代码中并不包含，你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制，实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。<br />
java是跨平台的语言，既然是跨了平台，所付出的代价就是牺牲一些对底层的控制，而java要实现对底层的控制，就需要一些其他语言的帮助，这个就是native的作用了<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;3.&nbsp;&nbsp;&nbsp;native方法</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;native方法是用户在java中可以使用，但不能编写的方法。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JNI(Java&nbsp;Native&nbsp;Interface)，它允许Java虚拟机(Jvm)内部运行的Java代码能够与用其它编程语言编写的应用程序和库进行互操作。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JNI最大的好处是它没有对底层Java虚拟机的实现施加任何限制，因此，Java虚拟机厂商可以在不影响虚拟机其它部分的情况下添加对JNI的支持。程序员只需编写一种版本的本地(Native)应用程序和库，就能够与所有支持JNI的Java虚拟机协同工作</p>
</span></div>
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/91657#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 18 Jun 2007 17:53:15 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/91657</link>
        <guid>http://guoeroo.javaeye.com/blog/91657</guid>
      </item>
      <item>
        <title>关于线程的一些基本方法 </title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/89922" style="color:red;">http://guoeroo.javaeye.com/blog/89922</a>&nbsp;
          发表时间: 2007年06月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span>　　Thread(); //建立一个线程<br />
　　void run(); //对于一个继承了Runnable接口的class而言，<br />
　　//他运行一个线程,否着他什么都不做<br />
　　void setPriority(int newPriority); //设置优先级<br />
　　void start(); //运行一个程序<br />
　　void sleep(long millis); //线程睡眠millis毫秒<br />
　　static void yield(); //临时pause一个程序以便起他线程运行</span>
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/89922#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 14 Jun 2007 00:17:21 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/89922</link>
        <guid>http://guoeroo.javaeye.com/blog/89922</guid>
      </item>
      <item>
        <title>JSF中Tree2组件使用方法</title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/89921" style="color:red;">http://guoeroo.javaeye.com/blog/89921</a>&nbsp;
          发表时间: 2007年06月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span>Tree2组件使用HTML表格将你的数据呈现为一个树。这个树是动态的：当用户点击它们时它们可以展开或者折叠。该组件同时支持客户端和服务端的交互方式，在客户端交互时使用了JavaScript。 在随后的例子中，每次用户的点击将产生一个Request / Response 周期，并在新的视图状态（View State）中重新呈现新的树结构。 <br />
<br />
　　注：在后面的例子中只有可见的（已经展开的节点）数据被传送到客户端。而在第一个例子（客户端Tree），在每个HTML Response中，整个树都被发送到客户端浏览器。树的每个节点都包含了不少的HTML代码（假定每个节点200个字符，这个大小将取决于你希望在节点上显示的信息的量），这些信息将被传送到浏览器，其中包括了那些不可见的节点（没有展开的节点），因为它们的一个祖系节点被展开。如果你有一个深度有四层的树，平均每个结点拥有四个子结点，这时候你就需要传输10 + 102 + 103 + 104 = 11 110个节点，每个节点有200个字符，这个树总共就有2 222 000个字符，也就是2M的数据。这个例子将向用户说明，虽然纯客户端Tree会给客户端带来更好的用户体验，但随之而来的带宽问题迅速的增长。纯客户端的树适用于小型的树，或者在Intranet及宽带连接中使用的中型大小的树。对于大型的树，或者你需要照顾到一些低带宽的用户的需要时，你就需要使用服务端树。你可以通过<t:tree2>的clientSideToggle这个属性来选择你使用的是客户端的树或者服务端的树，＜t:tree2＞的clientSideToggle这个属性来选择你使用的是客户端的树或者服务端的树，＜t:tree2 clientSideToggle=&quot;false&quot; ...＞将会使用服务端的树，属性值设为true将会使用客户端的树，默认值为true。<br />
<br />
　　Backing Bean:<br />
<br />
　　Tree2组件对Backing Bean中的一个TreeModel进行操作。通常情况，你只要把这个TreeModel绑定到这个组件上就可以了，就像这样：<br />
<br />
<table border="1" bordercolor="#cccccc" align="center" bgcolor="#e3e3e3" width="90%">
    <tbody>
        <tr>
            <td>＜t:tree2 value=&quot;#{myHandler.treeModel}&quot; </td>
        </tr>
    </tbody>
</table>
<br />
　　下面需要建立一个类MyHandler，在faces-config.xml中的managed bean配置成myHandler，在例子中这个类提供了一个方法getTreeModel()用于返回一个TreeModel用于表示你的数据。<br />
<br />
<table border="1" bordercolor="#cccccc" align="center" bgcolor="#e3e3e3" width="90%">
    <tbody>
        <tr>
            <td>public class MyHandler {<br />
            　public TreeModel getTreeModel() {<br />
            　　......<br />
            　}<br />
            }</td>
        </tr>
    </tbody>
</table>
<br />
　　TreeModel实际上是对TreeNode实例进行了一些简单的包装。<br />
<br />
　　TreeNode是一个接口，其中和tree2相关有四个方法：<br />
<br />
<table border="1" bordercolor="#cccccc" align="center" bgcolor="#e3e3e3" width="90%">
    <tbody>
        <tr>
            <td>String getType()<br />
            boolean isLeaf()<br />
            List getChildren()<br />
            int getChildCount()</td>
        </tr>
    </tbody>
</table>
<br />
　　其它方法都没有什么用处了，可能会在今后的版本中取消。它们要求开发者在开发backing bean中做一些并不必要的操作。<br />
<br />
　　int getChildCount() 方法返回这个节点的子结点数量，这个方法了很容易的采用如下的方式实现：<br />
<br />
<table border="1" bordercolor="#cccccc" align="center" bgcolor="#e3e3e3" width="90%">
    <tbody>
        <tr>
            <td>public final int getChildCount() {<br />
            return getChildren().size();<br />
            }</td>
        </tr>
    </tbody>
</table>
<br />
　　该方法的出现使得对于子结点的延迟加载变的可行。该方法的实现只需要返回该节点的子结点数量，而不需要返回每个子结点的实例。<br />
<br />
　　boolean isLeaf() 方法在该节点没有子节点的时候返回true。这样，一个很直截了当的实现可以这样：<br />
<br />
<table border="1" bordercolor="#cccccc" align="center" bgcolor="#e3e3e3" width="90%">
    <tbody>
        <tr>
            <td>public final boolean isLeaf() {<br />
            return getChildren().isEmpty();<br />
            }</td>
        </tr>
    </tbody>
</table>
<br />
　　不管你提供了什么样的实现，在任何时间任何情况下你都得保持getChildren().isEmpty() ==＞ isLeaf()。isLeaf()方法实际上控制了节点被怎样呈现：是否被当做树叶节点（不能被继续展开）。<br />
<br />
　　String getType() 方法决定了用怎样的方式来呈现这个节点。在 JSF 页面中，可以在 ＜t:tree2＞ 的Tag 中嵌套facet，JSF将会选出与 getType() 方法返回值同名的 facet 用于呈现。如果该节点没有找到相符的 facet，将会导致一个错误，并且这个方法不会返回null。<br />
<br />
　　List getChildren() 方法返回一个 List，其中包含了该节点下所有的 TreeNode，这就表示这些节点将被呈现为该节点下的子结点。该 List 不能包含 null，如果该 List 的大小和getChildCount()不符，将会报错。子结点将按照它们在 List 中的顺序呈现出来。<br />
<br />
　　改变Tree中的内容<br />
<br />
　　（当展开树的节点时，在后台延迟加载）<br />
<br />
　　在邮件列表中有很多关于这项任务的问题和讨论，我（Marcel，一个 JSF 的初学者）在这里总结一下。如果你有更好的解决方案，请更新这些文字。<br />
<br />
　　在这里存在的一个问题就是我要这样把&ldquo;＋&rdquo;图标去掉：<br />
<br />
　　&middot; ＜t:tree2 ... showNav=&quot;false&quot; ...＞ <br />
　<br />
　　然后再让文件夹图标（代表包含子节点的节点）变的可点击：<br />
<br />
　　&middot; ＜h:commandLink action=&quot;#{t.toggleExpanded}&quot; actionListener=&quot;#{navigationBacker.processAction}&quot;＞ <br />
<br />
　　然后在 Java 代码中接受鼠标点击的事件。在 NavigationBacker.java 文件中的processAction(ActionEvent e) 方法里，我从 EJB3-persistency 中加载子结点的数据。<br />
<br />
　　不好的是&ldquo;＋&rdquo;图标变的不可见，但是我现在没有办法获取点击&ldquo;＋&rdquo;图标的事件。<br />
<br />
　　看起来在org.apache.myfaces.custom.tree2.HtmlTree.java这个文件里是通过注册了_expandControl = new HtmlCommandLink(); 从内部获取&ldquo;＋&rdquo;的点击事件，但是我现在没有办法从我的代码中接受到这一事件。<br />
<br />
　　为了导航，我使用了含有entries的TreeNode.getIdentifier() （参见：#{node.identifier}），看起来就是这个样子：<br />
<br />
　　&middot; db_id=&quot;car_id=7,person_id=2&quot; <br />
<br />
　　这代表了后台数据库表的主键（我还没有找到一个更好的解决方案用于导航）<br />
<br />
　　程序代码如下：<br />
<br />
　　navigation.jsp <br />
<br />
<table border="1" bordercolor="#cccccc" align="center" bgcolor="#e3e3e3" width="90%">
    <tbody>
        <tr>
            <td>＜t:tree2 id=&quot;serverTree&quot; value=&quot;#{navigationBacker.treeData}&quot;<br />
            var=&quot;node&quot; varNodeToggler=&quot;t&quot; clientSideToggle=&quot;false&quot; showNav=&quot;false&quot;<br />
            showRootNode=&quot;false&quot;＞<br />
            ＜f:facet name=&quot;project-folder&quot;＞<br />
            ＜h:panelGroup＞<br />
            ＜h:commandLink action=&quot;#{t.toggleExpanded}&quot; actionListener=&quot;#{navigationBacker.processAction}&quot;＞<br />
            ＜t:graphicImage value=&quot;/images/yellow-folder-open.png&quot;<br />
            rendered=&quot;#{t.nodeExpanded}&quot; border=&quot;0&quot; /＞<br />
            ＜t:graphicImage value=&quot;/images/yellow-folder-closed.png&quot;<br />
            rendered=&quot;#{!t.nodeExpanded}&quot; border=&quot;0&quot; /＞<br />
            ＜/h:commandLink＞<br />
            ＜h:commandLink action=&quot;#{navigationBacker.toViewId}&quot;<br />
            styleClass=&quot;#{t.nodeSelected ? 'documentSelected':'document'}&quot;<br />
            actionListener=&quot;#{navigationBacker.nodeClicked}&quot;<br />
            value=&quot;#{node.description}&quot; immediate=&quot;true&quot;＞<br />
            ＜f:param name=&quot;db_id&quot; value=&quot;#{node.identifier}&quot; /＞<br />
            <br />
            ＜/h:commandLink＞<br />
            ＜h:outputText value=&quot; (#{node.childCount})&quot; styleClass=&quot;childCount&quot;<br />
            rendered=&quot;#{!empty node.children}&quot; /＞<br />
            ＜/h:panelGroup＞<br />
            ＜/f:facet＞<br />
            ＜f:facet name=&quot;person-folder&quot;＞<br />
            ＜h:panelGroup＞</td>
        </tr>
    </tbody>
</table>
<br />
　　NavigationBacker.java <br />
<br />
<table border="1" bordercolor="#cccccc" align="center" bgcolor="#e3e3e3" width="90%">
    <tbody>
        <tr>
            <td>/** *//**<br />
            * 拦截节点被展开的事件，并加载额外的数据<br />
            * @param event<br />
            * @throws AbortProcessingException<br />
            */<br />
            public void processAction(ActionEvent event) throws AbortProcessingException {<br />
            System.out.println(&quot;Entering processAction()&quot;);<br />
            UIComponent component = (UIComponent) event.getSource();<br />
            while (!(component != null &amp;&amp; component instanceof HtmlTree)) {<br />
            　component = component.getParent();<br />
            }<br />
            if (component != null) {<br />
            　HtmlTree tree = (HtmlTree) component;<br />
            　TreeNodeBase node = (TreeNodeBase) tree.getNode();<br />
            　if (!tree.isNodeExpanded() &amp;&amp; node.getChildren().size() == 0) {<br />
            　　Map＜String, String＞ map = splitKeyValues(node.getIdentifier()); // 一些辅助代码，用于将 &quot;car_id=7&quot; 或 &quot;car_id=7&amp;person_id=12&quot; 拆分开<br />
            　　this.car_id = map.get(&quot;car_id&quot;);<br />
            　　if (this.car_id != null) {<br />
            　　　appendPersonsNodes(node); // 参见下面的例子<br />
            　　}<br />
            　　this.person_id = map.get(&quot;person_id&quot;);<br />
            　　if (this.person_id != null) {<br />
            　　　appendLicensesNodes(node); // 没有显示<br />
            　　}<br />
            　}<br />
            }<br />
            }<br />
            <br />
            /** *//** 把当前car_id下的Person子结点加入导航中 */<br />
            private void appendPersonsNodes(TreeNodeBase carDetailNode) {<br />
            　VariableResolver resolver = FacesContext.getCurrentInstance().getApplication().getVariableResolver();<br />
            　PersonsTable personsTable = (PersonsTable) resolver.resolveVariable(FacesContext.getCurrentInstance(),<br />
            &quot;personsTable&quot;);<br />
            　List＜Person＞ personsList = personsTable.getCarPersons();<br />
            　for (Person o : personsList) {<br />
            　　List＜TreeNodeBase＞ list = carDetailNode.getChildren();<br />
            　　list.add(new TreeNodeBase(&quot;person-folder&quot;, o.getDescription(),&quot;person_id=&quot; + o.getPersonId(), true));<br />
            　}<br />
            　System.out.println(&quot;NavigationBacker fetched &quot; + personsList.size() + &quot; Persons for carId=&quot; + this.car_id);<br />
            }</td>
        </tr>
    </tbody>
</table>
<br />
　　这里有一段辅助代码用于从 h:commandLink 中获取 f:param 用于多种用途。<br />
<br />
<table border="1" bordercolor="#cccccc" align="center" bgcolor="#e3e3e3" width="90%">
    <tbody>
        <tr>
            <td>/** *//**<br />
            * 当 JSF 组件 h:commandLink 包含有 f:param 成员, 这些 name-value 对被放到 <br />
            * request 参数表中供后面的action handler使用。不幸的是，这样的用法不能用在<br />
            * h:commandButton上。我们没有办法把通过 button 来传递这些参数。<br />
            *<br />
            * 因为 Action Listeners 可以保证在 Action 方法前被执行到，所以 Action Listeners <br />
            * 可以调用该方法更新 Action 方法所需要的任何上下文。<br />
            *<br />
            * From http://cvs.sakaiproject.org/release/2.0.0/<br />
            * sakai2/gradebook/tool/src/java/org/sakaiproject/tool/gradebook/jsf/FacesUtil.java<br />
            * Educational Community License Version 1.0<br />
            */<br />
            public static final Map getEventParameterMap(FacesEvent event) {<br />
            　Map＜String, String＞ parameterMap = new HashMap＜String, String＞();<br />
            　List children = event.getComponent().getChildren();<br />
            　for (Iterator iter = children.iterator(); iter.hasNext();) {<br />
            　　Object next = iter.next();<br />
            　　if (next instanceof UIParameter) {<br />
            　　　UIParameter param = (UIParameter) next;<br />
            　　　parameterMap.put(param.getName(), &quot;&quot; + param.getValue());<br />
            　　}<br />
            　}<br />
            　//System.out.println(&quot;parameterMap=&quot; + parameterMap);<br />
            　return parameterMap;<br />
            }</td>
        </tr>
    </tbody>
</table>
<br />
　　注：在上面的例子里，backing bean都存放于 session 作用域里，可以在WEB-INF/examples-config.xml 中进行配置。</t:tree2></span>
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/89921#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 14 Jun 2007 00:15:05 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/89921</link>
        <guid>http://guoeroo.javaeye.com/blog/89921</guid>
      </item>
      <item>
        <title>DHTML事件描述 </title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/85100" style="color:red;">http://guoeroo.javaeye.com/blog/85100</a>&nbsp;
          发表时间: 2007年05月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="txtcontent">
<table class="clsStd" width="100%" style="BACKGROUND: #ffffff">
    <tbody>
        <tr>
            <th>&nbsp;</th>
            <th>&nbsp;</th>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onactivate.html">onactivate</a> </td>
            <td>当<span replace="1">对象</span>设置为<a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/properties/activeElement.html">活动元素</a>时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onafterupdate.html">onafterupdate</a> </td>
            <td>当成功更新数据源对象中的关联对象后在数据绑定对象上触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onbeforeactivate.html">onbeforeactivate</a> </td>
            <td><span replace="1">对象</span>要被设置为<strong>当前元素</strong>前立即触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onbeforecopy.html">onbeforecopy</a> </td>
            <td>当选中区复制到系统剪贴板之前在源对象触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onbeforecut.html">onbeforecut</a> </td>
            <td>当选中区从文档中删除之前在源对象触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onbeforedeactivate.html">onbeforedeactivate</a> </td>
            <td>在 <a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/properties/activeElement.html">activeElement</a> 从当前<span replace="1">对象</span>变为父文档其它对象之前立即触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onbeforeeditfocus.html">onbeforeeditfocus</a> </td>
            <td>在包含于可编辑元素内的对象进入<span title="被用户或方法所选中的显示的内容，以便可输入文本。激活区域通常被虚线包围。当用户按 Enter 键、单击拥有焦点的对象或双击对象时可导致对象进入用户界面(UI)激活状态。要以用户界面激活状态放置对象，文档或包含该对象的元素必须处于编辑模式。用户界面激活的对象也是当前对象。" class="clsGLossary">用户界面激活</span>状态前或可编辑容器变成<span title="显示用户选中的内容和缩放句柄。可使用对象的方法获取并修改选中区的 HTML 文本。元素的例子为选中包括图像、表格和任意绝对定位的元素中的控件。" class="clsGlossary">控件选中区</span>前触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onbeforepaste.html">onbeforepaste</a> </td>
            <td>在选中区从系统剪贴板粘贴到文档前在目标对象上触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onbeforeupdate.html">onbeforeupdate</a> </td>
            <td>当成功更新数据源对象中的关联对象前在数据绑定对象上触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onblur.html">onblur</a> </td>
            <td>在<span replace="1">对象</span>失去输入焦点时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onclick.html">onclick</a> </td>
            <td>在用户用鼠标左键单击<span replace="1">对象</span>时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/oncontextmenu.html">oncontextmenu</a> </td>
            <td>在用户使用鼠标右键单击客户区打开上下文菜单时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/oncontrolselect.html">oncontrolselect</a> </td>
            <td>当用户将要对该<span replace="1">对象</span>制作一个<span title="显示用户选中的内容和缩放句柄。可使用对象的方法获取并修改选中区的 HTML 文本。元素的例子为选中包括图像、表格和任意绝对定位的元素中的控件。" class="clsGlossary">控件选中区</span>时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/oncopy.html">oncopy</a> </td>
            <td>当用户复制<span replace="1">对象</span>或选中区，将其添加到系统剪贴板上时在源元素上触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/oncut.html">oncut</a> </td>
            <td>当<span replace="1">对象</span>或选中区从文档中删除并添加到系统剪贴板上时在源元素上触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/ondblclick.html">ondblclick</a> </td>
            <td>当用户双击<span replace="1">对象</span>时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/ondeactivate.html">ondeactivate</a> </td>
            <td>当 <strong>activeElement</strong> 从当前<span replace="1">对象</span>变为父文档其它对象时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/ondrag.html">ondrag</a> </td>
            <td>当进行拖曳操作时在源对象上持续触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/ondragend.html">ondragend</a> </td>
            <td>当用户在拖曳操作结束后释放鼠标时在源对象上触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/ondragenter.html">ondragenter</a> </td>
            <td>当用户拖曳<span replace="1">对象</span>到一个合法拖曳目标时在目标元素上触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/ondragleave.html">ondragleave</a> </td>
            <td>当用户在拖曳操作过程中将鼠标移出合法拖曳目标时在目标对象上触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/ondragover.html">ondragover</a> </td>
            <td>当用户拖曳<span replace="1">对象</span>划过合法拖曳目标时持续在目标元素上触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/ondragstart.html">ondragstart</a> </td>
            <td>当用户开始拖曳文本选中区或选中对象时在源对象上触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/ondrop.html">ondrop</a> </td>
            <td>当鼠标按钮在拖曳操作过程中释放时在目标对象上触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onerrorupdate.html">onerrorupdate</a> </td>
            <td>更新数据源对象中的关联数据出错时在数据绑定对象上触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onfilterchange.html">onfilterchange</a> </td>
            <td>当可视滤镜更改状态或完成转换时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onfocus.html">onfocus</a> </td>
            <td>当<span replace="1">对象</span>获得焦点时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onfocusin.html">onfocusin</a> </td>
            <td>当元素将要被设置为焦点之前触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onfocusout.html">onfocusout</a> </td>
            <td>在移动焦点到其它元素之后立即触发于当前拥有焦点的元素上触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onhelp.html">onhelp</a> </td>
            <td>当用户在浏览器为当前窗口时按 F1 键时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onkeydown.html">onkeydown</a> </td>
            <td>当用户按下键盘按键时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onkeypress.html">onkeypress</a> </td>
            <td>当用户按下字面键时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onkeyup.html">onkeyup</a> </td>
            <td>当用户释放键盘按键时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onlayoutcomplete.html">onlayoutcomplete</a> </td>
            <td>当打印或打印预览版面处理完成用来自于源文档的内容填充当前 <a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/browser/hosting/printpreview/reference/behaviors/LayoutRect.html">LayoutRect</a> 对象时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onlosecapture.html">onlosecapture</a> </td>
            <td>当<span replace="1">对象</span>失去鼠标捕捉时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onmousedown.html">onmousedown</a> </td>
            <td>当用户用任何鼠标按钮单击<span replace="1">对象</span>时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onmouseenter.html">onmouseenter</a> </td>
            <td>当用户将鼠标指针移动到对象内时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onmouseleave.html">onmouseleave</a> </td>
            <td>当用户将鼠标指针移出<span replace="1">对象</span>边界时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onmousemove.html">onmousemove</a> </td>
            <td>当用户将鼠标划过<span replace="1">对象</span>时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onmouseout.html">onmouseout</a> </td>
            <td>当用户将鼠标指针移出<span replace="1">对象</span>边界时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onmouseover.html">onmouseover</a> </td>
            <td>当用户将鼠标指针移动到<span replace="1">对象</span>内时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onmouseup.html">onmouseup</a> </td>
            <td>当用户在鼠标位于<span replace="1">对象</span>之上时释放鼠标按钮时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onmousewheel.html">onmousewheel</a> </td>
            <td>当鼠标滚轮按钮旋转时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onmove.html">onmove</a> </td>
            <td>当<span replace="1">对象</span>移动时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onmoveend.html">onmoveend</a> </td>
            <td>当<span replace="1">对象</span>停止移动时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onmovestart.html">onmovestart</a> </td>
            <td>当<span replace="1">对象</span>开始移动时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onpaste.html">onpaste</a> </td>
            <td>当用户粘贴数据以便从系统剪贴板向文档传送数据时在目标对象上触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onpropertychange.html">onpropertychange</a> </td>
            <td>当在对象上发生<span replace="1">对象</span>上发生属性更改时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onreadystatechange.html">onreadystatechange</a> </td>
            <td>当<span replace="1">对象</span>状态变更时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onresize.html">onresize</a> </td>
            <td>当<span replace="1">对象</span>的大小将要改变时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onresizeend.html">onresizeend</a> </td>
            <td>当用户更改完控件选中区中<span replace="1">对象</span>的尺寸时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onresizestart.html">onresizestart</a> </td>
            <td>当用户开始更改控件选中区中<span replace="1">对象</span>的尺寸时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onscroll.html">onscroll</a> </td>
            <td>当用户滚动<span replace="1">对象</span>的滚动条时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/events/onselectstart.html">onselectstart</a> </td>
            <td><span replace="1">对象</span>将要被选中时触发。</td>
        </tr>
        <tr>
            <td><a href="mk:@MSITStore:C:\Documents%20and%20Settings\Administrator\桌面\DHTML手册(CHM)\DHTML%20手册.chm::/DHTMLref/time2/events/ontimeerror.html">ontimeerror</a> </td>
            <td>当特定时间错误发生时无条件触发，通常由将属性设置为无效值导致。</td>
        </tr>
    </tbody>
</table>
<br />
最终选定了onpropertychange,于是上面的div的内容就变成了<br />
&lt;div id='returnDiv' onpropertychange=&quot;document.getElementById('InputText').value = this.innerText;&quot;&gt;，调试成功。呵呵。<br />
<br />
例子：
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #000000">测试框：<br />
<img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">INPUT&nbsp;</span><span style="COLOR: #ff0000">TYPE</span><span style="COLOR: #0000ff">=&quot;text&quot;</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">=&quot;test1&quot;</span><span style="COLOR: #ff0000">&nbsp;size</span><span style="COLOR: #0000ff">=&quot;30&quot;</span><span style="COLOR: #ff0000">&nbsp;onKeyup</span><span style="COLOR: #0000ff">=&quot;document.getElementById('receiveDiv').innerText=this.value;&quot;</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;（在这里输入字符）</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">BR</span><span style="COLOR: #0000ff">&gt;&lt;</span><span style="COLOR: #800000">BR</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />
<img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">div&nbsp;</span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">='receiveDiv'&nbsp;</span><span style="COLOR: #ff0000">onpropertychange</span><span style="COLOR: #0000ff">=&quot;document.getElementById('test2').value=this.innerText;&quot;</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">div</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />
<img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">INPUT&nbsp;</span><span style="COLOR: #ff0000">TYPE</span><span style="COLOR: #0000ff">=&quot;text&quot;</span><span style="COLOR: #ff0000">&nbsp;id</span><span style="COLOR: #0000ff">=&quot;test2&quot;</span><span style="COLOR: #ff0000">&nbsp;size</span><span style="COLOR: #0000ff">=&quot;30&quot;</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />
<img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">BR</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />
<img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">BR</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br />
<img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" alt="" />这个测试只是测试&nbsp;onpropertychange&nbsp;的实现。<br />
<img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" alt="" /></span></div>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/85100#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 31 May 2007 15:34:20 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/85100</link>
        <guid>http://guoeroo.javaeye.com/blog/85100</guid>
      </item>
      <item>
        <title>servlet技术简介</title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/85046" style="color:red;">http://guoeroo.javaeye.com/blog/85046</a>&nbsp;
          发表时间: 2007年05月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          　<strong>1．Servlet 是什么？</strong><br />
<span class="font">　　</span>Servlet是使用Java Servlet 应用程序设计接口（API）及相关类和方法的 Java 程序。除了 Java Servlet API，Servlet 还可以使用用以扩展和添加到 API 的 Java 类软件包。Servlet 在启用 Java 的 Web 服务器上或应用服务器上运行并扩展了该服务器的能力。Java servlet对于Web服务器就好象Java applet对于Web浏览器。Servlet装入Web服务器并在Web服务器内执行，而applet装入Web浏览器并在Web浏览器内执行。Java Servlet API 定义了一个servlet 和Java使能的服务器之间的一个标准接口，这使得Servlets具有跨服务器平台的特性。<br />
<span class="font">　　</span>Servlet 通过创建一个框架来扩展服务器的能力，以提供在 Web 上进行请求和响应服务。当客户机发送请求至服务器时，服务器可以将请求信息发送给 Servlet，并让 Servlet 建立起服务器返回给客户机的响应。 当启动 Web 服务器或客户机第一次请求服务时，可以自动装入 Servlet。装入后， Servlet 继续运行直到其它客户机发出请求。Servlet 的功能涉及范围很广。例如，Servlet 可完成如下功能：<br />
<span class="font">　　</span>(1) 创建并返回一个包含基于客户请求性质的动态内容的完整的 HTML页面。<br />
<span class="font">　　</span>(2) 创建可嵌入到现有 HTML 页面中的一部分 HTML 页面（HTML 片段）。<br />
<span class="font">　　</span>(3) 与其它服务器资源（包括数据库和基于 Java 的应用程序）进行通信。<br />
<span class="font">　　</span>(4) 用多个客户机处理连接，接收多个客户机的输入，并将结果广播到多个客户机上。例如，Servlet 可以是多参与者的游戏服务器。<br />
<span class="font">　　</span>(5) 当允许在单连接方式下传送数据的情况下，在浏览器上打开服务器至applet的新连接，并将该连<br />
接保持在打开状态。当允许客户机和服务器简单、高效地执行会话的情况下，applet也可以启动客户浏览器和服务器之间的连接。可以通过定制协议或标准（如 IIOP）进行通信。<br />
<span class="font">　　</span>(6) 对特殊的处理采用 MIME 类型过滤数据，例如图像转换和服务器端包括（SSI）。<br />
<span class="font">　　</span>(7) 将定制的处理提供给所有服务器的标准例行程序。例如，Servlet 可以修改如何认证用户。<br />
<span class="font">　　</span><strong>2．Servlet 的生命周期</strong><br />
<span class="font">　　</span>Servlet 的生命周期始于将它装入 Web 服务器的内存时，并在终止或重新装入 Servlet 时结束。<br />
<span class="font">　　</span>(1) 初始化<br />
<span class="font">　　</span>在下列时刻装入 Servlet：<br />
<img src="http://www.stcsm.gov.cn/learning/lesson/image/bullet.gif" height="7" alt="" width="7" />　如果已配置自动装入选项，则在启动服务器时自动装入<br />
<img src="http://www.stcsm.gov.cn/learning/lesson/image/bullet.gif" height="7" alt="" width="7" />　在服务器启动后，客户机首次向 Servlet 发出请求时<br />
<img src="http://www.stcsm.gov.cn/learning/lesson/image/bullet.gif" height="7" alt="" width="7" />　重新装入 Servlet 时装入 Servlet 后，服务器创建一个 Servlet 实例并且调用 Servlet 的 init() 方法。在初始化阶段，Servlet 初始化参数被传递给 Servlet 配置对象。<br />
<span class="font">　　</span>(2) 请求处理<br />
<span class="font">　　</span>对于到达服务器的客户机请求，服务器创建特定于请求的一个&ldquo;请求&rdquo;对象和一个&ldquo;响应&rdquo;对象。服务器调用 Servlet 的 service() 方法，该方法用于传递&ldquo;请求&rdquo;和&ldquo;响应&rdquo;对象。service() 方法从&ldquo;请求&rdquo;对象获得请求信息、处理该请求并用&ldquo;响应&rdquo;对象的方法以将响应传回客户机。service() 方法可以调用其它方法来处理请求，例如 doGet()、doPost() 或其它的方法。<br />
<span class="font">　　</span>(3) 终止<br />
<span class="font">　　</span>当服务器不再需要 Servlet, 或重新装入 Servlet 的新实例时，服务器会调用 Servlet 的 destroy() 方法。<br />
<span class="font">　　</span><strong>3. Java Servlet API</strong><br />
<span class="font">　　</span>Java Servlet 开发工具（JSDK）提供了多个软件包，在编写 Servlet 时需要用到这些软件包。其中包括两个用于所有 Servlet 的基本软件包：javax.servlet 和 javax.servlet.http。可从sun公司的Web站点下载 Java Servlet 开发工具。 下面主要介绍javax.servlet.http提供的HTTP Servlet应用编程接口。<br />
<span class="font">　　</span>HTTP Servlet 使用一个 HTML 表格来发送和接收数据。要创建一个 HTTP Servlet，请扩展 HttpServlet 类， 该类是用专门的方法来处理 HTML 表格的 GenericServlet 的一个子类。 HTML 表单是由 &lt;FORM&gt; 和 &lt;/FORM&gt; 标记定义的。表单中典型地包含输入字段（如文本输入字段、复选框、单选按钮和选择列表）和用于提交数据的按钮。当提交信息时，它们还指定服务器应执行哪一个Servlet（或其它的程序）。 HttpServlet 类包含 init()、destroy()、service() 等方法。其中 init() 和 destroy() 方法是继承的。<br />
<span class="font">　　</span>(1) init() 方法<br />
<span class="font">　　</span>在 Servlet 的生命期中，仅执行一次 init() 方法。它是在服务器装入 Servlet 时执行的。可以配置服务器，以在启动服务器或客户机首次访问 Servlet 时装入 Servlet。 无论有多少客户机访问 Servlet，都不会重复执行 init() 。<br />
<span class="font">　　</span>缺省的 init() 方法通常是符合要求的，但也可以用定制 init() 方法来覆盖它，典型的是管理服务器端资源。 例如，可能编写一个定制 init() 来只用于一次装入 GIF 图像，改进 Servlet 返回 GIF 图像和含有多个客户机请求的性能。另一个示例是初始化数据库连接。缺省的 init() 方法设置了 Servlet 的初始化参数，并用它的 ServletConfig 对象参数来启动配置， 因此所有覆盖 init() 方法的 Servlet 应调用 super.init() 以确保仍然执行这些任务。在调用 service() 方法之前，应确保已完成了 init() 方法。<br />
<span class="font">　　</span>(2) service() 方法<br />
<span class="font">　　</span>service() 方法是 Servlet 的核心。每当一个客户请求一个HttpServlet 对象，该对象的service() 方法就要被调用，而且传递给这个方法一个&ldquo;请求&rdquo;（ServletRequest）对象和一个&ldquo;响应&rdquo;（ServletResponse）对象作为参数。在 HttpServlet 中已存在 service() 方法。缺省的服务功能是调用与 HTTP 请求的方法相应的 do 功能。例如， 如果 HTTP 请求方法为 GET，则缺省情况下就调用 doGet() 。Servlet 应该为 Servlet 支持的 HTTP 方法覆盖 do 功能。因为 HttpServlet.service() 方法会检查请求方法是否调用了适当的处理方法，不必要覆盖 service() 方法。只需覆盖相应的 do 方法就可以了。<br />
<img src="http://www.stcsm.gov.cn/learning/lesson/image/bullet.gif" height="7" alt="" width="7" />　当一个客户通过HTML 表单发出一个HTTP POST请求时，doPost（）方法被调用。与POST请求相关的参数作为一个单独的HTTP 请求从浏览器发送到服务器。当需要修改服务器端的数据时，应该使用doPost()方法。<br />
<img src="http://www.stcsm.gov.cn/learning/lesson/image/bullet.gif" height="7" alt="" width="7" />　当一个客户通过HTML 表单发出一个HTTP GET请求或直接请求一个URL时，doGet()方法被调用。与GET请求相关的参数添加到URL的后面，并与这个请求一起发送。当不会修改服务器端的数据时，应该使用doGet()方法。<br />
<span class="font">　　</span>Servlet的响应可以是下列几种类型：<br />
<span class="font">　　</span>一个输出流，浏览器根据它的内容类型（如text/HTML）进行解释。<br />
<span class="font">　　</span>一个HTTP错误响应, 重定向到另一个URL、servlet、JSP。<br />
<span class="font">　　</span>(3) destroy() 方法<br />
<span class="font">　　</span>destroy() 方法仅执行一次，即在服务器停止且卸装Servlet 时执行该方法。典型的，将 Servlet 作为服务器进程的一部分来关闭。缺省的 destroy() 方法通常是符合要求的，但也可以覆盖它，典型的是管理服务器端资源。例如，如果 Servlet 在运行时会累计统计数据，则可以编写一个 destroy() 方法，该方法用于在未装入 Servlet 时将统计数字保存在文件中。另一个示例是关闭数据库连接。<br />
当服务器卸装 Servlet 时，将在所有 service() 方法调用完成后，或在指定的时间间隔过后调用 destroy() 方法。一个Servlet 在运行service() 方法时可能会产生其它的线程，因此请确认在调用 destroy() 方法时，这些线程已终止或完成。<br />
<span class="font">　　</span>(4) GetServletConfig（）方法<br />
<span class="font">　　</span>GetServletConfig（）方法返回一个 ServletConfig 对象，该对象用来返回初始化参数和<span class="font">　　</span>ServletContext。ServletContext 接口提供有关servlet 的环境信息。<br />
<span class="font">　　</span>(5) GetServletInfo（）方法<br />
<span class="font">　　</span>GetServletInfo（）方法是一个可选的方法，它提供有关servlet 的信息，如作者、版本、版权。<br />
<span class="font">　　</span>当服务器调用sevlet 的Service（）、doGet（）和doPost（）这三个方法时，均需要 &ldquo;请求&rdquo;和&ldquo;响应&rdquo;对象作为参数。&ldquo;请求&rdquo;对象提供有关请求的信息，而&ldquo;响应&rdquo;对象提供了一个将响应信息返回给浏览器的一个通信途径。javax.servlet 软件包中的相关类为ServletResponse和ServletRequest，而javax.servlet.http 软件包中的相关类为HttpServletRequest 和 HttpServletResponse。Servlet 通过这些对象与服务器通信并最终与客户机通信。Servlet 能通过调用&ldquo;请求&rdquo;对象的方法获知客户机环境，服务器环境的信息和所有由客户机提供的信息。Servlet 可以调用&ldquo;响应&rdquo;对象的方法发送响应，该响应是准备发回客户机的。<br />
<span class="font">　　</span><span class="titlefont">4.2 创建HTTP Servlet</span><span class="font"><a name="2"></a><br />
<span class="font">　　</span>创建一个 HTTP Servlet，通常涉及下列四个步骤：<br />
<span class="font">　　</span>1. 扩展 HttpServlet 抽象类。<br />
<span class="font">　　</span>2. 重载适当的方法。]如覆盖（或称为重写）doGet() 或doPost()方法。<br />
<span class="font">　　</span>3. 如果有 HTTP 请求信息的话，获取该信息。用 HttpServletRequest 对象来检索 HTML 表格所<br />
<span class="font">　　</span>提交的数据或 URL 上的查询字符串。&ldquo;请求&rdquo;对象含有特定的方法以检索客户机提供的信息，有3个可用的方法：<br />
<img src="http://www.stcsm.gov.cn/learning/lesson/image/bullet.gif" height="7" alt="" width="7" />　getParameterNames()，<br />
<img src="http://www.stcsm.gov.cn/learning/lesson/image/bullet.gif" height="7" alt="" width="7" />　getParameter()，<br />
<img src="http://www.stcsm.gov.cn/learning/lesson/image/bullet.gif" height="7" alt="" width="7" />　getParameterValues()。<br />
<span class="font">　　</span>4. 生成 HTTP 响应。HttpServletResponse 对象生成响应，并将它返回到发出请求的客户机上。它<br />
的方法允许设置&ldquo;请求&rdquo; 标题和&ldquo;响应&rdquo;主体。&ldquo;响应&rdquo;对象还含有 getWriter() 方法以返回一个 PrintWriter 对象。使用 PrintWriter 的 print() 和 println() 方法以编写 Servlet 响应来返回给客户机。或者，直接使用out对象输出有关HTML文档内容。<br />
<span class="font">　　</span>一个servlet样例(ServletSample.java)如下：<br />
<span class="font">　　</span>import java.io.*;<br />
<span class="font">　　</span>import java.util.*;<br />
<span class="font">　　</span>import javax.servlet.*;<br />
<span class="font">　　</span>import javax.servlet.http.*;</span>
<p class="font" align="left"><span class="font">　　</span>public class ServletSample extends HttpServlet { // 第一步： 扩展 HttpServlet 抽象类。<br />
<span class="font">　　</span><br />
<span class="font">　　</span>public void doGet (HttpServletRequest request, HttpServletResponse response)<br />
<span class="font">　　</span>throws ServletException, IOException { // 第二步：重写doGet()方法<br />
<br />
<span class="font">　　</span>String myName = &quot;&quot;; // 第三步：获取HTTP 请求信息<br />
<span class="font">　　</span>java.util.Enumeration keys = request.getParameterNames();<br />
<span class="font">　　</span>while (keys.hasMoreElements());<br />
<span class="font">　　</span>{<br />
<span class="font">　　</span>key = (String) keys.nextElement();<br />
<span class="font">　　</span>if (key.equalsIgnoreCase(&quot;myName&quot;))<br />
<span class="font">　　</span>myName = request.getParameter(key);<br />
<span class="font">　　</span>}<br />
<span class="font">　　</span>if (myName == &quot;&quot;)<br />
<span class="font">　　</span>myName = &quot;Hello&quot;;<br />
<span class="font">　　</span>// 第四步：生成 HTTP 响应。<br />
<span class="font">　　</span>response.setContentType(&quot;text/html&quot;);<br />
<span class="font">　　</span>response.setHeader(&quot;Pragma&quot;, &quot;No-cache&quot;);<br />
<span class="font">　　</span>response.setDateHeader(&quot;Expires&quot;, 0);<br />
<span class="font">　　</span>response.setHeader(&quot;Cache-Control&quot;, &quot;no-cache&quot;);</p>
<p align="left"><span class="font"><span class="font">　　</span>out.println(&quot;&lt;head&gt;&lt;title&gt;Just a basic servlet&lt;/title&gt;&lt;/head&gt;&quot;);<br />
<span class="font">　　</span>out.println(&quot;&lt;body&gt;&quot;);<br />
<span class="font">　　</span>out.println(&quot;&lt;h1&gt;Just a basic servlet&lt;/h1&gt;&quot;);<br />
<span class="font">　　</span>out.println (&quot;&lt;p&gt;&quot; + myName + &quot;, this is a very basic servlet that writes an HTML<br />
<span class="font">　　</span> page.&quot;);<br />
<span class="font">　　</span>out.println (&quot;&lt;p&gt;For instructions on running those samples on your WebSphere应用服务器, <span class="font">　　</span>&quot;+<br />
<span class="font">　　</span>&quot;open the page:&quot;);<br />
<span class="font">　　</span>out.println(&quot;&lt;pre&gt;http://&lt;em&gt;your.server.name&lt;/em&gt;/IBMWebAs/samples/index.aspl&lt;/pre&gt;&quot;);<br />
<span class="font">　　</span>out.println(&quot;where &lt;em&gt;your.server.name&lt;/em&gt; is the hostname of your WebSphere应用服<br />
<span class="font">　　</span>务器.&quot;);<br />
<span class="font">　　</span>out.println(&quot;&lt;/body&gt;&lt;/html&gt;&quot;);<br />
<span class="font">　　</span>out.flush();<br />
<span class="font">　　</span>}<br />
<span class="font">　　</span>}<br />
<span class="font">　　</span>上述ServletSample类扩展 HttpServlet 抽象类、重写doGet()方法。在重写的doGet()方法中，获取HTTP 请求中的一个任选的参数（myName），该参数可作为调用的 URL 上的查询参数传递到 Servlet。使用示例如下：<a href="http://your.server.name/servlet/ServletSample?myname=Michael">http://your.server.name/servlet/ServletSample?myname=Michael</a>。<br />
<span class="font">　　*</span></span><span class="titlefont">调用 Servlet</span><span class="font"><a name="3"></a><br />
<span class="font">　　</span>要调用 Servlet 或 Web 应用程序，请使用下列任一种方法：由 URL 调用、在 &lt;FORM&gt; 标记中调用、在 &lt;SERVLET&gt;标记中调用、在 JSP 文件中调用、在 ASP 文件中调用。<br />
<span class="font">　　</span><strong>1. 由 URL 调用 Servlet</strong><br />
<span class="font">　　</span>这里有两种用 Servlet 的 URL 从浏览器中调用该 Servlet 的方法：<br />
<span class="font">　　</span>(1) 指定 Servlet 名称：当用 WebSphere应用服务器 管理器来将一个 Servlet 实例添加（注册）到服务器配置中时，必须指定&ldquo;Servlet 名称&rdquo;参数的值。例如，可以指定将hi作为HelloWorldServlet 的 Servlet 名称。要调用该 Servlet，需打开 http://your.server.name/servlet/hi。也可以指定 Servlet 和类使用同一名称（HelloWorldServlet）。在这种情况下，将由 http://your.server.name/servlet/HelloWorldServlet 来调用 Servlet 的实例。<br />
<span class="font">　　</span>(2) 指定 Servlet 别名：用 WebSphere应用服务器 管理器来配置 Servlet 别名，该别名是用于调用 Servlet 的快捷 URL。快捷 URL 中不包括 Servlet 名称。<br />
<span class="font">　　</span><strong>2. 在 &lt;FORM&gt; 标记中指定 Servlet</strong><br />
<span class="font">　　</span>可以在 &lt;FORM&gt; 标记中调用 Servlet。HTML 格式使用户能在 Web 页面（即从浏览器）上输入数据，并向 Servlet 提交数据。例如：<br />
<span class="font">　　</span>&lt;FORM METHOD=&quot;GET&quot; ACTION=&quot;/servlet/myservlet&quot;&gt;<br />
<span class="font">　　</span>&lt;OL&gt;<br />
<span class="font">　　</span>&lt;INPUT TYPE=&quot;radio&quot; NAME=&quot;broadcast&quot; VALUE=&quot;am&quot;&gt;AM&lt;BR&gt;<br />
<span class="font">　　</span>&lt;INPUT TYPE=&quot;radio&quot; NAME=&quot;broadcast&quot; VALUE=&quot;fm&quot;&gt;FM&lt;BR&gt;<br />
<span class="font">　　</span>&lt;/OL&gt;<br />
<span class="font">　　</span>（用于放置文本输入区域的标记、按钮和其它的提示符。）<br />
<span class="font">　　</span>&lt;/FORM&gt;<br />
<span class="font">　　</span>ACTION 特性表明了用于调用 Servlet 的 URL。关于METHOD 的特性，如果用户输入的信息是通过 GET 方法向 Servlet 提交的，则 Servlet 必须优先使用 doGet() 方法。反之，如果用户输入的信息是通过 POST 方法向 Servlet 提交的，则 Servlet 必须优先使用 doPost() 方法。使用 GET 方法时，用户提供的信息是查询字符串表示的 URL 编码。无需对 URL 进行编码，因为这是由表单完成的。然后 URL 编码的查询字符串被附加到 Servlet URL 中，则整个 URL 提交完成。URL 编码的查询字符串将根据用户同可视部件之间的交互操作，将用户所选的值同可视部件的名称进行配对。例如，考虑前面的 HTML 代码段将用于显示按钮(标记为 AM 和 FM)，如果用户选择 FM 按钮，则查询字符串将包含 name=value 的配对操作为broadcast=fm。因为在这种情况下，Servlet 将响应 HTTP 请求，因此 Servlet 应基于 HttpServlet 类。Servlet 应根据提交给它的查询字符串中的用户信息使用的 GET 或 POST 方法，而相应地使用 doGet() 或 doPost() 方法。<br />
<span class="font">　　</span><strong>3．在 &lt;SERVLET&gt; 标记中指定 Servlet</strong><br />
<span class="font">　　</span>当使用 &lt;SERVLET&gt; 标记来调用 Servlet 时，如同使用 &lt;FORM&gt; 标记一样，无需创建一个完整的 HTML 页面。作为替代，Servlet 的输出仅是 HTML 页面的一部分，且被动态嵌入到原始 HTML 页面中的其它静态文本中。所有这些都发生在服务器上，且发送给用户的仅是结果 HTML 页面。建议在 Java 服务器页面（JSP）文件中使用 &lt;SERVLET&gt; 标记。请参阅有关 JSP 技术<br />
<span class="font">　　</span>原始 HTML 页面中包含 &lt;SERVLET&gt; 和 &lt;/SERVLET&gt; 标记。 Servlet 将在这两个标记中被调用，且 Servlet 的响应将覆盖这两个标记间的所有东西和标记本身。如果用户的浏览器可以看到 HTML 源文件，则用户将看不到 &lt;SERVLET&gt; 和 &lt;/SERVLET&gt; 标记。要在 Domino Go Webserver 上使用该方法，请启用服务器上的服务器端包括功能。部分启用过程将会涉及到添加特殊文件类型 SHTML。当 Web 服务器接收到一个扩展名为 SHTML 的 Web 页面请求时，它将搜索 &lt;SERVLET&gt; 和 &lt;/SERVLET&gt; 标记。对于所有支持的 Web 服务器，WebSphere应用服务器 将处理 SERVLET 标记间的所有信息。下列 HTML 代码段显示了如何使用该技术。<br />
<span class="font">　　</span>&lt;SERVLET NAME=&quot;myservlet&quot; CODE=&quot;myservlet.class&quot; CODEBASE=&quot;url&quot; initparm1=&quot;value&quot;&gt;<br />
<span class="font">　　</span>&lt;PARAM NAME=&quot;parm1&quot; VALUE=&quot;value&quot;&gt;<br />
<span class="font">　　</span>&lt;/SERVLET&gt;<br />
<span class="font">　　</span>使用 NAME 和 CODE 属性带来了使用上的灵活性。可以只使用其中一个属性，也可以同时使用两个属性。 NAME 属性指定了 Servlet 的名称（使用 WebSphere应用服务器管理器配置的），或不带 .class 扩展名的 Servlet 类名。CODE 属性指定了 Servlet 类名。使用 WebSphere应用服务器 时，建议指定 NAME 和 CODE，或当 NAME 指定了 Servlet 名称时，仅指定 NAME。如果仅指定了 CODE，则会创建一个 NAME=CODE 的 Servlet 实例。装入的 Servlet 将假设 Servlet 名称与 NAME 属性中指定的名称匹配。然后，其它 SHTML 文件可以成功地使用 NAME 属性来指定 Servlet 的名称，并调用已装入的 Servlet。NAME 的值可以直接在要调用 Servlet 的 URL 中使用。如果 NAME 和 CODE 都存在，且 NAME 指定了一个现有 Servlet，则通常使用 NAME 中指定的 Servlet。由于 Servlet 创建了部分 HTML 文件，所以当创建 Servlet 时，将可能会使用 HttpServlet 的一个子类，并优先使用 doGet() 方法（因为 GET 方法是提供信息给 Servlet 的缺省方法）。另一个选项是优先使用 service() 方法。另外， CODEBASE 是可选的，它指定了装入 Servlet 的远程系统的 URL。请使用 WebSphere应用服务器 管理器来从 JAR 文件配置远程 Servlet 装入系统。<br />
<span class="font">　　</span>在上述的标记示例中，initparm1 是初始化参数名，value 是该参数的值。可以指定多个&ldquo;名称-值&rdquo;对的集合。利用 ServletConfig 对象（被传递到 Servlet 的 init() 方法中）的 getInitParameterNames() 和 getInitParameter() 方法来查找参数名和参数值的字符串数组。在示例中，parm1 是参数名，并在初始化 Servlet 后被才被设置某个值。因为只能通过使用&ldquo;请求&rdquo;对象的方法来使用以 &lt;PARAM&gt; 标记设置的参数，所以服务器必须调用 Servlet service() 方法，以从用户处传递请求。要获得有关用户的请求信息，请使用 getParameterNames()、getParameter() 和 getParameterValues() 方法。<br />
<span class="font">　　</span>初始化参数是持续的。假设一台客户机通过调用一个包含某些初始化参数的 SHTML 文件来调用 Servlet。并假设第二台客户机通过调用第二个 SHTML 文件来调用同一个 Servlet，且该 SHTML 中未指定任何初始化参数。那么第一次调用 Servlet 时所设置的初始化参数将一直可用，并且通过所有其它 SHTML 文件而调用的所有后继 Servlet 都不会更改该参数。直到 Servlet 调用了 destroy() 方法后，才能重新设置初始化参数。例如，如果另一个 SHTML 文件指定了另一个不同的初始化参数值，虽然已此时已装入了 Servlet，但该值仍将被忽略。<br />
<span class="font">　　</span><strong>4．在 JSP 文件中调用 Servlet</strong><br />
<span class="font">　　</span>可以从 JavaServer 页面（JSP）文件中调用 Servlet。请参阅JSP技术部分。<br />
<span class="font">　　</span><strong>5．在 ASP 文件中调用 Servlet</strong><br />
<span class="font">　　</span>如果在 Microsoft Internet Information Server（IIS）上有遗留的 ASP 文件，并且无法将 ASP 文件移植成 JSP 文件时，可用 ASP 文件来调用 Servlet。在 WebSphere应用服务器 中的 ASP 支持包括一个用于嵌入 Servlet 的 ActiveX 控制，下面介绍ActiveX 控制AspToServlet 的方法和属性。<br />
该方法说明如下：<br />
<span class="font">　　</span>(1) String ExecServletToString(String servletName)；执行 ServletName，并将其输出返回到一个字符串中。<br />
<span class="font">　　</span>(2) ExecServlet(String servletName)；执行 ServletName，并将其输出直接发送至 HTML 页面。<br />
<span class="font">　　</span>(3) String VarValue(String varName)；获得一预置变量值（其它格式）。<br />
<span class="font">　　</span>(4) VarValue(String varName, String newVal)；设置变量值。变量占据的总大小应小于 0.5 个千字节（Kbyte）。且仅对配置文件使用这些变量。<br />
<span class="font">　　</span>其属性如下：<br />
<img src="http://www.stcsm.gov.cn/learning/lesson/image/bullet.gif" height="7" alt="" width="7" />　Boolean WriteHeaders；若该属性为真，则 Servlet 提供的标题被写入用户处。缺省值为假。<br />
<img src="http://www.stcsm.gov.cn/learning/lesson/image/bullet.gif" height="7" alt="" width="7" />　Boolean OnTest；若该属性为真，服务器会将消息记录到生成的 HTML 页面中。缺省值为假。<br />
<span class="font">　　</span>下列ASP 脚本示例是以 Microsoft Visual Basic Scripting（VBScript）书写的。<br />
<span class="font">　　</span>&lt;%<br />
<span class="font">　　</span>' Small sample asp file to show the capabilities of the servlets and the ASP GateWay ...<br />
<span class="font">　　</span>%&gt;<br />
<span class="font">　　</span>&lt;H1&gt; Starting the ASP-&gt;Java Servlet demo&lt;/H1&gt;<br />
<span class="font">　　</span>&lt;%<br />
<span class="font">　　</span>' Create a Servlet gateway object and initialize it ...<br />
<span class="font">　　</span>Set javaasp = Server.CreateObject(&quot;AspToServlet.AspToServlet&quot;)<br />
<span class="font">　　</span>' Setting these properties is only for the sake of demo.<br />
<span class="font">　　</span>' These are the default values ...<br />
<span class="font">　　</span>javaasp.OnTest = False<br />
<span class="font">　　</span>javaasp.WriteHeaders = False<br />
<span class="font">　　</span>' Add several variables ...<br />
<span class="font">　　</span>javaasp.VarValue(&quot;gal&quot;) = &quot;lag&quot;<br />
<span class="font">　　</span>javaasp.VarValue(&quot;pico&quot;)= &quot;ocip&quot;<br />
<span class="font">　　</span>javaasp.VarValue(&quot;tal&quot;) = &quot;lat&quot;<br />
<span class="font">　　</span>javaasp.VarValue(&quot;paz&quot;) = &quot;zap&quot;<br />
<span class="font">　　</span>javaasp.VarValue(&quot;variable name with spaces&quot;) = &quot;variable value with spaces&quot;<br />
<span class="font">　　</span>%&gt;<br />
<span class="font">　　</span>&lt;BR&gt;<br />
<span class="font">　　</span>Lets check the variables<br />
<span class="font">　　</span>&lt;%<br />
<span class="font">　　</span>Response.Write(&quot;variable gal = &quot;)<br />
<span class="font">　　</span>Response.Write(javaasp.VarValue(&quot;gal&quot;))<br />
<span class="font">　　</span>%&gt;<br />
<span class="font">　　</span>&lt;BR&gt;<br />
<span class="font">　　</span>&lt;%<br />
<span class="font">　　</span>Response.Write(&quot;variable pico = &quot; &amp; javaasp.VarValue(&quot;pico&quot;))<br />
<span class="font">　　</span>%&gt;<br />
<span class="font">　　</span><br />
<span class="font">　　</span>&lt;BR&gt;<br />
<span class="font">　　</span>&lt;HR&gt;<br />
<span class="font">　　</span>&lt;%<br />
<span class="font">　　</span>galout = javaasp.ExecServletToString(&quot;SnoopServlet&quot;)<br />
<span class="font">　　</span>If javaasp.WriteHeaders = True Then<br />
<span class="font">　　</span>%&gt;<br />
<span class="font">　　</span>Headers were written &lt;%<br />
<span class="font">　　</span>Else<br />
<span class="font">　　</span>%&gt;<br />
<span class="font">　　</span>Headers were not written &lt;%<br />
<span class="font">　　</span>End If<br />
<span class="font">　　</span>Response.Write(galout)<br />
<span class="font">　　</span>%&gt;<br />
<span class="font">　　</span>&lt;H1&gt; The End ...&lt;/H1&gt;</span></p>
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/85046#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 31 May 2007 13:13:26 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/85046</link>
        <guid>http://guoeroo.javaeye.com/blog/85046</guid>
      </item>
      <item>
        <title>POST和GET方法主要区别</title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/82578" style="color:red;">http://guoeroo.javaeye.com/blog/82578</a>&nbsp;
          发表时间: 2007年05月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          POST将参数串放在请求体中发送，而GET方法是将参数追加到URL中发送。
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/82578#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 24 May 2007 13:53:10 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/82578</link>
        <guid>http://guoeroo.javaeye.com/blog/82578</guid>
      </item>
      <item>
        <title>W3C DOM到底是为什么产生的？</title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/82229" style="color:red;">http://guoeroo.javaeye.com/blog/82229</a>&nbsp;
          发表时间: 2007年05月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          说W3C DOM和javascript在发展中存在一些特异性和不兼容性，那起初的DOM是为什么而产生的呢？
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/82229#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 May 2007 15:48:03 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/82229</link>
        <guid>http://guoeroo.javaeye.com/blog/82229</guid>
      </item>
      <item>
        <title>Ajax学习中的信息</title>
        <author>过儿oO</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://guoeroo.javaeye.com">过儿oO</a>&nbsp;
          链接：<a href="http://guoeroo.javaeye.com/blog/82141" style="color:red;">http://guoeroo.javaeye.com/blog/82141</a>&nbsp;
          发表时间: 2007年05月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          做为Ajax的核心，XHR对象设计为允许从服务器异步的获取任意的数据
          <br/>
          <span style="color:red;">
            <a href="http://guoeroo.javaeye.com/blog/82141#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 May 2007 10:22:03 +0800</pubDate>
        <link>http://guoeroo.javaeye.com/blog/82141</link>
        <guid>http://guoeroo.javaeye.com/blog/82141</guid>
      </item>
  </channel>
</rss>