<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>igogogo9</title>
    <description></description>
    <link>http://igogogo9.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>IE已完毕，网页有错误</title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/206419" style="color:red;">http://igogogo9.javaeye.com/blog/206419</a>&nbsp;
          发表时间: 2008年06月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &lt;!--网页纠错代码开始--><br />    &lt;SCRIPT LANGUAGE="JavaScript"><br />    &lt;!-- Hide<br />    function killErrors() {<br />    return true;<br />    }<br />    window.onerror = killErrors;<br />    // --><br />    &lt;/SCRIPT><br />&lt;!--网页纠错代码结束-->
          <br/>
          <span style="color:red;">
            <a href="http://igogogo9.javaeye.com/blog/206419#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><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>Fri, 20 Jun 2008 17:52:30 +0800</pubDate>
        <link>http://igogogo9.javaeye.com/blog/206419</link>
        <guid>http://igogogo9.javaeye.com/blog/206419</guid>
      </item>
      <item>
        <title>Intellij IDEA 比较慢的问题</title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/205177" style="color:red;">http://igogogo9.javaeye.com/blog/205177</a>&nbsp;
          发表时间: 2008年06月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          修改IntelliJ IDEA 7.0\bin下idea.exe.vmoptions<br />    -server<br />    -Xverify:none<br />    -Xms300M<br />    -Xmx512M<br />    -XX:+UseParNewGC<br />    -XX:PermSize=128m<br />    -ea<br /><br />-server 使用server jvm。酌情使用，有些doc说IDEA加该选项可以提高速度。<br />-Xverify：none 关闭Java字节码验证，从而加快了类装入的速度，并使得在仅为验证目的而启动的过程中无需装入类，缩短了启动时间。<br />-Xms：是另一个设置内存的参数,用它来设置程序初始化的时候内存栈的大小，增加这个值的话你的程序的启动性能会得到提高。不过同样有前面的限制，以及受到xmx的限制。<br />-Xmx：是java的一个选项，用来设置你的应用程序能够使用的最大内存数（看好，致使你的应用程序，不是整个jvm）,如果你的程序要花很大内存的话，那就需要修改缺省的设置，比如配置tomcat的时候，如果流量啊程序啊都很大的话就需要加大这个值了，不过有一点是要记住的，不要大得超过你的机器的内存，那样你的机器会受不了的，到时候就死翘翘了。。<br />-XX：PermSize 永久区的大小。<br />-XX:+UseParNewGC 使用并行收集算法。<br /><br />内存大的可以改idea.exe.vmoptions文件为：<br /><br /><br />-Xms256m<br />-Xmx384m<br />-XX:MaxPermSize=128m<br />-XX:NewRatio=4<br />-Xss128k<br />-Dsun.awt.keepWorkingSetOnMinimize=true<br />-server<br /><br />还有是idea.properties   可以修改一些配置，比如缓冲区设置到C盘外的其他盘下<br />除了对idea启动的内存分配外，还有：<br />1、你的C盘空闲是否足够，因为idea会在c盘你的用户目录下建立缓存。如果你的c盘空间小，运转起来会比较累。<br />2、你的project是否臃肿。因为默认的idea会将所有文件都当成project的文件，而其实我们需要在idea里编辑的基本都是程序文件。而 class文件、jar文件、doc文件等等都是不需要的。打开module setting界面，切换到source选项把不属于程序文件的都exclude掉，大大降低idea的负荷。
          <br/>
          <span style="color:red;">
            <a href="http://igogogo9.javaeye.com/blog/205177#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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 18 Jun 2008 15:26:30 +0800</pubDate>
        <link>http://igogogo9.javaeye.com/blog/205177</link>
        <guid>http://igogogo9.javaeye.com/blog/205177</guid>
      </item>
      <item>
        <title>让Eclipse拖着myeclipse狂飚</title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/205078" style="color:red;">http://igogogo9.javaeye.com/blog/205078</a>&nbsp;
          发表时间: 2008年06月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Eclipse本身很快的，但是加上了myeclipse后，就狂占内存，而且速度狂慢，那如何让Eclipse拖着myeclipse狂飚呢？相信大家都有些独门秘笈，我先开个头，大家一起让Eclipse拖着myeclipse狂飚起来！<br /><br />技巧一：取消自动validation<br />validation有一堆，什么xml、jsp、jsf、js等等，我们没有必要全部都去自动校验一下，只是需要的时候才会手工校验一下，速度立马提升好几个档次！<br />取消方法：<br />windows-->perferences-->myeclipse-->validation<br />除开Manual下面的复选框全部选中之外，其他全部不选<br />手工验证方法：<br />在要验证的文件上，单击鼠标右键-->myeclipse-->run validation<br /><br />注：我用的是 Eclipse3.2.1 ＋ myeclipse5.0.1
          <br/>
          <span style="color:red;">
            <a href="http://igogogo9.javaeye.com/blog/205078#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><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><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 18 Jun 2008 11:50:01 +0800</pubDate>
        <link>http://igogogo9.javaeye.com/blog/205078</link>
        <guid>http://igogogo9.javaeye.com/blog/205078</guid>
      </item>
      <item>
        <title>oracle保留字查询</title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/189065" style="color:red;">http://igogogo9.javaeye.com/blog/189065</a>&nbsp;
          发表时间: 2008年05月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          select * from v$reserved_words
          <br/>
          <span style="color:red;">
            <a href="http://igogogo9.javaeye.com/blog/189065#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><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><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 03 May 2008 16:06:41 +0800</pubDate>
        <link>http://igogogo9.javaeye.com/blog/189065</link>
        <guid>http://igogogo9.javaeye.com/blog/189065</guid>
      </item>
      <item>
        <title>jsp中form表单与struts中ActionForm Bean</title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/180750" style="color:red;">http://igogogo9.javaeye.com/blog/180750</a>&nbsp;
          发表时间: 2008年04月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          比如jsp中有这样的form表单<br />&lt;form  action="/saveregisterinfo.oa"  name="addform" method="post"><br />  &lt;tr><br />   &lt;td>姓名&lt;/td><br />   &lt;td>&lt;input type="text" size="35" name="name"  value="">&lt;/td><br />  &lt;/tr><br />&lt;/form><br />jsp中form表单的属性名与struts中ActionForm Bean字段的属性名必须是一样的吗？<br />答案是肯定的，因为名字保持相同，ActionForm才能从jsp的form表单中找到所需要的字段值。
          <br/>
          <span style="color:red;">
            <a href="http://igogogo9.javaeye.com/blog/180750#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><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Apr 2008 11:18:12 +0800</pubDate>
        <link>http://igogogo9.javaeye.com/blog/180750</link>
        <guid>http://igogogo9.javaeye.com/blog/180750</guid>
      </item>
      <item>
        <title> 取模（mod）与取余（rem）</title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/175314" style="color:red;">http://igogogo9.javaeye.com/blog/175314</a>&nbsp;
          发表时间: 2008年03月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          通常取模运算也叫取余运算，他们都遵循处罚法则，返回结果都是余数；<br /><br />但是仔细看是不一样的，详细请看实例：<br /><br />rem(3,2)=1<br /><br />rem(-3,-2)=-1<br /><br />rem(3,-2)=1<br /><br />rem(-3,2)=-1<br /><br />mod(3,2)=1<br /><br />mod(-3,-2)=-1<br /><br />mod(3,-2)=-1<br /><br />mod(-3,2)=1<br /><br />由此可以看出，rem和mod是有符号区别的！<br /><br />当除数与被除数的符号相同时，rem和mod的结果是完全相同的；当除数与被除数的符号不相同时，结果不同。<br /><br />具体说，rem结果的符号与被除数相同；mod结果的符号与除数相同。
          <br/>
          <span style="color:red;">
            <a href="http://igogogo9.javaeye.com/blog/175314#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><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><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 24 Mar 2008 09:59:21 +0800</pubDate>
        <link>http://igogogo9.javaeye.com/blog/175314</link>
        <guid>http://igogogo9.javaeye.com/blog/175314</guid>
      </item>
      <item>
        <title>对于负数取模（mod）问题</title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/175313" style="color:red;">http://igogogo9.javaeye.com/blog/175313</a>&nbsp;
          发表时间: 2008年03月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          以前没有太在意，以为取模(mod)运算只是在正整数范围内进行的运算，现在才知道，取模运算可以在int、float、double范围内进行运算。<br />对于负数的取模问题，当然以前也是没有注意过的，现在在我的本地用workshop进行了测试，得出结论：<br />  负数%负数＝负数；<br />  负数%正数＝负数；<br />  正数%负数＝正数；
          <br/>
          <span style="color:red;">
            <a href="http://igogogo9.javaeye.com/blog/175313#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</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>Mon, 24 Mar 2008 09:58:37 +0800</pubDate>
        <link>http://igogogo9.javaeye.com/blog/175313</link>
        <guid>http://igogogo9.javaeye.com/blog/175313</guid>
      </item>
      <item>
        <title>设计模式之Singleton(单态)</title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/168156" style="color:red;">http://igogogo9.javaeye.com/blog/168156</a>&nbsp;
          发表时间: 2008年03月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>单态定义</strong>:<br />
                  Singleton模式主要作用是保证在Java应用程序中，一个类Class只有一个实例存在。 </p>
                  <p> 在很多操作中，比如建立目录 数据库连接都需要这样的单线程操作。</p>
                  <p>还
有, singleton能够被状态化;
这样，多个单态类在一起就可以作为一个状态仓库一样向外提供服务，比如，你要论坛中的帖子计数器，每次浏览一次需要计数，单态类能否保持住这个计数，并且
能synchronize的安全自动加1，如果你要把这个数字永久保存到数据库，你可以在不修改单态接口的情况下方便的做到。</p>
                  <p>另外方面，Singleton也能够被无状态化。提供工具性质的功能，<br />
                    <br />
                    Singleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存，因为它限制了实例的个数，有利于Java垃圾回收（garbage 
                    collection）。<br />
                    <br />
                    我们常常看到工厂模式中类装入器(class loader)中也用Singleton模式实现的,因为被装入的类实际也属于资源。<br />
                  </p>
                  <p><strong>如何使用?</strong><br />
                  一般Singleton模式通常有几种形式:</p>
                  <table cellspacing="3" border="0" width="100%" cellpadding="3">
                    <tbody><tr> 
                      <td bgcolor="#cccccc"><p>public class Singleton {</p>
                        <p> 　　private Singleton(){}</p>
                        <p>　　//在自己内部定义自己一个实例，是不是很奇怪？<br />
                        　　//注意这是private 只供内部调用</p>
                        <p>　　private static Singleton instance = new Singleton();</p>
                        <p> 　　//这里提供了一个供外部访问本class的静态方法，可以直接访问　　<br />
                          　　public static Singleton getInstance() {<br />
                          　　　　return instance; 　　<br />
                          　　 } <br />
                        } </p>
                        <p>&nbsp;</p></td>
                    </tr>
                  </tbody></table>
                  <p>第二种形式:</p>
                  <table cellspacing="3" border="0" width="100%" cellpadding="3">
                    <tbody><tr> 
                      <td bgcolor="#cccccc">public class Singleton { 
                        <p>　　private static Singleton instance = null;<br />
                          <br />
                          　　public static synchronized Singleton getInstance() 
                          {<br />
                          <br />
                          　　if (instance==null)<br />
                          　　　　instance＝new Singleton();<br />
                        　　return instance; 　　} </p>
                        <p>} </p>
                        <p>&nbsp;</p></td>
                    </tr>
                  </tbody></table>
                  <p>使用Singleton.getInstance()可以访问单态类。</p>
                  <p>上面第二中形式是lazy initialization，也就是说第一次调用时初始Singleton，以后就不用再生成了。</p>
                  <p>注意到lazy initialization形式中的synchronized，这个synchronized很重要，如果没有synchronized，那么使用getInstance()是有可能得到多个Singleton实例。关于lazy 
                    initialization的Singleton有很多涉及double-checked locking (DCL)的讨论，有兴趣者进一步研究。</p>
                  <p>一般认为第一种形式要更加安全些。<br />
                  </p>
                  <p><strong>使用Singleton注意事项</strong>：<br />
                  有时在某些情况下，使用Singleton并不能达到Singleton的目的，如有多个Singleton对象同时被不同的类装入器装载；在EJB这样的分布式系统中使用也要注意这种情况，因为EJB是跨服务器，跨JVM的。</p>
                  <p>我们以SUN公司的宠物店源码(Pet Store 1.3.1)的ServiceLocator为例稍微分析一下：<br />
                    <br />
在Pet
Store中ServiceLocator有两种，一个是EJB目录下；一个是WEB目录下，我们检查这两个ServiceLocator会发现内容差不
多，都是提供EJB的查询定位服务，可是为什么要分开呢？仔细研究对这两种ServiceLocator才发现区别：在WEB中的
ServiceLocator的采取Singleton模式，ServiceLocator属于资源定位，理所当然应该使用Singleton模式。但是
在EJB中，Singleton模式已经失去作用，所以ServiceLocator才分成两种，一种面向WEB服务的，一种是面向EJB服务的。</p>
                  <p>Singleton模式看起来简单，使用方法也很方便，但是真正用好，是非常不容易，需要对Java的类 线程 内存等概念有相当的了解。</p>
                  <p>总之：如果你的应用基于容器，那么Singleton模式少用或者不用，可以使用相关替代技术。</p>
                  
                  <p>进一步深入可参考：</p>
                  <p><a href="http://www-106.ibm.com/developerworks/java/library/j-dcl.html?dwzone=java" target="_blank">Double-checked 
                    locking and the Singleton pattern</a></p>
                  <p><a href="http://www.javaworld.com/javaworld/jw-01-2001/jw-0112-singleton-p3.html#resources" target="_blank">When 
                    is a singleton not a singleton?</a></p>
                  <p><a href="http://www.jdon.com/jive/thread.jsp?forum=91&amp;thread=17578" target="_blank">Singleton是邪恶的</a></p>
                  <p><strong><a href="http://www.jdon.com/jivejdon/thread/33470.html" target="_blank">关于web应用的static变量</a></strong></p>
          <br/>
          <span style="color:red;">
            <a href="http://igogogo9.javaeye.com/blog/168156#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><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><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 05 Mar 2008 15:23:00 +0800</pubDate>
        <link>http://igogogo9.javaeye.com/blog/168156</link>
        <guid>http://igogogo9.javaeye.com/blog/168156</guid>
      </item>
      <item>
        <title>J2SE基础复习之琐碎 </title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/166847" style="color:red;">http://igogogo9.javaeye.com/blog/166847</a>&nbsp;
          发表时间: 2008年03月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.javac:在编译时使用的程序，其中的c指的是compile-编译。<br />2.注意一个专业程序员的细节：<br />  快捷键的使用；<br />  文件夹选项的配置；<br />  面试的时候很有可能是用笔写代码。<br />3.println:是printline-输出一行的意思。<br />4.在配置环境变量的时候在classpath的指定路径后加一个“.”，表示当前路径也是class文件目录。<br />5.IDE:intergrated development environment<br />6.在java里称全局变量为成员变量。<br />7.GBK:国标码，中国大陆的汉字编码；<br />  unicode分为utf8和utf16；java采用的是utf16，每个字符占用两个字节，包括中文。 （如‘A’和‘我’在unicode中都是占用两个字节）<br />8.注意在基本数据类型中long和float在赋值时必须要在数值后分别加上'l'和'f'.<br />  例子：float ftest = 1.0f;long ltest = 5l;<br />9.整型的默认类型是int；浮点数的默认类型是double；所以在运算中整数视作int类型；小数视作double类型。<br />10.字符型的数据可以转换为数值类型，其值参照asc码；<br />11.在不超出其表述范围的情况下可以直接把int类型的数值赋值给byte，short，char等类型，但byte和char类型在做运算的时候首先转换为int类型，例子：<br />   byte b1 = 1;<br />   byte b2 = 2;<br />   byte b3 = b1 + b2;//错误，因为系统会自动先将b1和b2转换为int类型，所以相加的结果也是int类型，要转换为容量小的byte必须强制转换。<br />   byte b3 = (byte)(b1 + b2);//正确。<br />12.float f = 1.23f//为什么要加‘f’--因为不加f表示的1.23是double类型。<br />13.把浮点数转换为整数采用的是去掉小数，而不是四舍五入。<br />14.回车、换行也是属于char类型。<br />15.格式比算法还要重要。<br />16.“短路与”和“短路或”：只需进行左边表达式的判断就可判断整个语句的结果是true或false。<br />17.面试的时候很多时候会考递归。<br />18.方法的本质目的是为了增加程序块的复用性；方法只有在被调用的时候才会执行。<br />19.实例和对象指的是同一回事儿。<br />20.继承关系的描述：什么是一种什么<br />21.首先定义类才会有对象<br />22.局部变量在使用前必须先初始化（先声明然后赋值）才能使用；成员变量在没有初始化的情况下会被系统初始化为默认的值。<br />23.引用类型相当于指针。引用类型在内存里面占有两个区域（一小块内存指向一大块内存）。其中一个实实在在的new出来的区域，一个是引用这个实实在在的区域的区域；<br />   字符窜是引用型的变量。<br />24.例子：Object o =  new Object();//这里称创建了 一个对象，o其实指的是对象的引用(即o是该对象的引用名)，是引用型的数据类型；o是一个局部变量存储在内存的<br />   stack块部分，它指向的是位于内存heap部分中的new出来的对象（也就是这个局部变量知道new出来的对象在heap中的地址，但在java中这个地址不一定是物理地址），在这个对象中存储有相关的属性（成员变量）。<br />25.使用new创建一个对象的时候实际上调用了构造函数；所以没有构造数无法实例化一个对象。<br />26.在带有参数的构造函数里面，当创建对象调用构造方法并将实参传递给构造函数的形参之后（也就是调用构造方法完成之后）构造函的参数就在内存就消失了。<br />27.构造方法没有返回值，并且不能在构造方法前加“void".<br />28.驼峰标识。<br />29.返回值在stack内存里类似于局部变量在方法调用完之后消失。<br />30.重载方法的意义：当重载多个方法分别考虑到不同的可选情况时，方便对方法的调用--调用同一个方法实现可以有“不定的参数”。　<br />31.String不是基本类型而是API上存在的一个类。<br />32.main 方法不需要对象就能够执行；main方法是一个静态方法，不能在其中访问成员变量。<br />33.约定俗成的包的命名：倒公司域名+项目名+其它。例子：package com.javaeye.trelow。因为域名唯一，避免了。。。<br />34.在jdk1.5版本以后注意源文件对class文件的影响。<br />35.在一个类中在没有使用import引入类的情况下，可以使用完整的"包名.类”来使用其它包的 类。<br />36.在没有设置classpath环境变量的情况下，类A可以访问同级目录下的包com.trelow.testpackage,但是com.trelow.testpackage下面的类不能访问com.trelow包下面的类。<br />37.z注意:无论是cmd下 还是ediplus在修改或设置过环境变量后都需要重新启动才能生效。<br />38.好习惯：每一项目应该有自己的classpath，不要和其它的项目共享。<br />39.在运行的时候需要把包名写全，所以在edeplus下不能直接运行含有包的class文件。<br />40.在已经设置了classpath的情况下可以不在class文件所在路径下运行class文件，但必须写全包名。<br />41.java.lang里的类可以不用引入就能使用。<br />42.把包打包成jar文件：在要打包的“顶级文件夹”的上层文件目录下在cmd中执行：jar -cvf jarname.jar *.*  -----把当前目录下的所有文件（*.*）打包成名为jarname.jar的jar文件；输入jar可查看其它用法。<br />43.把jar包设置到classpath的方法：只需要在指明jar包所在目录的同时指明jar包的名字即可。<br />44.注意区分两个概念：方法的重载（overload）和子类对父类方法的重写(override/overwrite)---重写方法可以有相同的名字和参数。<br />45.当父类的方法不能满足子类对该方法的需求时使用方法的重写；重写直接copy父类的方法声明行可避免烦语法错误。<br />46.一个子类对象含有父类对象，因此在创建子类构造方法的时候必须现调用父类的构造方法这样才能保证父类的成员变量被初始化。<br />47.在创建对象时会调用构造方法，注意如果构造方法不为空则其中的语句会执行；如果有父类的话创建对象还会先调用父类的构造方法然后调用子类的构造方法。<br />47.System.out.println("my name is"+objectname);实际上等同于System.out.println("my name is"+objectname.toString());<br />   -----在打印输出时，自动调用object类的toString方法先把非字符窜对象转换为字符窜然后再有加号连接前面的字符窜最后输出。<br />48.注意'.'在设在环境变量classpath中的用途，把它写在前面则在寻找class的时候先从当前目录开始找。<br />49.当在一个类中创建另外一个 类的对象如在类A中创建类B的对象B b = new B();则类A会从classpath中去寻找这个类，无论类B是否是在哪个目录下。注意当设置有多个classpath并且有同类名存在的时候要想到这一点来排除问题。<br />50.“==”用于两个对象之间用于比较两个对象是否引用于同一heap地址；作用和Object类的equals方法一样。但是在String,Date等类中已经重写 了Object类的equals方法。在String中如果两个字符窜不为空并且字符序列相同则返回true。<br />51.a instance of A ----a是不是类A的一个实例；<br />52.引用类型变量的强制转换：将父类对象A强制转换为子类对象后把该引用指向另外一个新命名的子类对象。<br />53.父类对象可以指向之类对象的引用增强了程序的可扩展性。<br />54.多态存在的三个条件：要有继承；要有重写；父类引用指向子类对象。<br />55.方法的定义和方法的空实现的区别：方法的定义只有方法的标志-括号；方法的空实现除了方法的定义外还需要用一对没有任何代码的大括号。<br />56.方法 void method(final int i){}表示该方法中的形参局部变量一旦被传递了值就不能在方法中被改变。<br />57.接口可实现它的类之间有多态性,可以看作是一种特殊的抽象类。<br />58.类与类之间有继承关系；类和接口之间有实现关系；接口和接口之间有实现关系。当一个类或接口实现或继承 了已经继承或实现了 接口饿接口那这个类或接口必须同时实现所有接口中的抽象方法。<br />59.子类的构造方法必须调用父类的构造方法；super可以用来解决子类方法和变量和父类方法变量同名时候的调用。<br />60. 父类可以指向子类的引用但是如果要访问子类自己定义的方法和变量必须强制转型。<br />61.printStackTrace()：打印输出引起错误的堆栈信息-错误引起的关联错误-错误A由错误B引起，错误B由错误C引起。使用这种方法方便程序员调试程序。<br />62.可以创建没有指明变量名称的引用类型变量来调用方法，如在TestEx类中有new TestEx().m(0);<br />63.非RuntimeException的Exception（例如在API类中的方法后写有throws()...方法）必须抛出异常，不然会有编译错误：必须对其捕获或声明以便抛出。<br />64.面试的时候要求手动写代时书写的习惯非常重要。<br />65.声明 一个引用类型的对象时栈空间出现一个变量但是是空值（它没有指向对空间的地址）直到new出时候这个变量才不为null（有了指向堆内存的地址），此时已经为该引用类型的对象分配了空间但堆内存中的参数在未分配值的时候如果数据是引用类型则默认为null<br />66.数组本身是一个引用类型的变量集合，数组中的每个元素又可以指向一个引用类型的数据成为引用类型的对象-引用集合中的引用。<br />67.在数组里的length是一个属性而不是方法。<br />68.在println中输出双引号要用转义字符“\"”.<br />69.把字符串类型转换为基本类型可以使用基本类型中的包装类中的方法parse..每个基本类型都有与之对应的包装类。这种方法是静态方法通过类调用。例如：Double d1 = Double.parseDouble("9");<br />70.System.exit(-1)-系统非正常退出；System.exit(0)-系统正常退出。<br />71.不同的算法可以实现相同的功能，但是它们的效率是不同的。在实现相同的功能基础上考虑效率问题。<br />72.x ? y : z-其中的x，y,z 都可以是表达式<br />73.在数组中如果使用arraycopy进行完全拷贝则相当于把一个对象的引用让另外一个对象也指向它，在内存中只有一份该引用，两者任意一个改变其中的元素将影响到另一个。<br />74.字符窜常量存储在data区域，字符串变量存放在heap区域。<br />75.String是不可改变的字符串类，指的是如果字符串内容改变后该字符串的引用会发生改变，而指向另外一个改变后的字符串对象引用。StringBuffer是可变的字符串类，指的是该字符串内容可以在原来的内存空间上进行改变。StringBuffer对字符串的改变操作效率比String高。<br />76.在进行基本数据类型的相关操作时可以查看基本数据的包装类中提供的系列方法。  <br />77.String类中的replace方法在使用后被替换的字符串内容不变，替换后的字符应该用另外一个字符串对象来存储。 <br />78.String类中将基本数据类型转换为字符串类型-方法valueOf()的一个简单应用：计算位数-调用字符串的length方法。<br />78.String类常用方法总结：<br />   索引(String或int)：-根据位置索引出字符charAt();<br />                      -根据字符索引位置indexOf();<br />                      -截取从指定位置开始的字符串substring(int beginIndex)/substring(int beginIndex;endstringIndex)<br />   判断(Boolean)：-比较内容忽略大小写equalsIgnoreCase();<br />                  -是否以前缀开头/后缀结尾startsWith(String prefix)/endsWith(String sufix);<br />   更改(String)：-替换字符串中的某个字符replace(char oldChar,char newChar);<br />                 -改变为大写形式/小写形式toUpperCase()/toLowerCase();<br />                 -去掉字符串开头和结尾的空格trim()<br />   类型转换：-对象（包括基本数据类型）转换为字符串类型 public static valueOf(Double/Int...);<br />   分割(String[]):-按照字符串中出现的子字符窜对字符串进行分割split(String regex);<br />   构造方法：-String(String str);<br />             -String(char[]value);<br />      -String(char[]value,int offset,int count);<br />78.能把字符串变量赋值给String但是不能赋值给StringBuffer; <br />79.在StringBuffer类方法参数中出现的offset的意思是“偏移量”字符串表示的字符序列的以位置计算；而int表示的是根据字符数组下标计算。如“TRELOW”offset 1 是T，而int 1 指的是R。<br />80.注意String类的valueOf方法和各种包装类的valueOf方法区别：前者将基本数据类型转换为字符串；后者将包装类型转换为基本数据类型。<br />81.StringBuffer类中的常用方法：除了类似于String中的上面提到的方法外还有：<br />   构造方法：-创建一个不包含字符序列的空字符串对象StringBuffer()；<br />             -创建一个包含字符序列的字符串对象String(String str);<br />   改变(StringBuffer)：-在原字符串对象后面追加字符串/基本数据类型数据/字符数组append(String/Int/char[].....)<br />                       -在元字符串中插入一段字符序列包括基本数据类型insert(int offset,String str/int i/.......)<br />                       -倒序原字符串reverse();<br />82.在枚举类型enum中enum类似class，enum中的对象类似于类的静态属性，可以通过enum类型的“类”来调用。<br />80.包装类的常用方法（以Integer为例,其它类似）：<br />   构造方法：Integer(String/int);<br />   类型转换：-返回封装类型的指定基本类型值：public static intValue(Double/Integer/Character.....);<br />         -转换字符串为基本数据类型：public static int parseInt(String s);<br />81.为常量起名用大写。<br />82.当java文件声明了包，则在方法getParentFile()方法中的ParentFile指的是该文件的包的父目录，而不是文件本身的父目录。<br />83.如果一个错误非要产生的话尽量让它提前产生--编译时。<br />84.switch..case也可以用来判断枚举类型。<br />85.auto-boxing在Map类中的应用：在jdk1.5后可以直接写基本类型而不用new出对象。<br />86.在使用泛型时如果在api中发现某个类后面有“&lt;>”,则这个类可以使用泛型的语法在尖括号内指定类型。<br />87.在用到集合的时候尽量使用泛型。<br />88.对象也能被打印：自动调用object类的toString方法。但是打印出的对象如果没有在该类中重写过toString方法，打印出来的是“类名"+"@hashcode”的十六进制编码。<br />89.Iterator对象的remove方法是在迭代过程中删除元素的唯一安全方法，并且容器的remove方法在Iterator出现时会被Iterator的remove方法锁定。<br />90.在容器中根据使用的容器功能选择不同的容器；根据程序扩展性的考虑使用不同的声明，但都有父类引用指向子类对象。如：<br />c只能使用Collection中的方法：Collection c = new HashSet();<br />s只能使用Set中的方法：Set s = new HashSet();<br />91.区分Collections类和Collection接口：Collection接口是容器的基类，Collections类是提供用于操作容器的类。<br />91.iso8859-1也叫lanin-1，此外还有latin-2到latin-9,iso8859是计算机网络早期ISO组织西欧国家指定的文字标准；中国自己的文字标准有gb2312，gbk（国标码）。 Unicode是ISO后来制定国际标准编码，缩写是UTF有unicode-8和unicode-16<br />92.System类位于java.lang.<br />93.先写的先读-队列；先写的后读-栈。<br />94.Serializable是标记性的接口里面没有方法。实现这个接口可以让jdk自动控制序列化。在实现Serilalizable的同时实现External接口可以自己控制序列化。<br />95.进程是一个静态的概念，实际中执行的是动态的线程。一个进程有一个主线程（main方法）或主分支，还有别的分支。<br />96.往Map容器里面添加对象的方法是put，往Collection容器里添加对象的方法是add.<br />97.在不使用处理流读取/写入文件时需要一个字节或者一个字符的读取，如果要读取全部文件或复制所有全部文件内容可以使用while循环。<br />98.在多线程中cpu的分配不是均匀的，所以执行的时间也不平均。<br />99.实现接口runnable和继承Thread类都能创建一个线程，两种方式的选择：尽量使用实现接口的方法，因为继承了Thread类就不能在继承别的类，选择实现接口能更灵活的进行。<br />100.在run方法中不能使用throws IterruptedException，因为run是重写了的方法，重写的方法不能抛出和被重写的方法不同的异常，只能使用try...catch.<br />101.在一个方法里调用使用return关键字则该方法结束，不在执行，所以return写在方法代码的最后。<br />102.终止一个线程的方法：使用boolean的变量，当需要终止的时候设置该变量值为false。<br />103.同一个线程对象可以启动两个线程。<br />104.synchronized的作用：表明该对象在同一时刻只能由一个线程访问，而不是 在一段时间内必须执行这个对象或方法，也不是线程对象B必须让出机会给访问被锁住的对象的线程对象A执行,其它的线程对象可以在时间片轮转到的时机访问没有没锁住的对象。如果锁定的是方法，则保证的是这个方法的整体在同一时刻只能由一个线程来访问，但不保证另外一个线程能不能执行并使用到被锁住的线程的中间执行过程中的某个变量。<br />105.在设计同步执行的程序时要考虑到涉及到的所有对象。<br />106.用到accept()方法时候要使用一个死循环，有多少个请求就接受多少个；并且该方法同readLine一样是阻塞似的，执行到它时便停下来等待相应的操作后才会有反应。<br />107.在同步的ServerSocket中，在包含了accept的while循环里面如果使用了阻塞式的方法（如readling，readUTF）会大大降低服务器端的效率，因为阻塞的时间可由客户端的程序决定，在当前循环没有执行完之后是不能接受其它的客户端请求的，在1.4以后java出现了异步式的编程，提高了网络程序的效率。<br />108.TCP链接是可靠的链接，相互通信的机器之间首先建立链接然后才能进行通信而UDP是不可靠的链接，在通信前并不确认链接，因此UDP在传输的每个数据包后面必须知名目的地的地址，而TCP先建立了链接所以 就不需要再指明地址。并且udp并没有客户端和服务器端的 概念。TCP和udp各有65536个端口。<br />109.System.out是标准输出。out()是System类中的静态方法，该方法的类型是printStream。print,println,printf等是printStream中的方法，例如：System.out.print()方法首先通过System.out()方法返回一个PrintStream对象，然后再通过这个对象调用print()方法来进行输出。<br />110.如果使用In/OutputStream或Writer/Reader来读写字数据需要一个字节一个字节或一个字符一个字符的读写，这时候需要使用到while循环并用read()!=-1作为终止条件。在BufferedReader中使用readLine一行一行的读时使用readLine()!=null作为终止条件。<br />111.数据流的作用：解决字节流和字符流无法读写多个字节数据的缺点。<br />112.ByteArrayInput/OuputStream是向内存中写入或读取原始数据类型。<br />113.System.setOut()可以设置输出的位置。<br />114.死锁原理：有两个线程对象A和B,A和B都要分别执行两个被锁住的方法1和方法2。执行方法1需要用到访法中被锁住的对象b,执行方法2需要用到方法1中被锁住的对象a。于A，B执行的方法都被锁住，a,b两个对象都不能在它它们各自所属的方法执行完前被其它的方法访问。两个线程相持不让，发生死锁，两个线程都无法执行。<br />115.一个线程中“虚拟两个线程”，使用if(flag==..)的条件表达来选择性的执行Thread中的不同代码。把flag设置成成员变量,在实例化线程对象之后现设置它的flag值，然后在调用run中的选择性方法。<br />116.wait和sleep都可以是线程暂时的“休息” ，区别在于使用wait时别的线程能够访问被锁住的对象并且wait不能制定wait的时间，需要通过notify来唤醒；在sleep的时候不允许访问被锁住的对象，可以使用sleep定义休息的时间。此外wait方法是Object中的方法任何类都可以使用，sleep是Thread中的静态方法，可以通过类名来调用。二者在使用时都需要抛出异常InterruptedException<br />117.127.0.1.1指的是本地主机。<br />117.在Socket和ServerSocket中使用Socket对象调用getOutputStream()和getInputStream()来输出或接受套接字。<br />118.注意在TCP中Server和Client在“交流”时候输出和输入的顺序，一个现输入则另一个需要先读，如果两个都先读或先写会发生“死锁”。<br />118.比较：TCP先建立可靠连接再发送数据；UDP不建立链接对数据进行打包，并对每个包封装一个发送的地址，最后使用send方法发出数据。<br />118.TCP传递数据的大体过程：<br />    TCPSever接受数据:在建立ServerSocket对象的同时指定服务器的端口号，使用while循环判断是否有客户端发送数据，如果有创建Socket对象并调用方法accept来接受数据，最后执行对数据的操作。<br />    TCPSever发送数据：<br />119.JAVAX-JAVAExtention.<br />120.AWT-Abstract windows toolkit,在c或c++的窗口基础上抽象出的一层。Swing不能替代AWT,图形界面中关于事件处理的内容还要用到awt。<br />121.Ajax和javascript都能完全替代applet。<br />122.在屏幕坐标中的原点在左上角，横向右递增为x轴，竖向下为y轴。<br />123.在dos窗口中cls-清屏；Ctrl+C-退出当前运行的任务，并令起一行。<br />124.尽量使用类继承窗口的方法来创建窗口，因为这样可以创建自己的成员变量。<br />125.放在frame中的panel设置的位置是相对于frame窗口的位置。<br />126.在API中查找一个类的方法，如果在这个类中没有在该 类中则该方法有可能在该类的父类。<br />127.使用BorderLayout中设置组件的位置时，可以使用字符串指定，也可以通过调用BoderLayout中的常量来指定。最好选择后者来指定，因为前者如果字符串书写错误在编译时期不能检查出来，在运行期才能检查出异常。编程应该让可能的错误尽量提前出现。<br />128.在布局管理器中如果没有指明放在其中的组件的位置时：按照以下方式来安放：<br />    GridLayout:从左到右-从上到下；(本身不可以指定组件的位置)<br />    Bordlayout:北-南-西-东-中；(本身 可以指定组件的位置)<br />129.在综合复杂的布局中按照从里到外的方式进行：a,b,c三个按钮组件要放在PanelA上，PanelA要放在PanelB上，PanelB要放在PanelC上.....<br />130.关于成员与局部对象的设置：如果把一个对象放在一个方法里面则它是局部变量，当要在别的方法或类中用到这个对象的时候无法读取到；所以这个时候的对象应该<br />    设置为成员变量-如果该成员变量是引用类型的，应该在方法外部创建对象的引用(eg. A a = null;)，然后在方法内部进行初始化。这时要注意在<br />    方法内部就不要在写对象的引用(eg.A a = new A)，不然初始化出来的对象是和成员变量中不同的两个对象，而又由于一个是局部变量一个是成员<br />    变量，二者并不发生冲突，但在引用该对象的时候会发生错误（null）.所以在方法内只需直接对方法外已经创建的对象引用进行初始化(eg.new A()).<br />    如果是在另外一个类中B使用这个对象，这时只需要在类B中创建该类的一个对象，然后通过这个对象来调用该类中的成员变量。<br />131.类A中包含有类B则类B是类A的内部类，类A是类B的包装类。内部类的典型好处：可以直接调用包装类中的成员变量和成员方法；并且将内部类声明为private的话<br />    可以使得其它的类无法调用它，从语法上确保了该类的安全性。需要这两个好处时候可以使用内部类。内部类的标志：内部类的class文件为："包装类名$内部类名.class".<br />    注意内部类声明时的排版格式和方法一样。如果一个类在另外一个类的方法中那么这类叫做匿名内部类，因为它没有具体的名字所以称之为匿名，这种类的作用范围只在它所在的方法的内部。<br />    一般的匿名内采用new 一个父类的方式来表示继承了该父类。如果一个类经常变动或代码较多时不建议使用匿名类。注意内部类的书写格式。<br />132.在FlowLayout中组件的位置按照添加调组件时调用add方法的顺序依次排放。<br />133.对要在组件上面发生事件的组件才注册监听器，如果只是从组件上获取信息并不需要将它注册到监听器，如num1和num2都没有注册。在实现的监听器类里面定义的是一旦发生事件后进行的操作.<br />    （Label组件既没有提供信息的功能也没有时间发生只是作显示用。）<br />134.当需要将基本数据类型转换为字符串时除了可以使用String.valueOf还可以使用“""+基本数据类型数据”这种办法。<br />135.如果重写方法时写错了方法名在编译时不会出错，因为系统会认为这是自己重新定义的方法。很难检查出来，所以重写方法时最后进行原方法的拷贝。<br />136.在事件监听中多采用继承实现了...Listener的接口的类的方法...Adapter来定义自己的时间处理方法，因为这样可以免去实现接口中所有方法的烦琐。(在该有相应的...Adapter类的前提下)
          <br/>
          <span style="color:red;">
            <a href="http://igogogo9.javaeye.com/blog/166847#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><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 03 Mar 2008 09:52:37 +0800</pubDate>
        <link>http://igogogo9.javaeye.com/blog/166847</link>
        <guid>http://igogogo9.javaeye.com/blog/166847</guid>
      </item>
      <item>
        <title>[DWR(Ajax)]DWR使用笔记</title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/149860" style="color:red;">http://igogogo9.javaeye.com/blog/149860</a>&nbsp;
          发表时间: 2007年12月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          DWR是一个框架，简单的说就是能够在javascript直接调用java方法，而不必去写一大堆的javascript代码。它的实现是基于ajax的，可以实现无刷新效果。<br /><br />    网上有不少DWR的例子，但大都只是某种方法的调用，本文只在使用层面上介绍DWR，并不涉更多的技术与设计，其目的是让初学者能够很快的学会各种java方法在javascript中是如何调用的。<br /><br />    本文以DWR 1.1 为基础，对于DWR 2.0，因为还没有正式发布版，故不做介绍。<br />一、 dwr配置篇之web.xml<br />   1 、最小配置<br />&lt;servlet><br />  &lt;servlet-name>dwr-invoker&lt;/servlet-name><br />  &lt;servlet-class>uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class><br />&lt;/servlet><br />&lt;servlet-mapping><br />  &lt;servlet-name>dwr-invoker&lt;/servlet-name><br />  &lt;url-pattern>/dwr/*&lt;/url-pattern><br />&lt;/servlet-mapping><br />2、当我们想看DWR自动生成的测试页（Using debug/test mode）时，可在servlet配置中加上<br />&lt;init-param><br />  &lt;param-name>debug&lt;/param-name><br />  &lt;param-value>true&lt;/param-value><br />&lt;/init-param><br />这个参数DWR默认是false。如果选择true，我们可以通过 http://localhost:port/app/dwr看到你部署的每个DWR class。并且可以测试java代码的每个方法是否运行正常。为了安全考虑，在正式环境下你一定把这个参数设为false。<br />3、多个dwr.xml文件的配置<br />可能有几种情况，我们一一列举。一个servlet，多个dwr.xml配置文件；多个servlet，每个servlet对应一个或多个dwr.xml配置文件。<br />3.1、一个servlet，多个dwr.xml配置文件<br />&lt;servlet><br />    &lt;servlet-name>dwr-invoker&lt;/servlet-name><br />    &lt;servlet-class>uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class><br />    &lt;init-param><br />      &lt;param-name>config-1&lt;/param-name><br />      &lt;param-value>WEB-INF/dwr1.xml&lt;/param-value><br />    &lt;/init-param><br />    &lt;init-param><br />      &lt;param-name>config-2&lt;/param-name><br />      &lt;param-value>WEB-INF/dwr2.xml&lt;/param-value><br />    &lt;/init-param><br />&lt;/servlet><br />在这种配置下，param-name的值必须以config开头。param-name可以有>=0个。如果没有param-name，那么将会读取 WEB-INF/dwr.xml。如果有大于零个param-name，那么WEB-INF/dwr.xml文件将不会被读取。<br />3.2 、多个 servlet ，每个 servlet 对应一个或多个 dwr.xml<br />&lt;servlet><br />   &lt;servlet-name>dwr-invoker&lt;/servlet-name><br />    &lt;servlet-class>uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class><br />&lt;/servlet><br />&lt;servlet><br />   &lt;servlet-name>dwr-invoker1&lt;/servlet-name><br />   &lt;servlet-class>uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class><br />   &lt;init-param><br />     &lt;param-name>config-admin&lt;/param-name><br />     &lt;param-value>WEB-INF/dwr1.xml&lt;/param-value><br />   &lt;/init-param><br />   &lt;init-param><br />     &lt;param-name>debug&lt;/param-name><br />     &lt;param-value>true&lt;/param-value><br />   &lt;/init-param><br />&lt;/servlet><br />&lt;servlet-mapping><br />&lt;servlet-name>dwr-invoker&lt;/servlet-name><br />   &lt;url-pattern>/dwr/*&lt;/url-pattern><br />&lt;/servlet-mapping><br />&lt;servlet-mapping><br />   &lt;servlet-name>dwr-invoker1&lt;/servlet-name><br />   &lt;url-pattern>/dwr1/*&lt;/url-pattern><br />&lt;/servlet-mapping><br />在这种情况下，我们可以根据 J2EE security 来控制权限，针对不同 url, 加不同的角色。<br />二、 dwr使用篇<br />1、调用没有返回值和参数的JAVA方法<br />1.1、dwr.xml的配置<br />&lt;dwr><br />&lt;allow><br />&lt;create creator="new" javascript="testClass" ><br />&lt;param name="class" value= "com.dwr.TestClass" /><br />&lt;include method="testMethod1"/><br />&lt;/create><br />&lt;/allow><br />&lt;/dwr><br />&lt;allow> 标签中包括可以暴露给 javascript 访问的东西。<br />&lt;create> 标签中指定 javascript 中可以访问的 java 类，并定义 DWR 应当如何获得要进行远程的类的实例。 creator="new" 属性指定 java 类实例的生成方式， new 意味着 DWR 应当调用类的默认构造函数来获得实例，其他的还有 spring 方式，通过与 IOC 容器 Spring 进行集成来获得实例等等。 javascript=" testClass " 属性指定 javascript代码访问对象时使用的名称。<br />&lt;param> 标签指定要公开给 javascript 的 java 类名。<br />&lt;include> 标签指定要公开给 javascript 的方法。不指定的话就公开所有方法。<br />&lt;exclude> 标签指定要防止被访问的方法。<br />1.2、javascript中调用<br />首先，引入 javascript 脚本<br />&lt;script src='dwr/interface/ testClass.js'>&lt;/script><br />&lt;script src='dwr/engine.js'>&lt;/script><br />&lt;script src='dwr/util.js'>&lt;/script><br />其中 TestClass.js 是 dwr 根据配置文件自动生成的， engine.js 和 util.js 是 dwr 自带的脚本文件。<br />其次，编写调用 java 方法的 javascript 函数<br />Function callTestMethod1(){<br />      testClass.testMethod1();<br />}<br />2、调用有简单返回值的java方法<br />2.1、dwr.xml的配置<br />配置同1.1<br />&lt;dwr><br />&lt;allow><br />&lt;create creator="new" javascript="testClass" ><br />&lt;param name="class" value= "com.dwr.TestClass" /><br />&lt;include method="testMethod2"/><br />&lt;/create><br />&lt;/allow><br />&lt;/dwr><br />2.2、javascript中调用<br />首先，引入 javascript 脚本<br />其次，编写调用 java 方法的 javascript 函数和接收返回值的回调函数<br />Function callTestMethod2(){<br />      testClass.testMethod2(callBackFortestMethod2);<br />}<br />Function callBackFortestMethod2(data){<br />     // 其中 date 接收方法的返回值<br />     // 可以在这里对返回值进行处理和显示等等<br />alert("the return value is " + data);<br />}<br />其中 callBackFortestMethod2 是接收返回值的回调函数<br />3、调用有简单参数的java方法<br />3.1、dwr.xml的配置<br />配置同1.1<br />&lt;dwr><br />&lt;allow><br />&lt;create creator="new" javascript="testClass" ><br />&lt;param name="class" value= "com.dwr.TestClass" /><br />&lt;include method="testMethod3"/><br />&lt;/create><br />&lt;/allow><br />&lt;/dwr><br />3.2、javascript中调用<br />首先，引入 javascript 脚本<br />其次，编写调用 java 方法的 javascript 函数<br />Function callTestMethod3(){<br />                 // 定义要传到 java 方法中的参数<br />      var data;<br />      // 构造参数<br />      data = “test String”;<br />      testClass.testMethod3(data);<br />}<br />4、调用返回JavaBean的java方法<br />4.1、dwr.xml的配置<br />&lt;dwr><br />&lt;allow><br />&lt;create creator="new" javascript="testClass" ><br />&lt;param name="class" value= "com.dwr.TestClass" /><br />&lt;include method="testMethod4"/><br />&lt;/create><br />&lt;convert converter="bean" match=" "com.dwr.TestBean"><br />                  &lt;param name="include" value="username,password" /><br />&lt;/convert><br />&lt;/allow><br />&lt;/dwr><br />&lt;creator> 标签负责公开用于 Web 远程的类和类的方法， &lt;convertor> 标签则负责这些方法的参数和返回类型。 convert 元素的作用是告诉 DWR 在服务器端 Java 对象表示和序列化的 JavaScript 之间如何转换数据类型。 DWR 自动地在 Java 和 JavaScript 表示之间调整简单数据类型。这些类型包括 Java 原生类型和它们各自的封装类表示，还有 String 、 Date 、数组和集合类型。 DWR 也能把 JavaBean 转换成 JavaScript 表示，但是出于安全性的原因，要求显式的配置， &lt;convertor> 标签就是完成此功能的。 converter="bean" 属性指定转换的方式采用 JavaBean 命名规范， match=""com.dwr.TestBean" 属性指定要转换的 javabean 名称， &lt;param> 标签指定要转换的 JavaBean 属性。<br />4.2 、javascript中调用<br />首先，引入 javascript 脚本<br />其次，编写调用 java 方法的 javascript 函数和接收返回值的回调函数<br />Function callTestMethod4(){<br />      testClass.testMethod4(callBackFortestMethod4);<br />}<br />Function callBackFortestMethod4(data){<br />     // 其中 date 接收方法的返回值<br />// 对于 JavaBean 返回值，有两种方式处理<br />             // 不知道属性名称时，使用如下方法<br />           for(var property in data){<br />              alert("property:"+property);<br />              alert(property+":"+data[property]);<br />           }<br />// 知道属性名称时，使用如下方法<br />           alert(data.username);<br />           alert(data.password);<br />}<br />其中 callBackFortestMethod4 是接收返回值的回调函数<br />5、调用有JavaBean参数的java方法<br />5.1、dwr.xml的配置<br />配置同4.1<br />&lt;dwr><br />&lt;allow><br />&lt;create creator="new" javascript="testClass" ><br />&lt;param name="class" value= "com.dwr.TestClass" /><br />&lt;include method="testMethod5"/><br />&lt;/create><br />&lt;convert converter="bean" match=" com.dwr.TestBean"><br />                  &lt;param name="include" value="username,password" /><br />&lt;/convert><br />&lt;/allow><br />&lt;/dwr><br />5.2 、javascript中调用<br />首先，引入 javascript 脚本<br />其次，编写调用 java 方法的 javascript 函数<br />Function callTestMethod5(){<br />                 // 定义要传到 java 方法中的参数<br />      var data;<br />      // 构造参数， date 实际上是一个 object<br />      data = { username:"user", password:"password"  }<br />      testClass.testMethod5(data);<br />}<br />6、调用返回List、Set或者Map的java方法<br />6.1、dwr.xml的配置<br />配置同4.1<br />&lt;dwr><br />&lt;allow><br />&lt;create creator="new" javascript="testClass" ><br />&lt;param name="class" value= "com.dwr.TestClass" /><br />&lt;include method="testMethod6"/><br />&lt;/create><br />&lt;convert converter="bean" match= "com.dwr.TestBean "><br />&lt;param name="include" value="username,password" /><br />&lt;/convert><br />&lt;/allow><br />&lt;/dwr><br />注意：如果 List 、 Set 或者 Map 中的元素均为简单类型（包括其封装类）或 String 、 Date 、数组和集合类型，则不需要&lt;convert>标签。<br />6.2 、javascript中调用(以返回List为例，List的元素为TestBean)<br />首先，引入 javascript 脚本<br />其次，编写调用 java 方法的 javascript 函数和接收返回值的回调函数<br />Function callTestMethod6(){<br />      testClass.testMethod6(callBackFortestMethod6);<br />}<br />Function callBackFortestMethod6(data){<br />     // 其中 date 接收方法的返回值<br />// 对于 JavaBean 返回值，有两种方式处理<br />             // 不知道属性名称时，使用如下方法<br />           for(var i=0;i&lt;data.length;i++){<br />for(var property in data){<br />                  alert("property:"+property);<br />                  alert(property+":"+data[property]);<br />               }<br />}<br />// 知道属性名称时，使用如下方法<br />for(var i=0;i&lt;data.length;i++){<br />               alert(data.username);<br />               alert(data.password);<br />}<br />}<br />7、调用有List、Set或者Map参数的java方法<br />7.1、dwr.xml的配置<br />&lt;dwr><br />&lt;allow><br />&lt;create creator="new" javascript="testClass" ><br />&lt;param name="class" value= "com.dwr.TestClass" /><br />&lt;include method="testMethod7"/><br />&lt;/create><br />&lt;convert converter="bean" match= "com.dwr.TestBean "><br />&lt;param name="include" value="username,password" /><br />&lt;/convert><br />&lt;/allow><br />&lt;signatures><br />&lt;![CDATA[<br />import java.util.List;<br />import com.dwr.TestClass;<br />import com.dwr.TestBean;<br />TestClass.testMethod7(List&lt;TestBean>);<br />]]&gt;<br />&lt;/signatures><br />&lt;/dwr><br />&lt;signatures> 标签是用来声明 java 方法中 List 、 Set 或者 Map 参数所包含的确切类，以便 java 代码作出判断。<br />7.2 、javascript中调用(以返回List为例，List的元素为TestBean)<br />首先，引入 javascript 脚本<br />其次，编写调用 java 方法的 javascript 函数<br />Function callTestMethod7(){<br />// 定义要传到 java 方法中的参数<br />      var data;<br />      // 构造参数， date 实际上是一个 object 数组，即数组的每个元素均为 object<br />data = [<br />                      {<br />                         username:"user1",<br />                         password:"password2"<br />                      },<br />                      {<br />                         username:"user2",<br />                         password:" password2"<br />                      }<br />                  ];<br />      testClass.testMethod7(data);<br />}<br />注意：<br />1、 对于第 6 种情况，如果 java 方法的返回值为 Map ，则在接收该返回值的 javascript 回调函数中如下处理：<br />function callBackFortestMethod(data){<br />           // 其中 date 接收方法的返回值<br />           for(var property in data){<br />                  var bean = data[property];<br />                  alert(bean.username);<br />                  alert(bean.password);<br />              }<br />}<br />2、 对于第 7 种情况，如果 java 的方法的参数为 Map （假设其 key 为 String ， value 为 TestBean ），则在调用该方法的 javascript 函数中用如下方法构造要传递的参数：<br />function callTestMethod (){<br />              // 定义要传到 java 方法中的参数<br />              var data;<br />              // 构造参数， date 实际上是一个 object ，其属性名为 Map 的 key ，属性值为 Map 的 value<br />              data = {<br />                         "key1":{<br />                             username:"user1",<br />                            password:"password2"<br />                         },<br />                         "key2":{<br />                            username:"user2",<br />                            password:" password2"<br />                         }<br />                     };<br />              testClass.testMethod(data);<br />}<br />并且在 dwr.xml 中增加如下的配置段<br />&lt;signatures><br />&lt;![CDATA[<br />import java.util.List;<br />import com.dwr.TestClass;<br />import com.dwr.TestBean;<br />TestClass.testMethod7(Map&lt;String,TestBean>);<br />]]&gt;<br />&lt;/signatures><br />3、 由以上可以发现，对于 java 方法的返回值为 List(Set) 的情况， DWR 将其转化为 Object 数组，传递个 javascript ；对于 java 方法的返回值为 Map 的情况， DWR 将其转化为一个 Object ，其中 Object 的属性为原 Map 的 key 值，属性值为原 Map 相应的 value 值。<br />4、 如果 java 方法的参数为 List(Set) 和 Map 的情况， javascript 中也要根据 3 种所说，构造相应的 javascript 数据来传递到 java 中。
          <br/>
          <span style="color:red;">
            <a href="http://igogogo9.javaeye.com/blog/149860#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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, 21 Dec 2007 09:40:33 +0800</pubDate>
        <link>http://igogogo9.javaeye.com/blog/149860</link>
        <guid>http://igogogo9.javaeye.com/blog/149860</guid>
      </item>
      <item>
        <title>instanceof运算符</title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/144883" style="color:red;">http://igogogo9.javaeye.com/blog/144883</a>&nbsp;
          发表时间: 2007年11月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <center>
<table>
</table>
</center>
<table align="left">
    <tbody>
        <tr>
            <td>&nbsp;</td>
        </tr>
    </tbody>
</table>
<img src="http://www.computernews.com.cn/techimages/2004101309/101-1.JPG" height="380" alt="" width="700" /><br />
<img src="http://www.computernews.com.cn/techimages/2004101309/101-2.JPG" height="602" alt="" width="502" /><br />
<img src="http://www.computernews.com.cn/techimages/2004101309/101-3.JPG" height="361" alt="" width="505" /><br />
<img src="http://www.computernews.com.cn/techimages/2004101309/101-4.JPG" height="589" alt="" width="505" /><br />
<img src="http://www.computernews.com.cn/techimages/2004101309/101-5.JPG" height="192" alt="" width="684" />
          <br/>
          <span style="color:red;">
            <a href="http://igogogo9.javaeye.com/blog/144883#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><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><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 29 Nov 2007 17:04:47 +0800</pubDate>
        <link>http://igogogo9.javaeye.com/blog/144883</link>
        <guid>http://igogogo9.javaeye.com/blog/144883</guid>
      </item>
      <item>
        <title>TRS java 中的trsbean.jar架包</title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/143737" style="color:red;">http://igogogo9.javaeye.com/blog/143737</a>&nbsp;
          发表时间: 2007年11月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          JSP是由Sun微系统公司于1999年6月推出的一项技术，是基于JavaServlet以及整个java体系的Web开发技术，利用这一技术可以建立先进、安全和跨平台的动态网站。<br /><br />JSP 与ASP非常相似。两者都提供在HTML代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。在ASP或JSP 环境下，HTML代码主要负责描述信息的显示样式，而程序代码则用来描述处理逻辑。ASP下的编程语言是 VBScript 之类的脚本语言，而JSP 使用的是Java。<br /><br />TRS及其JavaBeans<br /><br />TRS系统是国际上第一个采用“并行计算”算法的中文全文检索系统，其全文检索引擎可以提供关系型数据库所没有的性能，并可与关系数据库协同使用；因为TRS可对文本内容建立全文索引，提供高效的全文检索功能。所以使用TRS可以大大提高网站的查询速度。<br /><br />TRS JavaBeans是基于Java组件技术——JavaBeans开发的，具有良好的跨平台特性。本文将介绍利用JSP、TRS及JavaBeans建立一个Web的过程。<br /><br />TRS JavaBeans配置步骤<br /><br />　　以NT下WebLogic5.1.0为例说明。<br /><br />　　1.安装WebLogic5.1.0<br /><br />　　2.修改startWebLogic.cmd<br /><br />　　将“set PRE_CLASSPATH=”改为“set PRE_CLASSPATH=%TRSBean.jar的全路径%;%TRSDemo.jar的全路径%”。<br /><br />　　例如：如果TRSBean.jar位于C:\TRSJavaBeans\lib\目录下,则将此语句改为：<br /><br />　　set PRE_CLASSPATH=C:\TRSJavaBeans\lib\TRSBean.jar<br /><br />　　3.修改weblogic.properties<br /><br />　　将语句：#weblogic.httpd.register.servlets=weblogic.servlet.ServletServlet前面的#号去掉。<br /><br />　　将下列语句前的“#”号去掉：<br /># weblogic.httpd.register.*.jsp=\<br /><br />　　# weblogic.servlet.JSPServlet<br /><br />　　#weblogic.httpd.initArgs.*.jsp=\<br /><br />　　# pageCheckSeconds=1,\<br /><br />　　# compileCommand=C:/java/bin/javac.exe,\<br /><br />　　# workingDir=D:/weblogic/myserver/classfiles,\<br /><br />　　# verbose=true<br /><br />接着将“compileCommand=C:/java/bin/ javac.exe,\”改为“compileCommand=JAVA_ PATH/bin/javac.exe,\”，其中JAVA_PATH为实际所用JDK的安装根目录。<br /><br />4.安装DEMO<br /><br />将TRSJavaBeans安装包的DEMO目录全部复制到D:/weblogic/myserver/public_html目录下。<br /><br />完成以上配置后，我们即可进入设计开发阶段。<br /><br />开发示例<br /><br />设数据库为:“news.投资动态”,字段为“标题”、“内容”、“日期”和“编号”(惟一性字段)。<br /><br />　　以显示某一条具体记录的详细内容为例，至于分页显示、全文检索和BBS等，篇幅所限，不再赘述，感兴趣的用户可以自己试一试。实际运行结果可以参看易信网（www.exin.net）或北京投资平台（www.bjinvest.gov.cn）。<br /><br />jsp程序如下：<br />&lt;HTML><br /><br />　　&lt;HEAD><br /><br />　　&lt;TITLE>新闻&lt;/TITLE><br /><br />　　&lt;link REL="stylesheet" href="mycss.css"TYPE="text/css"><br /><br />　　&lt;META content="text/html; charset=GB2312"http-equiv=Content-Type><br /><br />　　&lt;%@ page import="com.eprobiti.TRS.*"%><br /><br />　　&lt;%@ page import="java.util.*"%><br /><br />　　&lt;jsp:useBean id="TRSConn"scope ="session" class="com.eprobiti.TRS.TRSConnection"/><br /><br />　　&lt;jsp:useBean id="TRSRS"scope ="page" class="com.eprobiti.TRS.TRSResultSet"/><br /><br />　　&lt;/HEAD><br /><br />　　&lt;BODY><br /><br />　　&lt;%<br /><br />　　String item_id=request.getParameter("id");<br /><br />　　//参数id由URL或者前一个文件的表单隐藏域传过来<br /><br />　　String dbname,ip,port,username,password;<br /><br />　　dbname="news.北京新闻";<br /><br />　　//TRS数据库名字<br /><br />　　ip="202.123.166.99"; //TRS服务器IP<br /><br />　　port="8888";//TRS服务器端口<br /><br />　　username="yourname";<br /><br />　　// 可以检索"news.北京新闻"的用户名<br /><br />　　password="yourpassword";<br /><br />　　// 该用户名对应的口令<br /><br />　　String filter="编号="+item_id;<br /><br />　　//定义检索条件<br /><br />　　try {<br /><br />　　 if (TRSConn.connect(ip,port,username,password)){ }<br /><br />　　//建立与TRS服务器的连接<br /><br />　　else {<br /><br />　　 out.println("Connection 连接失败！\n");<br /><br />　　 }<br /><br />　　 TRSRS=TRSConn.executeSelect(dbname,s1,"","", null, 0, 0, false);<br /><br />　　// 执行查询操作，生成记录集<br /><br />　　 } catch(TRSException TRSe) {<br /><br />　　 out.println("ResultSet 连接失败！\n");<br /><br />　　 }<br /><br />　　try {<br /><br />　　 TRSRS.moveFirst();<br /><br />　　//记录定位<br /><br />　　%><br /><br />　　&lt;p><br /><br />　　&lt;center><br /><br />　　&lt;table width=80%><br /><br />　　&lt;tr align=center><br /><br />　　&lt;td>&lt;%=TRSRS.getString("标题")%><br /><br />　　&lt;/td><br /><br />　　&lt;/tr><br /><br />　　&lt;tr align=center><br /><br />　　&lt;td>&lt;%=TRSRS.getString("日期")%><br /><br />　　&lt;/td><br /><br />　　&lt;/tr><br /><br />　　&lt;tr><br /><br />　　&lt;td>&lt;%=TRSRS.getString("内容")%><br /><br />　　&lt;/td><br /><br />　　&lt;/tr><br /><br />　　&lt;/table><br /><br />　　&lt;/center><br /><br />　　&lt;p><br /><br />　　&lt;%<br /><br />　　TRSRS.close();<br /><br />　　} catch(TRSException TRSe) {}<br /><br />　　%><br /><br />　　&lt;/body><br /><br />　　&lt;/html>
          <br/>
          <span style="color:red;">
            <a href="http://igogogo9.javaeye.com/blog/143737#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 26 Nov 2007 16:34:29 +0800</pubDate>
        <link>http://igogogo9.javaeye.com/blog/143737</link>
        <guid>http://igogogo9.javaeye.com/blog/143737</guid>
      </item>
      <item>
        <title>批量反编译java类文件 </title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/140170" style="color:red;">http://igogogo9.javaeye.com/blog/140170</a>&nbsp;
          发表时间: 2007年11月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>所使用的软件是 DJ Java Decompiler 3.7。</p>
<p>下面是一个有用的参考文档，说明如何批量编译</p>
<p><a href="http://www.udl.es/usuaris/jordim/Progs/Readme.txt">http://www.udl.es/usuaris/jordim/Progs/Readme.txt</a></p>
<p>安装好之后，找到它的安装路径，我的是：E:\Program Files\decomp</p>
<p>底下有一个jad.exe文件，将它设置到环境变量path，或者拷到其他已经了环境变量path的地方，或者在cmd中转到此文件目录下。</p>
<p>&nbsp;</p>
<p>简单的方法是</p>
<p><font color="#333300" style="background-color: rgb(204, 153, 255);"><strong><em>jad -o -r -dF:\src&nbsp;-sjava F:\classes\**\*.class</em></strong></font></p>
<p>-o&nbsp; - overwrite output files without confirmation (default: no) 无需确定覆写文件</p>
<p>-r&nbsp; - restore package directory structrure 恢复包目录结构</p>
<p>-s <ext></ext>- output file extension (by default '.jad') 如果不设置为-sjava，则默认扩展名为.jad</p>
<p>其他的，F:\classes\**\*.class 中的两颗接连的星，表示任意层次的子目录。</p>
OK，这么多就够完成我们的任务了。
          <br/>
          <span style="color:red;">
            <a href="http://igogogo9.javaeye.com/blog/140170#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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 13 Nov 2007 12:00:33 +0800</pubDate>
        <link>http://igogogo9.javaeye.com/blog/140170</link>
        <guid>http://igogogo9.javaeye.com/blog/140170</guid>
      </item>
      <item>
        <title>JAVA反编译工具  </title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/140168" style="color:red;">http://igogogo9.javaeye.com/blog/140168</a>&nbsp;
          发表时间: 2007年11月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div style="text-indent: 21pt;"><span style="font-size: 14pt;">JAVA</span><span style="font-size: 14pt;">语言是</span><span style="font-size: 14pt;">1995</span><span style="font-size: 14pt;">年</span><span style="font-size: 14pt;">5</span><span style="font-size: 14pt;">月由</span><span style="font-size: 14pt;">SUN</span><span style="font-size: 14pt;">公司发布的，由于其安全性高、代码优化、跨平台等特性，迅速取代了很多传统高级语言，占据了企业级网络应用开发等诸多领域的霸主地位。</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">不过，</span><span style="font-size: 14pt;">JAVA</span><span style="font-size: 14pt;">最突出的跨平台优势使得它不能被编译成本地代码，而要以中间代码的形式运行在虚拟机环境中，这使得</span><span style="font-size: 14pt;">JAVA</span><span style="font-size: 14pt;">的反编译要比别的高级语言容易实现，并且反编译的代码经过优化后几乎可以与源代码相媲美。</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">为了更好地保护知识产权，避免本公司的智力成果轻易被人窃取，开发者有必要对反编译工具深入了解，以便有针对性地采取保护措施。</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">目前，比较流行的</span><span style="font-size: 14pt;">JAVA</span><span style="font-size: 14pt;">反编译工具超过</span><span style="font-size: 14pt;">30</span><span style="font-size: 14pt;">种，其中有三款堪称精品：</span></div>
<div style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt;"><span style="font-size: 14pt;">一、<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 14pt;">应用广泛的</span><span style="font-size: 14pt;">JAD</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">在众多的</span><span style="font-size: 14pt;">JAVA</span><span style="font-size: 14pt;">反编译工具中，有几种非常著名的工具使用了相同的核心引擎&mdash;&mdash;</span><span style="font-size: 14pt;">JAD</span><span style="font-size: 14pt;">，其中主要包括：</span><span style="font-size: 14pt;">Front End Plus</span><span style="font-size: 14pt;">、</span><span style="font-size: 14pt;">mDeJava</span><span style="font-size: 14pt;">、</span><span style="font-size: 14pt;">Decafe Pro</span><span style="font-size: 14pt;">、</span><span style="font-size: 14pt;">Cavaj Java Decompiler</span><span style="font-size: 14pt;">、</span><span style="font-size: 14pt;">DJ Java Decompiler</span><span style="font-size: 14pt;">、</span><span style="font-size: 14pt;">NMI&rsquo;s Java Class Viewer</span><span style="font-size: 14pt;">和国产的</span><span style="font-size: 14pt;">JAVA</span><span style="font-size: 14pt;">源代码反编译专家等等。</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">JAD</span><span style="font-size: 14pt;">本身是一个命令行工具，没有图形界面，上述的这些工具大多是在</span><span style="font-size: 14pt;">JAD</span><span style="font-size: 14pt;">内核的基础之上加了一个图形界面而已。这么多种产品的共同选择，足可证明</span><span style="font-size: 14pt;">JAD</span><span style="font-size: 14pt;">在</span><span style="font-size: 14pt;">JAVA</span><span style="font-size: 14pt;">反编译领域中的尊贵地位。</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">笔者用来测试的</span><span style="font-size: 14pt;">JAD</span><span style="font-size: 14pt;">版本是</span><span style="font-size: 14pt;">1.5.8</span><span style="font-size: 14pt;">f。</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;"><a href="http://www.popuni.com/attachments/month_0704/v2007415142319.jpg" title="在新窗口打开图片" target="_blank"><img src="http://www.popuni.com/attachments/month_0704/v2007415142319.jpg" border="0" height="324" alt="" width="500" style="width: 571px; height: 353px;" /></a></span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">JAD</span><span style="font-size: 14pt;">是使用</span><span style="font-size: 14pt;">Microsoft Visual C++</span><span style="font-size: 14pt;">开发的，运行速度非常快，可以处理很复杂的</span><span style="font-size: 14pt;">JAVA</span><span style="font-size: 14pt;">编译文件。众多的参数使</span><span style="font-size: 14pt;">JAD</span><span style="font-size: 14pt;">可以灵活应付多种加密手段，令反编译的代码更加优化和易读。由于</span><span style="font-size: 14pt;">JAD</span><span style="font-size: 14pt;">参数太多，没必要一一解释，其中有几个最常用的如下：</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">-d - </span><span style="font-size: 14pt;">用于指定输出文件的目录</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">-s - </span><span style="font-size: 14pt;">输出文件扩展名</span><span style="font-size: 14pt;">(</span><span style="font-size: 14pt;">默认为</span><span style="font-size: 14pt;">: .jad)</span><span style="font-size: 14pt;">，通常都会把输出文件扩展名直接指定为</span><span style="font-size: 14pt;">.java</span><span style="font-size: 14pt;">，以方便修改的重新编译。</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">&nbsp;-8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - </span><span style="font-size: 14pt;">将</span><span style="font-size: 14pt;">Unicode</span><span style="font-size: 14pt;">字符转换为</span><span style="font-size: 14pt;">ANSI</span><span style="font-size: 14pt;">字符串，如果输出字符串是中文的话一定要加上这个参数才能正确显示。</span></div>
<dir>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">最常用的反编译指令如下所示：</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">Jad &ndash;d c:\javasource &ndash;s .java -8 javatest.class</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">这条指令将当前目录下的</span><span style="font-size: 14pt;">javatest.class</span><span style="font-size: 14pt;">反编译为</span><span style="font-size: 14pt;">javatest.java</span><span style="font-size: 14pt;">并保存在</span><span style="font-size: 14pt;">c:\javasource</span><span style="font-size: 14pt;">目录里，其中的提示输出为中文，而不是</span><span style="font-size: 14pt;">Unicode</span><span style="font-size: 14pt;">代码。</span></div>
<div style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt;"><span style="font-size: 14pt;">二、<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 14pt;">源码开放的</span><span style="font-size: 14pt;">JODE</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">JODE</span><span style="font-size: 14pt;">是全球最大的开源项目网站</span><span style="font-size: 14pt;">Sourceforge.net</span><span style="font-size: 14pt;">的成员，不要以为源码开放就小瞧它，在所有的</span><span style="font-size: 14pt;">JAVA</span><span style="font-size: 14pt;">反编译器中，</span><span style="font-size: 14pt;">JODE</span><span style="font-size: 14pt;">的反编译效果是最好的，尤其是对付一些常见的加密手段，例如混淆技术等，更是出类拔粹。</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">JODE</span><span style="font-size: 14pt;">本身也是纯</span><span style="font-size: 14pt;">JAVA</span><span style="font-size: 14pt;">开发的，最近越来越多的</span><span style="font-size: 14pt;">JAVA</span><span style="font-size: 14pt;">反编译软件也选择</span><span style="font-size: 14pt;">JODE</span><span style="font-size: 14pt;">来做它们的核心引擎，例如</span><span style="font-size: 14pt;">JCavaj Java Decompiler</span><span style="font-size: 14pt;">、</span><span style="font-size: 14pt;">BTJ (Back To Java)</span><span style="font-size: 14pt;">、</span><span style="font-size: 14pt;">jEdit's JavaInsight plugin</span><span style="font-size: 14pt;">等。</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">JODE</span><span style="font-size: 14pt;">是一个可运行的</span><span style="font-size: 14pt;">JAR</span><span style="font-size: 14pt;">文件，在</span><span style="font-size: 14pt;">windows</span><span style="font-size: 14pt;">环境下双击即可运行。</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;"><a href="http://www.popuni.com/attachments/month_0704/72007415142333.jpg" title="在新窗口打开图片" target="_blank"><img src="http://www.popuni.com/attachments/month_0704/72007415142333.jpg" border="0" alt="" width="500" /></a></span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">需要特别说明的是，</span><span style="font-size: 14pt;">JODE</span><span style="font-size: 14pt;">不是通过常规的</span><span style="font-size: 14pt;">Open-&gt;File</span><span style="font-size: 14pt;">的方式来加载</span><span style="font-size: 14pt;">JAVA</span><span style="font-size: 14pt;">编译后的类文件（</span><span style="font-size: 14pt;">*.class</span><span style="font-size: 14pt;">）或是类包（</span><span style="font-size: 14pt;">*.jar</span><span style="font-size: 14pt;">）的，而是通过在</span><span style="font-size: 14pt;">Options</span><span style="font-size: 14pt;">菜单中的</span><span style="font-size: 14pt;">Set Classpath</span><span style="font-size: 14pt;">来实现的，单独的类文件可以将它的上一级目录作为</span><span style="font-size: 14pt;">Classpath</span><span style="font-size: 14pt;">输入，然后再选择</span><span style="font-size: 14pt;">Reload Classpath</span><span style="font-size: 14pt;">即可。</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;"><img src="http://www.popuni.com/attachments/month_0704/k2007415142340.jpg" border="0" alt="" />&nbsp;&nbsp; <img src="http://www.popuni.com/attachments/month_0704/p2007415142348.jpg" border="0" alt="" /></span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">新加入的类包或是类的名字会在左侧窗口出现，双击类包名可以展开目录树结构，双击需要反编译的类名则在右上角的窗口中直接显示反编译后的源代码。</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">&nbsp;</span></div>
<div style="margin: 0cm 0cm 0pt 21pt; text-indent: -21pt;"><span style="font-size: 14pt;">三、<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 14pt;">独树一帜的</span><span style="font-size: 14pt;">DAVA</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">DAVA</span><span style="font-size: 14pt;">不是一个独立的</span><span style="font-size: 14pt;">JAVA</span><span style="font-size: 14pt;">反编译器，而是</span><span style="font-size: 14pt;">JAVA</span><span style="font-size: 14pt;">代码优化工具</span><span style="font-size: 14pt;">Soot</span><span style="font-size: 14pt;">的一部分。</span><span style="font-size: 14pt;">Soot</span><span style="font-size: 14pt;">和</span><span style="font-size: 14pt;">JODE</span><span style="font-size: 14pt;">一样是纯</span><span style="font-size: 14pt;">JAVA</span><span style="font-size: 14pt;">开发的，也是一个独立的</span><span style="font-size: 14pt;">JAR</span><span style="font-size: 14pt;">包，但却不能通过双击直接运行，而是象</span><span style="font-size: 14pt;">JAD</span><span style="font-size: 14pt;">一样在命令行状态运行</span><span style="font-size: 14pt;"><a href="http://www.popuni.com/attachments/month_0704/42007415142358.jpg" title="在新窗口打开图片" target="_blank"><img src="http://www.popuni.com/attachments/month_0704/42007415142358.jpg" border="0" height="289" alt="" width="500" style="width: 539px;" /></a></span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">Soot</span><span style="font-size: 14pt;">对环境变量的配置要求非常严格，通常情况下要对</span><span style="font-size: 14pt;">CLASSPATH</span><span style="font-size: 14pt;">做如下设置：</span></div>
<div><span style="font-size: 14pt;">Set CLASSPATH=%CLASSPATH%;c:\sootdir\sootclasses-2.1.0.jar;.;</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">其中的</span><span style="font-size: 14pt;">c:\sootdir\</span><span style="font-size: 14pt;">是下载的</span><span style="font-size: 14pt;">soot</span><span style="font-size: 14pt;">类包放置的路径，</span><span style="font-size: 14pt;">CLASSPATH</span><span style="font-size: 14pt;">末尾的</span><span style="font-size: 14pt;">.;</span><span style="font-size: 14pt;">代表了当前目录，如果不加上这个的话</span><span style="font-size: 14pt;">Soot</span><span style="font-size: 14pt;">经常会报一个找不到类的错误。</span></div>
<div><span style="font-size: 14pt;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DAVA</span><span style="font-size: 14pt;">是作为</span><span style="font-size: 14pt;">Soot</span><span style="font-size: 14pt;">的一个参数使用的，通常的用法如下：</span></div>
<div><span style="font-size: 14pt;">Java soot.Main &ndash;f dava &ndash;d c:\javasource javatest</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">注意最后的类名不用带</span><span style="font-size: 14pt;">.class</span><span style="font-size: 14pt;">后缀，因为它默认是处理</span><span style="font-size: 14pt;">class</span><span style="font-size: 14pt;">文件，这个操作与前述的</span><span style="font-size: 14pt;">JAD</span><span style="font-size: 14pt;">的参数效果相同。</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">DAVA</span><span style="font-size: 14pt;">采取了流程优化的方式进行反编译，与传统反编译思路不尽相同，但却对改变流程类的加密方法有独特的反编译效果。</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">&nbsp;</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">上述的三种工具各有千秋，但效果都非常不错。经测试，它们基本上都可以把</span><span style="font-size: 14pt;">JDK</span><span style="font-size: 14pt;">自带的一些例程完全反编译，然后不加任何修改可再编译成功，并能正常运行！</span></div>
<div style="text-indent: 21pt;"><span style="font-size: 14pt;">（文中工具均经过本人亲手测试，当时用的是jdk1.4.2_03，现在离写文章的时候过了一年多了，jdk都出到1.5了，怕是有些程序也不太好反编了）</span></div>
</dir>
          <br/>
          <span style="color:red;">
            <a href="http://igogogo9.javaeye.com/blog/140168#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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 13 Nov 2007 11:59:13 +0800</pubDate>
        <link>http://igogogo9.javaeye.com/blog/140168</link>
        <guid>http://igogogo9.javaeye.com/blog/140168</guid>
      </item>
      <item>
        <title>JSP的作用域</title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/135443" style="color:red;">http://igogogo9.javaeye.com/blog/135443</a>&nbsp;
          发表时间: 2007年10月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Web应用中，JSP创建的对象有一定的生命周期，也有可能被其他组件或者对象访问。对象的声明周期和可访问性称为作用域（scope）。有些时候，比如下一节讨论的内置对象的作用域一旦设置是不能修改的。对于其他的对象（如JavaBean），可以设置它的作用域。下面有4种类型的作用域：<br /><br />◆页面域（Page scope）：这个作用域是最严格的。页面域的对象只对于它所在页面是可访问的。页面域的JavaBean和脚本程序创建的对象都是线程安全的。（回顾前面的知识点，由声明元素创建的Java对象不是线程安全的）。<br /><br />◆请求域（Request scope）：请求域的对象是在相应请求的生命周期内有效。也就是说，对象在创建它的页面内有效，以及请求被转发或者被包含的页面内有效。请求域的对象是线程安全的。只有相应请求的执行线程可以访问这些对象。<br /><br />◆会话域（Session scope）：会话域的对象，对于参与某个客户端会话的所有应用组件是有效的。这类对象不是线程安全的。如果有多个请求同时访问同一个会话（Session）对象，那么需要对此对象进行同步访问。<br /><br />◆应用域（Application scope）：这是最宽泛的作用域。应用域的对象在应用的整个生命周期内都是有效的。这类对象不是线程安全的，如果多个请求试图同时修改某一个对象，那么必须对这些访问进行同步处理。<br /><br />在开发Web应用的组件时需要仔细考虑这些对象的作用域，按照对象的需要赋予它们适合的作用域，不要过大也不要过小。如果为一个只在组件内使用的对象赋予了应用域，这样显然毫无意义。同样，如果访问对象具有太多的限制，那么会使应用变得更加复杂。因此需要仔细权衡每个对象及其用途，从而准确推断它的作用域。
          <br/>
          <span style="color:red;">
            <a href="http://igogogo9.javaeye.com/blog/135443#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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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, 25 Oct 2007 14:49:13 +0800</pubDate>
        <link>http://igogogo9.javaeye.com/blog/135443</link>
        <guid>http://igogogo9.javaeye.com/blog/135443</guid>
      </item>
      <item>
        <title>Expression Language</title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/134178" style="color:red;">http://igogogo9.javaeye.com/blog/134178</a>&nbsp;
          发表时间: 2007年10月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          参考http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html<br /><br />A primary feature of JSP technology version 2.0 is its support for an expression language (EL). An expression language makes it possible to easily access application data stored in JavaBeans components. For example, the JSP expression language allows a page author to access a bean using simple syntax such as ${name} for a simple variable or ${name.foo.bar} for a nested property.<br /><br />The test attribute of the following conditional tag is supplied with an EL expression that compares the number of items in the session-scoped bean named cart with 0:<br /><br />&lt;c:if test="${sessionScope.cart.numberOfItems > 0}"> <br />  ...<br />&lt;/c:if> <br /><br />The JSP expression evaluator is responsible for handling EL expressions, which are enclosed by the ${ } characters and can include literals. Here's an example:<br /><br />&lt;c:if test="${bean1.a &lt; 3}" ><br />  ...<br />&lt;/c:if> <br /><br />Any value that does not begin with ${ is treated as a literal and is parsed to the expected type using the PropertyEditor for the type:<br /><br />&lt;c:if test="true" ><br />...<br />&lt;/c:if> <br /><br />Literal values that contain the ${ characters must be escaped as follows:<br /><br />&lt;mytags:example attr1="an expression is ${'${'}true}" /> <br /><br />Deactivating Expression Evaluation<br /><br />Because the pattern that identifies EL expressions--${ }--was not reserved in the JSP specifications before JSP 2.0, there may be applications where such a pattern is intended to pass through verbatim. To prevent the pattern from being evaluated, you can deactivate EL evaluation.<br /><br />To deactivate the evaluation of EL expressions, you specify the isELIgnored attribute of the page directive:<br /><br />&lt;%@ page isELIgnored ="true|false" %> <br /><br />The valid values of this attribute are true and false. If it is true, EL expressions are ignored when they appear in static text or tag attributes. If it is false, EL expressions are evaluated by the container.<br /><br />The default value varies depending on the version of the web application deployment descriptor. The default mode for JSP pages delivered using a Servlet 2.3 or earlier descriptor is to ignore EL expressions; this provides backward compatibility. The default mode for JSP pages delivered with a Servlet 2.4 descriptor is to evaluate EL expressions; this automatically provides the default that most applications want. You can also deactivate EL expression evaluation for a group of JSP pages (see Deactivating EL Expression Evaluation).<br />Using Expressions<br /><br />EL expressions can be used:<br /><br />    * In static text<br />    * In any standard or custom tag attribute that can accept an expression<br /><br />The value of an expression in static text is computed and inserted into the current output. If the static text appears in a tag body, note that an expression will not be evaluated if the body is declared to be tagdependent (see body-content Attribute).<br /><br />There are three ways to set a tag attribute value:<br /><br />    * With a single expression construct:<br /><br />      &lt;some:tag value="${expr}"/><br /><br />      The expression is evaluated and the result is coerced to the attribute's expected type.<br />    * With one or more expressions separated or surrounded by text:<br /><br />      &lt;some:tag value="some${expr}${expr}text${expr}"/><br /><br />      The expressions are evaluated from left to right. Each expression is coerced to a String and then concatenated with any intervening text. The resulting String is then coerced to the attribute's expected type.<br />    * With text only:<br /><br />      &lt;some:tag value="sometext"/><br /><br />      In this case, the attribute's String value is coerced to the attribute's expected type.<br /><br />Expressions used to set attribute values are evaluated in the context of an expected type. If the result of the expression evaluation does not match the expected type exactly, a type conversion will be performed. For example, the expression ${1.2E4} provided as the value of an attribute of type float will result in the following conversion:<br /><br />Float.valueOf("1.2E4").floatValue()  <br /><br />See section JSP2.8 of the JSP 2.0 specification for the complete type conversion rules.<br />Variables<br /><br />The web container evaluates a variable that appears in an expression by looking up its value according to the behavior of PageContext.findAttribute(String). For example, when evaluating the expression ${product}, the container will look for product in the page, request, session, and application scopes and will return its value. If product is not found, null is returned. A variable that matches one of the implicit objects described in Implicit Objects will return that implicit object instead of the variable's value.<br /><br />Properties of variables are accessed using the . operator and can be nested arbitrarily.<br /><br />The JSP expression language unifies the treatment of the . and [] operators. expr-a.identifier-b is equivalent to expr-a["identifier-b"]; that is, the expression expr-b is used to construct a literal whose value is the identifier, and then the [] operator is used with that value.<br /><br />To evaluate expr-a[expr-b], evaluate expr-a into value-a and evaluate expr-b into value-b. If either value-a or value-b is null, return null.<br /><br />    * If value-a is a Map, return value-a.get(value-b). If !value-a.containsKey(value-b), then return null.<br />    * If value-a is a List or array, coerce value-b to int and return value-a.get(value-b) or Array.get(value-a, value-b), as appropriate. If the coercion couldn't be performed, an error is returned. If the get call returns an IndexOutOfBoundsException, null is returned. If the get call returns another exception, an error is returned.<br />    * If value-a is a JavaBeans object, coerce value-b to String. If value-b is a readable property of value-a, then return the result of a get call. If the get method throws an exception, an error is returned.<br /><br />Implicit Objects<br /><br />The JSP expression language defines a set of implicit objects:<br /><br />    * pageContext: The context for the JSP page. Provides access to various objects including:<br />          o servletContext: The context for the JSP page's servlet and any web components contained in the same application. See Accessing the Web Context.<br />          o session: The session object for the client. See Maintaining Client State.<br />          o request: The request triggering the execution of the JSP page. See Getting Information from Requests.<br />          o response: The response returned by the JSP page. See Constructing Responses.<br /><br />In addition, several implicit objects are available that allow easy access to the following objects:<br /><br />    * param: Maps a request parameter name to a single value<br />    * paramValues: Maps a request parameter name to an array of values<br />    * header: Maps a request header name to a single value<br />    * headerValues: Maps a request header name to an array of values<br />    * cookie: Maps a cookie name to a single cookie<br />    * initParam: Maps a context initialization parameter name to a single value<br /><br />Finally, there are objects that allow access to the various scoped variables described in Using Scope Objects.<br /><br />    * pageScope: Maps page-scoped variable names to their values<br />    * requestScope: Maps request-scoped variable names to their values<br />    * sessionScope: Maps session-scoped variable names to their values<br />    * applicationScope: Maps application-scoped variable names to their values<br /><br />When an expression references one of these objects by name, the appropriate object is returned instead of the corresponding attribute. For example, ${pageContext} returns the PageContext object, even if there is an existing pageContext attribute containing some other value.<br />Literals<br /><br />The JSP expression language defines the following literals:<br /><br />    * Boolean: true and false<br />    * Integer: as in Java<br />    * Floating point: as in Java<br />    * String: with single and double quotes; " is escaped as \", ' is escaped as \', and \ is escaped as \\.<br />    * Null: null<br /><br />Operators<br /><br />In addition to the . and [] operators discussed in Variables, the JSP expression language provides the following operators:<br /><br />    * Arithmetic: +, - (binary), *, / and div, % and mod, - (unary)<br />    * Logical: and, &&, or, ||, not, !<br />    * Relational: ==, eq, !=, ne, &lt;, lt, >, gt, &lt;=, ge, >=, le. Comparisons can be made against other values, or against boolean, string, integer, or floating point literals.<br />    * Empty: The empty operator is a prefix operation that can be used to determine whether a value is null or empty.<br />    * Conditional: A ? B : C. Evaluate B or C, depending on the result of the evaluation of A.<br /><br />The precedence of operators highest to lowest, left to right is as follows:<br /><br />    * [] .<br />    * () - Used to change the precedence of operators.<br />    * - (unary) not ! empty<br />    * * / div % mod<br />    * + - (binary)<br />    * &lt; > &lt;= >= lt gt le ge<br />    * == != eq ne<br />    * && and<br />    * || or<br />    * ? :<br /><br />Reserved Words<br /><br />The following words are reserved for the JSP expression language and should not be used as identifiers.<br /><br />and   eq   gt   true   instanceof<br />or    ne   le   false  empty<br />not   lt   ge   null   div   mod <br /><br />Note that many of these words are not in the language now, but they may be in the future, so you should avoid using them.<br />Examples<br /><br />Table 12-2 contains example EL expressions and the result of evaluating them.<br />Table 12-2 Example Expressions <br />EL Expression<br />	<br />Result<br />${1 > (4/2)}<br />	<br />false<br />${4.0 >= 3}<br />	<br />true<br />${100.0 == 100}<br />	<br />true<br />${(10*10) ne 100}<br />	<br />false<br />${'a' &lt; 'b'}<br />	<br />true<br />${'hip' gt 'hit'}<br />	<br />false<br />${4 > 3}<br />	<br />true<br />${1.2E4 + 1.4}<br />	<br />12001.4<br />${3 div 4}<br />	<br />0.75<br />${10 mod 4}<br />	<br />2<br />${empty param.Add}<br />	<br />True if the request parameter named Add is null or an empty string<br />${pageContext.request.contextPath}<br />	<br />The context path<br />${sessionScope.cart.numberOfItems}<br />	<br />The value of the numberOfItems property of the session-scoped attribute named cart<br />${param['mycom.productId']}<br />	<br />The value of the request parameter named mycom.productId<br />${header["host"]}<br />	<br />The host<br />${departments[deptName]}<br />	<br />The value of the entry named deptName in the departments map<br />${requestScope['javax.servlet.<br />forward.servlet_path']}<br />	<br />The value of the request-scoped attribute named javax.servlet.<br />forward.servlet_path<br /><br />Functions<br /><br />The JSP expression language allows you to define a function that can be invoked in an expression. Functions are defined using the same mechanisms as custom tags (See Using Custom Tags and Chapter 15).<br />Using Functions<br /><br />Functions can appear in static text and tag attribute values.<br /><br />To use a function in a JSP page, you use a taglib directive to import the tag library containing the function. Then you preface the function invocation with the prefix declared in the directive.<br /><br />For example, the date example page index.jsp imports the /functions library and invokes the function equals in an expression:<br /><br />&lt;%@ taglib prefix="f" uri="/functions"%><br />...<br />    &lt;c:when<br />      test="${f:equals(selectedLocaleString,<br />        localeString)}" > <br /><br />Defining Functions<br /><br />To define a function you program it as a public static method in a public class. The mypkg.MyLocales class in the date example defines a function that tests the equality of two Strings as follows:<br /><br />package mypkg;<br />public class MyLocales {<br /><br />  ...<br />  public static boolean equals( String l1, String l2 ) {<br />    return l1.equals(l2);<br />  }<br />} <br /><br />Then you map the function name as used in the EL expression to the defining class and function signature in a TLD. The following functions.tld file in the date example maps the equals function to the class containing the implementation of the function equals and the signature of the function:<br /><br />&lt;function><br />  &lt;name>equals&lt;/name><br />  &lt;function-class>mypkg.MyLocales&lt;/function-class><br />  &lt;function-signature>boolean equals( java.lang.String,<br />    java.lang.String )&lt;/function-signature><br />&lt;/function> <br /><br />A tag library can have only one function element that has any given name element.
          <br/>
          <span style="color:red;">
            <a href="http://igogogo9.javaeye.com/blog/134178#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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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>Mon, 22 Oct 2007 09:11:48 +0800</pubDate>
        <link>http://igogogo9.javaeye.com/blog/134178</link>
        <guid>http://igogogo9.javaeye.com/blog/134178</guid>
      </item>
      <item>
        <title>JavaScript中parseInt()函数问题</title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/131404" style="color:red;">http://igogogo9.javaeye.com/blog/131404</a>&nbsp;
          发表时间: 2007年10月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这个问题大家可能会忽视，我在项目中就遇到了。写了提醒一下大家！！！<br /><br />在用javascript的parseInt函数时，parseInt(”08″)或者parseInt(”09″)返回的居然是0，而 parseInt(”01″)…parseInt(”07″)都是正确的，一开始很难理解，后来发现出现这个问题的原因是当在前面有”0″时， javascript的debugger会认为这是一个八进制数，而”08″和”09″不是一个合法的八进制数，所以导致了那个问题，但是 parseFloat不会存在这个问题。<br /><br />     事实上，parseInt方法有一个可选参数来表示数字的进制，所以这应该不能算是一个bug，只是我们平时没有注意到这种细节问题。那么解决的方法很简单，就是使用parseInt(”08″,10)或者parseInt(”09″,10)，通知javascript解释器使用十进制来解析就可以了。
          <br/>
          <span style="color:red;">
            <a href="http://igogogo9.javaeye.com/blog/131404#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><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><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 12 Oct 2007 17:05:51 +0800</pubDate>
        <link>http://igogogo9.javaeye.com/blog/131404</link>
        <guid>http://igogogo9.javaeye.com/blog/131404</guid>
      </item>
      <item>
        <title>键盘各功能键的小知识</title>
        <author>igogogo9</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://igogogo9.javaeye.com">igogogo9</a>&nbsp;
          链接：<a href="http://igogogo9.javaeye.com/blog/128115" style="color:red;">http://igogogo9.javaeye.com/blog/128115</a>&nbsp;
          发表时间: 2007年09月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          ESC 进入退出键<br />功能:快速进入或快速退出程序.<br /><br /><br /><br />Tab 跳格键<br />功能:在编辑文本时按一次跳8个字符,相当于按八个空格,在填表格时,按一次,即可跳到下一格.<br /><br /><br />Caps Lock 大小写转换键<br />功能:在编辑文本时,按一次可切换到大写,再按可返回.<br /><br /><br />Shift 上档键<br /><br />功能:<br />1.在编辑文本时,按住不放,可输入大写字母.<br />2.需要输入标点符号时,按住,另一只手再按键盘上对应的符号,即可输入.<br />3.Shift+键盘的方向键,可选定文本.<br />4.在删除文件时,按住Shift键.可不移到回收站,直接删除(要小心,这种方法删文件,删了以后,不用工具软件的话是找不回来的)<br />5,在选定文件(文本)时,按住Shift键,可连续选择多个文件(文本)<br />[方法,在开始的地方鼠标单击,然后按住Shift键,在结束的地方单击,即可连续选择]<br />6.Shift+Ctrl可切换输入法.(键盘左边和键盘右边的有何不同呢?左边的是从上到下,而右边的是从下到上)<br />7.SHIFT+F10 相当于 鼠标右键<br />Ctrl键<br />功能:<br />1.在编辑文本时,按住Ctrl+空格键,可快速切换中英文输入法<br />2.在选定文件(或文本)时,按住Ctrl键,可逐个选择文件,选完后,放开即可对文件(或文本)操作.<br />3.