<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>JavaEye博客</title>
    <description>Java博客,Ruby on Rails博客,AJAX博客,Agile博客 -- JavaEye做最棒的软件开发交流社区</description>
    <link>http://www.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>监听器ServletContextListener小记</title>
        <author>scnujie</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://scnujie.javaeye.com">scnujie</a>&nbsp;
          链接：<a href="http://scnujie.javaeye.com/blog/219535" style="color:red;">http://scnujie.javaeye.com/blog/219535</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天奉命写一个监听器监听tomcat，在tomcat启动后隔半个小时生成一些要求的静态页面，因为没写过监听器，所以在网上看了一些资料后觉得不是很难就很兴奋地开始动手，<br />   用了ServletContextListener,可没想到监听是监听到了，但是搞得tomcat启动的时候一路在监听，以为是这个监听器不适合就换成了session的，以为快成功的<br />   时候老大又说不行（后来一想也确实不行），所以又换回ServletContextListener来继续搞，后来上网看来看去原来用这个监听器才是符合要求的，一开始那种<br />   只不过是因为我把定时器Timer定义在了ServletContextListener的初始化函数里面了，搞得tomcat启动时老是在监听而启动不了，后来我把定时器Timer定义在<br />   另外一个类里面，再在ServletContextListener的初始化函数里面调用就搞定了。还是没经验啊。<br /><br />        不过这里还有个问题：如何在这个初始化函数里面获得tomcat的IP和端口呢？也许很难，也许很easy,还不知道！<br /><br />   Listener:<br /><br />    <pre name="code" class="java">public class GenPagesListener implements ServletContextListener
{
        private DoSomething ds = null;
        
    public void contextInitialized(ServletContextEvent sce) {
            
            String rootPath = new File(sce.getServletContext().getRealPath("/")).getParentFile().toString();
                if(rootPath.contains("\\"))
                {
                        rootPath = rootPath.replace("\\", "/")+"/ROOT";
                }
                String hostPath = AppPropertyUtil.getProperty("webUrl");
                
                
                GlobeContext.setRootPath(rootPath);
                GlobeContext.setHostPath(hostPath);
            
            ds = new DoSomething(1000,1800000);
    }

    public void contextDestroyed(ServletContextEvent sce) {
       ds.destoryTimer();
    }


}</pre><br /><br />   中间类：<br /><br />   <pre name="code" class="java"> public class DoSomething {

        private java.util.Timer timer;
        public DoSomething(int a,int b)
        {
                timer = new Timer();
                timer.schedule(new GenPageTask(), a,b);
        }
        
        public void destoryTimer(){
            timer.cancel();
            }
}
</pre><br /><br />   要执行的任务：<br /><br />   <pre name="code" class="java">public class GenPageTask extends TimerTask{
        
        public void run()
        {
                ApplicationContext context = GlobeContext.getApplicationContext();
                IChannelManager channelManager = (IChannelManager)context.getBean("channelManager");
                List&lt;Channel> list = channelManager.getObjectList(Restrictions.eq("type", 1));        
                                
                for(Channel ch : list)
                {
                        Long lid = ch.getId();
                        try{
                        publishChannel(lid);
                        }
                        catch(Exception e)
                        {
                           e.printStackTrace();        
                        }
                }
        }
        
        public void publishChannel(Long lid) throws Exception
        {

                String root = GlobeContext.getRootPath();
                String rootpath = GlobeContext.getHostPath();
                ApplicationContext context = GlobeContext.getApplicationContext();
                IChannelManager channelManager = (IChannelManager)context.getBean("channelManager");
                ChannelView chan = channelManager.getView(lid);
                String puppath = root + chan.getFullPath();
                File file = new File(puppath);
                if (!file.exists()) {
                        file.mkdirs();
                }

                int pageSize = Integer.valueOf(AppPropertyUtil
                                .getProperty("listPageSize"));
                if (chan.getPageSize() != null) {
                        pageSize = chan.getPageSize();
                }
                try {
                        List&lt;Criterion> cris = new ArrayList&lt;Criterion>();
                        cris.add(Restrictions.eq("channelId", chan.getId()));
                        cris.add(Restrictions.eq("struts", 1));
                        IDocumentManager documentManager = (IDocumentManager)context.getBean("documentManager");
                        int totalPage = documentManager.getPageObject(0, pageSize, cris)
                                        .getTotalPage();

                        for (int page = 1; page &lt;= totalPage; page++) {
                                String index = "";
                                if (page == 1) {
                                        index = "index";
                                } else {
                                        index = "list_" + page + "";
                                }
                                String url = rootpath
                                                + "admin/channel/docList.htm?data.channelId="
                                                + chan.getId() + "&data.page=" + page;
                                HtmlGenUtil.writeHtml(puppath + index + ".shtml", HtmlGenUtil
                                                .getHtmlCode(url), "YES");
                        }
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
}</pre>
          <br/>
          <span style="color:red;">
            <a href="http://scnujie.javaeye.com/blog/219535#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 15:04:22 +0800</pubDate>
        <link>http://scnujie.javaeye.com/blog/219535</link>
        <guid>http://scnujie.javaeye.com/blog/219535</guid>
      </item>
      <item>
        <title>[SAP]Bank account, House bank, Bank Account基础</title>
        <author>blueoxygen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sap.javaeye.com">blueoxygen</a>&nbsp;
          链接：<a href="http://sap.javaeye.com/blog/219526" style="color:red;">http://sap.javaeye.com/blog/219526</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>House Bank</strong>: A business partner that represents a bank via which you can process your own internal transactions. 也就是说，你的内部业务处理所需要的一个银行。但是并非是只有一个科目或者一个帐户。<br />House Bank中的每一个帐户，靠Account ID来区别。House Bank和Account ID组合在一起，就唯一确定了一个Bank Account. 每个Bank Account都指定了一个唯一的G/L中的科目。</p>
<p>他们三个之间的关系如下<br />
<object height="351" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="500">
<param name="src" value="http://f.yupoo.com/v.swf?id=blueoxygen-ff8080811b547e20011b58d6e8d1660b-m" /><embed src="http://f.yupoo.com/v.swf?id=blueoxygen-ff8080811b547e20011b58d6e8d1660b-m" type="application/x-shockwave-flash" height="351" width="500"></embed>
</object>
</p>
<p>&nbsp;</p>
<p>在IDES系统中，我们演示如下。</p>
<p>首先在找到一个G/L Account主数据，然后看到有House Bank和Account ID两个栏位。</p>
<p>
<object height="444" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="500">
<param name="src" value="http://f.yupoo.com/v.swf?id=blueoxygen-ff8080811b547e20011b58e3e87e67c3-m" /><embed src="http://f.yupoo.com/v.swf?id=blueoxygen-ff8080811b547e20011b58e3e87e67c3-m" type="application/x-shockwave-flash" height="444" width="500"></embed>
</object>
</p>
<p>&nbsp;</p>
<p>TCODE：FI12进入到后台配置，我们就可以看到一个House Bank体现了一个Bank Key定义的银行主数据，而一个House Bank下会有很多Account ID， House Bank和Account ID确定了唯一的一个Bank Account，每个Bank Account会制定一个G/L Account。</p>
<p>
<object height="242" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="500">
<param name="src" value="http://f.yupoo.com/v.swf?id=blueoxygen-ff8080811b547e20011b58d6e9cd660e-m" /><embed src="http://f.yupoo.com/v.swf?id=blueoxygen-ff8080811b547e20011b58d6e9cd660e-m" type="application/x-shockwave-flash" height="242" width="500"></embed>
</object>
</p>
<p>
<object height="379" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="500">
<param name="src" value="http://f.yupoo.com/v.swf?id=blueoxygen-ff8080811b547e20011b58d6e971660d-m" /><embed src="http://f.yupoo.com/v.swf?id=blueoxygen-ff8080811b547e20011b58d6e971660d-m" type="application/x-shockwave-flash" height="379" width="500"></embed>
</object>
</p>
<p>
<object height="208" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="500">
<param name="src" value="http://f.yupoo.com/v.swf?id=blueoxygen-ff8080811b547e20011b58d6e84d660a-m" /><embed src="http://f.yupoo.com/v.swf?id=blueoxygen-ff8080811b547e20011b58d6e84d660a-m" type="application/x-shockwave-flash" height="208" width="500"></embed>
</object>
</p>
<p>
<object height="427" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="500">
<param name="src" value="http://f.yupoo.com/v.swf?id=blueoxygen-ff8080811b547e20011b58d6e921660c-m" /><embed src="http://f.yupoo.com/v.swf?id=blueoxygen-ff8080811b547e20011b58d6e921660c-m" type="application/x-shockwave-flash" height="427" width="500"></embed>
</object>
</p>
          <br/>
          <span style="color:red;">
            <a href="http://sap.javaeye.com/blog/219526#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 14:50:32 +0800</pubDate>
        <link>http://sap.javaeye.com/blog/219526</link>
        <guid>http://sap.javaeye.com/blog/219526</guid>
      </item>
      <item>
        <title>jni 中的 signature</title>
        <author>fly_hyp</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fly-hyp.javaeye.com">fly_hyp</a>&nbsp;
          链接：<a href="http://fly-hyp.javaeye.com/blog/219509" style="color:red;">http://fly-hyp.javaeye.com/blog/219509</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近在研究jni编程。碰到一些问题记录一下。有需要的朋友可以拿去用</p>
<p>&nbsp;</p>
<p>jni 有一个函数是</p>
<p>&nbsp;</p>
<pre><span id="l1178">jmethodID (JNICALL *GetStaticMethodID)
      (JNIEnv *env, jclass clazz, const char *name, const char *sig);</span></pre>
<p>其中参数 sig （signature） 在文档中说明的不太清楚。</p>
<p>&nbsp;</p>
<p>可以通过javap命令获得相应的 methed signature</p>
<p>&nbsp;</p>
<p>例如：</p>
<p>javap -classpath myJavaUtils.jar -s com.lang.JavaUtil</p>
<p>&nbsp;</p>
<p>javap -s -p Prompt</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>网上搜了很多，下面这些还不错：</p>
<p>&nbsp;</p>
<p><a href="http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html">http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html</a></p>
<p>&nbsp;</p>
<p><a href="http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp133">http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp133</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://fly-hyp.javaeye.com/blog/219509#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 14:18:03 +0800</pubDate>
        <link>http://fly-hyp.javaeye.com/blog/219509</link>
        <guid>http://fly-hyp.javaeye.com/blog/219509</guid>
      </item>
      <item>
        <title>Jqury回调</title>
        <author>Jatula</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jatula.javaeye.com">Jatula</a>&nbsp;
          链接：<a href="http://jatula.javaeye.com/blog/219506" style="color:red;">http://jatula.javaeye.com/blog/219506</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>动作：</strong></p>
<p>function saveDefault(ptid){</p>
<p>&nbsp;&nbsp;var httpRequest;<br />&nbsp;&nbsp;httpRequest = $.get("&lt;%=request.getContextPath()%&gt;/play/playList.do?do=savePlayTime&amp;id="+ptid+"&amp;startTime="+starttime+"&amp;endTime="+endtime+"","",function(){saveHourOk("stateHour_"+ptid,httpRequest)});}</p>
<p><strong>处理：</strong></p>
<p>httpRequest为回调部分</p>
<p>&nbsp;</p>
<p>前面请求部分返回处理为：out.print("success");</p>
<p>不要用out.println()，不然出错；</p>
<p><strong>CallBack:</strong></p>
<p>function saveHourOk(id,httpRequest){<br />&nbsp;&nbsp;var message=httpRequest.responseText;<br />&nbsp;&nbsp;alert(message);<br />&nbsp;&nbsp;alert(id);<br />&nbsp;&nbsp;if(message=="true"){<br />&nbsp;&nbsp;&nbsp;showMsg(id,"&lt;bean:message key='playTempletList.view.save'/&gt;");<br />&nbsp;&nbsp;&nbsp;}else{<br />&nbsp;&nbsp;&nbsp;showMsg(id,"&lt;bean:message key='playTempletList.view.savefalse'/&gt;");<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;miss(id);<br />}</p>
<p>&nbsp;</p>
<p>//返回信息<br />function showMsg(id,msg){<br />&nbsp;show(id);<br />&nbsp;var obj = document.getElementById(id);<br />&nbsp;obj.innerHTML = msg;</p>
<p>&nbsp;miss(id);<br />&nbsp;<br />}</p>
<p>&nbsp;</p>
<p>//消失吧<br />function miss(id){<br />&nbsp;window.setTimeout(function(){$("#"+id).fadeOut('slow')},4000);<br />&nbsp;//window.setTimeout(function(){hide(id)},3000);<br />}</p>
          <br/>
          <span style="color:red;">
            <a href="http://jatula.javaeye.com/blog/219506#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 14:07:40 +0800</pubDate>
        <link>http://jatula.javaeye.com/blog/219506</link>
        <guid>http://jatula.javaeye.com/blog/219506</guid>
      </item>
      <item>
        <title>polish学习心得</title>
        <author>LinuxFans</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kuikui.javaeye.com">LinuxFans</a>&nbsp;
          链接：<a href="http://kuikui.javaeye.com/blog/219454" style="color:red;">http://kuikui.javaeye.com/blog/219454</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>记得去年刚毕业的时候，先是去做j2ee开发，后来糊里糊涂地进入了现在的公司做手机软件开发，公司以前用的体系架构是在polish的基础上改造的，与polish 有很多的相似之处。当时在学习polsih的时候感觉很是费劲，在开始几个月时间里，公司没有安排什么像样的活，最多就是写个控件，好几个月下来对polish的认识还是一头雾水，后来自己利用工作之余认认真真的看了关于polish的各方面的资料，感觉polish也就那样子，下面说说自己的一点看法。</p>
<p>polish的架构可以从下面的方面来理解：polish主要是理解了Screen,其它的就很简单了。</p>
<p>Screen的理解。</p>
<p>第一，由里到外-----分层。</p>
<p>第二，在分层的基础上，由上之下布局。</p>
<p>怎么讲？</p>
<p>分层：第一层是背景层，第二层是跟container平行的层，第三层：浮动信息层。</p>
<p>由上到下布局主要看第二层：title、subTitle(tabBar)、container、menubar，第一层背景没有什么可说的。</p>
<p>第三层：浮动信息层，可以用该层来显示一些提示框使用，如：输入法的显示等等。</p>
<p>就这么简单，也许有人会说polish里面的Form之类的类，其实这些类很简单的，Form没有什么内容，它只是对Screen的一个包装，来对外提供一下接口而已。</p>
<p>至于这些组件的响应也就是根据分层的逆推回思想去的做各个层面的控件响应的。</p>
<p>个人觉得有了上面的思想学习polish是件非常简单的事。</p>
<p>polish给我们提供了很多很好的UI组件，我们学习的过程中可以劲情的享受，当然也要取之精华，去之糟粕，因为polish是面向大众的，它相应的逻辑处理也就很复杂，我们可以结合它优点，去掉繁琐的地方，自己写适合自己UI控件。</p>
<p>欢迎大家说出自己的学习心得，一起学习一起提高。</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://kuikui.javaeye.com/blog/219454#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 13:00:37 +0800</pubDate>
        <link>http://kuikui.javaeye.com/blog/219454</link>
        <guid>http://kuikui.javaeye.com/blog/219454</guid>
      </item>
      <item>
        <title>德鲁克日志读后感之五十二</title>
        <author>wainwen</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wainwen.javaeye.com">wainwen</a>&nbsp;
          链接：<a href="http://wainwen.javaeye.com/blog/219449" style="color:red;">http://wainwen.javaeye.com/blog/219449</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="quote_title">引用</div><div class="quote_div"><br /><strong>二月二十四日 企业的合法性<br /><br />除非企业权力的组建是建立在一个能为人接受的合法性原则基础上，否则它将无法存在。</strong><br /><br />任何社会权利只要丧失了合法性，就不能持久维系。任何社会若不能将个体成员凝聚起来，也不能发挥功效。我们的社会若不能使工业体系的成员得到他们今天所缺乏的地位与职能，也将走向解体。大多数人不会造反，反而会陷入一种麻木不仁的状态。他们将会逃避自由的责任，这种丧失了社会意义的自由只是一种威胁与负担。我们只有两个选择：要么建立一个有效的工业社会，要么就是眼睁睁地看着自由湮没于无政府与暴政之中。<br /><br />行动指南：<br />决定你和你的公司是在一个无政府或暴政的世界中运营，还是在一个风险极高的环境中运营。<br /><strong><br />摘自：</strong><br /><br />彼得.德鲁克《工业人的未来》（The Future of Industrial Man）<br /><strong></div><br />评注：</strong><br /><br />本篇日志源自《工业人的未来》第4章“20世纪的工业现实”第3节的最后两段。不仔细阅读原书整个章节，将很难准确把握德鲁克的本意。<br /><br />“合法性”对应“Legitimacy”，从上下文看，此处解释为“合理性”更贴近原意。德鲁克认为，20世纪的工业社会遇到了很大危机，虽然大部分人都获得了经济保障，经济满足也确实是社会稳定的基础，但是单纯的经济满足，会给社会和政治带来消极影响。解决这个问题，需要从工业社会过渡到功能社会，其先决条件之一，是个人和社会的相互融合。粗略地说，当个人真正融入社会之中，成为社会的主人，不再是游离于主流社会的旁观者，就能主动承担起更多的责任，人和社会才能和谐共存。<br /><br />牛根生在论述“承担社会责任是企业的第一要务”时，给出了五个要点：无责任则无品牌，不承担责任的品牌大不了；大品牌伴随大监督；大品牌关联大市场，与整个行业共进退，就要承担更大的责任；大责任通向大舞台，责任有多大舞台就有多大；大品牌责系大人群等等。<br /><br />谈论社会责任，容易被指责为做秀，其实这更加昭示着一个企业家的视野和格局。无论是巧取豪夺，还是诚信务实，企业要想永续经营，终归要和社会和睦相处。企业承担更多社会责任，融于所处的社区和社会之中，这是企业存在和发展的“合理性”。<br /><br />员工之于企业，和企业之于社会，有很多相似之处。薪水是员工稳定的基础，但是单纯的经济满足，很容易让员工成为企业的旁观者。得过且过，缺乏激情和效率，最终演变为劳资之间的对抗和对立。这是一个双输的结果，企业一无所得，员工职业失败。<br /><br />要避免员工麻木不仁，最有效的方法，就是让员工真正融入企业之中。和企业相融，才能承担更多责任，焕发更多热情。淘宝网在招聘启示中说“来加入我们吧！如果你接受我们的苦和乐，如果你想战斗而不是糊口！”。连糊口都不屑考虑，一心一意渴望战斗，真要建立了这样一支队伍，有什么事业不敢去做呢。<br /><br />企业的社会责任，靠企业家的心智和视野；员工的企业责任，靠什么来引导呢。是企业的使命，还是管理者的个人魅力；是高薪加期权，还是大棒加忽悠？估计没有谁能给出明确的答案。或许，失败的企业总是相似的，成功的企业各有各的高招。
          <br/>
          <span style="color:red;">
            <a href="http://wainwen.javaeye.com/blog/219449#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 12:52:12 +0800</pubDate>
        <link>http://wainwen.javaeye.com/blog/219449</link>
        <guid>http://wainwen.javaeye.com/blog/219449</guid>
      </item>
      <item>
        <title>haproxy支持4层交换的规则了</title>
        <author>mryufeng</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mryufeng.javaeye.com">mryufeng</a>&nbsp;
          链接：<a href="http://mryufeng.javaeye.com/blog/219434" style="color:red;">http://mryufeng.javaeye.com/blog/219434</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          July 20th, 2008 : two lines...<br /><br />      Two lines... That's all what is needed with the new TCP content inspection system to stop half of the spams I got home. One of my major customers who uses HAProxy a lot has sponsored the development of some preliminary content inspection which is used to decide whether to forward a connection or not. The very first usage of this feature consists in checking that only SSL is spoken on a connection. But most likely more protocols will come soon. As a nice side effect, I could now add a delay before the HELO message of my SMTP server, and reject all robots which talk first (forbidden). And since many spam bots have small timeout values, many of them abort before the timeout is reached, resulting in my incoming spam rate dropping from about 300/hour to "only" 150/hour. Those who keep up with the time out slow down due to limited resources. The small addition simply consists in adding those two lines in the frontend :<br /><br />      		tcp-request inspect-delay  35s<br />      		tcp-request content reject if REQ_CONTENT<br />      	<br />在process_cli中增加了一个状态CL_STINSPECT用于处理4层数据规则的状态，这样就很容易根据tcp的内容做判断决定拒绝连接或者如何转发后端等事务。<br />强！
          <br/>
          <span style="color:red;">
            <a href="http://mryufeng.javaeye.com/blog/219434#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 12:23:03 +0800</pubDate>
        <link>http://mryufeng.javaeye.com/blog/219434</link>
        <guid>http://mryufeng.javaeye.com/blog/219434</guid>
      </item>
      <item>
        <title>电子书更新(Spring,Hibernate,Django,Terracot 2008-07-25）</title>
        <author>iMzw</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://nealmi.javaeye.com">iMzw</a>&nbsp;
          链接：<a href="http://nealmi.javaeye.com/blog/219396" style="color:red;">http://nealmi.javaeye.com/blog/219396</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="line-height: 18px; font-family: Arial;">
<pre><span style="color: #ff0000;">PS:如无特殊说明以下都为英文版。</span>

如果有能力，请尽量购买纸板书籍。</pre>
</span>
</p>
<h3><span style="line-height: 18px; font-family: Arial;">
</span>
</h3>
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; color: black; padding: 0px;"><span><span style="line-height: 18px; font-family: Arial;">
</span>
</span>
</h3>
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; color: black; padding: 0px;">Spring &amp; Hibernate</h3>
<p><span><span style="line-height: 18px; font-family: Arial;">
<p><span style="line-height: 18px; font-family: Arial;"><span style="line-height: 18px; font-family: Arial;"><span style="color: #ff0000;">(2008-07-25 Update)</span>
</span>
</span>
</p>
<p><a href="http://cn.ziddu.com/downloadfile/197982/APRESS.Terracotta.2008.PDF.html "><span class="tahoma12"><strong>APRESS.Terracotta.2008.PDF</strong>
</span>
</a>
</p>
<p><a href="http://cn.ziddu.com/downloadfile/198016/Apress_Spring_Recipes_Jun_2008.PDF.html"><span class="tahoma12"><strong>Apress_Spring_Recipes_Jun_2008.PDF</strong>
</span>
</a>
</p>
<p><a href="http://cn.ziddu.com/download/198083/OReilly_Harnessing_Hibernate_Apr_2008.zip.html"><span class="tahoma11">			                       OReilly_Harnessing_Hibernate_Apr_2008.zip										
					</span>
</a>
</p>
</span>
</span>
</p>
<h3><a href="http://cn.ziddu.com/downloadfile/198000/Apress_Beginning_Groovy_and_Grails_Jun_2008.PDF.html"><span style="line-height: 18px; font-family: Arial;">
</span>
</a>
</h3>
<p><span style="line-height: 18px; font-family: Arial;">
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; color: black; padding: 0px;"><strong style="font-weight: bold;">Flex ActionScript</strong>
&nbsp;<br />
</h3>
<p style="padding: 0px; margin: 0px;"><a href="http://cn.ziddu.com/downloadlink.php?uid=ZqyemJ2ma6%2Bh4palY7KWlJmiZqqbm5k%3D3" style="color: black; text-decoration: underline;">Wiley.ActionScript.3.0.Bible.Oct.2007.pdf</a>
</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<p style="padding: 0px; margin: 0px;"><span style="color: #ff0000;">(2008-06-08 Update)</span>
</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<p style="font: normal normal normal 12px/normal 'Lucida Grande'; padding: 0px; margin: 0px;"><a href="http://cn.ziddu.com/downloadlink.php?uid=Z6yflZSobaqgluKnZqqhkZSrY6qhnZiq6" style="color: black; text-decoration: underline;">Advanced ActionScript 3 with Design Patterns - 2006 (Adobe).chm.zip&nbsp;</a>
</p>
<p style="padding: 0px; margin: 0px;"><span style="font-family: Arial;"><a href="http://cn.ziddu.com/downloadlink.php?uid=bqqalJuoaKqdnJSltKyZlJyiZrCWlJyr6" style="color: black; text-decoration: underline;"><span style="text-decoration: none;"><span style="font-size: small;">OReilly.ActionScript.3.0.Cookbook.Oct.2006.chm.zip </span>
</span>
</a>
</span>
</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; color: black; padding: 0px;"><strong style="font-weight: bold;">Groovy &amp; Grails</strong>
&nbsp;</h3>
<p><span style="line-height: 18px; font-family: Arial;"><span style="color: #ff0000;">(2008-07-25 Update)</span>
</span>
<span><span style="line-height: 18px; font-family: Arial;"><span class="tahoma12"><strong></strong>
</span>
</span>
</span>
</p>
<p><a href="http://cn.ziddu.com/download/198000/Apress_Beginning_Groovy_and_Grails_Jun_2008.PDF.html"><span><span style="line-height: 18px; font-family: Arial;"><span class="tahoma12"><strong>Apress_Beginning_Groovy_and_Grails_Jun_2008.PDF</strong>
</span>
</span>
</span>
</a>
</p>
<p><span><span><span><a href="http://cn.ziddu.com/downloadfile/198000/Apress_Beginning_Groovy_and_Grails_Jun_2008.PDF.html"><strong></strong>
</a>
<strong><span style="line-height: 18px; font-family: Arial;">
<p><span>
</span>
(initial)</p>
</span>
</strong>
</span>
</span>
</span>

</p>
</span>
</p>
<h3><span><span><span><a href="http://cn.ziddu.com/downloadfile/198000/Apress_Beginning_Groovy_and_Grails_Jun_2008.PDF.html"><strong><span style="line-height: 18px; font-family: Arial;">
</span>
</strong>
</a>
</span>
</span>
</span>
</h3>
<p><span style="line-height: 18px; font-family: Arial;">
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<p style="padding: 0px; margin: 0px;"><a href="http://cn.ziddu.com/downloadlink.php?uid=ZbOdm5SnY7KbmJbzZKqZnJGlZ6eclJY%3D2" style="color: black; text-decoration: underline;">The.Definitive.Guide.to.Grails.Dec.2006.eBook-BBL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .pdf</a>
</p>
<p style="padding: 0px; margin: 0px;"><a href="http://cn.ziddu.com/downloadlink.php?uid=Z6yemZesa6%2Bh4palZLKWlJmiZ6qbm5U%3D4" style="color: black; text-decoration: underline;">TheDefinitiveGuideToGrails1590597583SourceCode.zip</a>
</p>
<p style="padding: 0px; margin: 0px;"><a href="http://cn.ziddu.com/downloadlink.php?uid=aqyZlpSpaq6h4palYrKWlJmiZaqfnJc%3D2" style="color: black; text-decoration: underline;">Groovy.Programming.Dec.2006.eBook-BBL.pdf</a>
</p>
<p style="padding: 0px; margin: 0px;"><a href="http://cn.ziddu.com/downloadlink.php?uid=Z7KhlpSnYrKdmJzzY6qZnJGlZqeclJw%3D1" style="color: black; text-decoration: underline;">Groovy.in.Action.Jan.2007.eBook-BBL.pdf</a>
</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; color: black; padding: 0px;">Design Pattern</h3>
<p style="padding: 0px; margin: 0px;"><span style="color: #ff0000;">(2008-06-08 Update)</span>
</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<p style="font: normal normal normal 12px/normal 'Lucida Grande'; padding: 0px; margin: 0px;"><a href="http://cn.ziddu.com/downloadlink.php?uid=brKgm5ylcLCglpzza6qZnJGlb6eZnJo%3D9" style="color: black; text-decoration: underline;">O'Reilly - Head First Object-Oriented Design and Analysis.pdf</a>
</p>
<p style="font: normal normal normal 12px/normal 'Lucida Grande'; padding: 0px; margin: 0px;">&nbsp;</p>
<p style="font: normal normal normal 12px/normal 'Lucida Grande'; padding: 0px; margin: 0px;"><span><span style="line-height: 18px; font-family: Arial;">
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; color: black; padding: 0px;">Python / Django<br />
</h3>
<p><span style="line-height: 18px; font-family: Arial;"><span style="line-height: 18px; font-family: Arial;"><span style="color: #ff0000;">(2008-07-25 Update)</span>
</span>
</span>
</p>
</span>
</span>
</p>
<p style="padding: 0px; margin: 0px;"><a href="http://cn.ziddu.com/downloadfile/198009/Apress_Practical_Django_Projects_Jun_2008.PDF.html"><span class="tahoma11">Apress_Practical_Django_Projects_Jun_2008.PDF</span>
</a>
</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; color: black; padding: 0px;"><strong style="font-weight: bold;">Other</strong>
</h3>
<p>(initail)</p>
<p style="padding: 0px; margin: 0px;"><a href="http://cn.ziddu.com/downloadlink.php?uid=bKyalZSuaqyZnZatsayZlJyiY6%2BWl5Sn3" style="color: black; text-decoration: underline;">OReilly.Beautiful.Code.Jun.2007.pdf</a>
</p>
<p style="padding: 0px; margin: 0px;"><a href="http://cn.ziddu.com/downloadlink.php?uid=aLKfnZ2qbKualpzzZaqZnJGlaKeclJY%3D3" style="color: black; text-decoration: underline;">Pragmatic.Release.It.Design.and.Deploy.Production.Ready.Software.Apr.2007.eBook-BBL</a>
</p>
</span>
</p>
          <br/>
          <span style="color:red;">
            <a href="http://nealmi.javaeye.com/blog/219396#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 11:35:11 +0800</pubDate>
        <link>http://nealmi.javaeye.com/blog/219396</link>
        <guid>http://nealmi.javaeye.com/blog/219396</guid>
      </item>
      <item>
        <title>JAVA面试题解惑系列（八）——聊聊基本类型（内置类型）</title>
        <author>臧圩人</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zangweiren.javaeye.com">臧圩人</a>&nbsp;
          链接：<a href="http://zangweiren.javaeye.com/blog/219369" style="color:red;">http://zangweiren.javaeye.com/blog/219369</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          作者：臧圩人（zangweiren）<br />网址：http://zangweiren.javaeye.com<br /><br />>>><span style="color: red"><strong>转载请注明出处！</strong></span>&lt;&lt;&lt;<br /><br />基本类型，或者叫做内置类型，是JAVA中不同于类的特殊类型。它们是我们编程中使用最频繁的类型，因此面试题中也总少不了它们的身影，在这篇文章中我们将从面试中常考的几个方面来回顾一下与基本类型相关的知识。<br /><br />基本类型共有八种，它们分别都有相对应的包装类。关于它们的详细信息请看下表：<br /><br /><img src="http://zangweiren.javaeye.com/upload/picture/pic/18450/8071c6c2-7cfb-3783-829a-a6abb3ae55e5.jpg " /><br /><br />基本类型可以分为三类，字符类型char，布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。JAVA中的数值类型不存在无符号的，它们的取值范围是固定的，不会随着机器硬件环境或者操作系统的改变而改变。实际上，JAVA中还存在另外一种基本类型void，它也有对应的包装类java.lang.Void，不过我们无法直接对它们进行操作。对于数值类型的基本类型的取值范围，我们无需强制去记忆，因为它们的值都已经以常量的形式定义在对应的包装类中了。请看下面的例子：<br /><pre name="code" class="java">
public class PrimitiveTypeTest {
	public static void main(String[] args) {
		// byte
		System.out.println("基本类型：byte 二进制位数：" + Byte.SIZE);
		System.out.println("包装类：java.lang.Byte");
		System.out.println("最小值：Byte.MIN_VALUE=" + Byte.MIN_VALUE);
		System.out.println("最大值：Byte.MAX_VALUE=" + Byte.MAX_VALUE);
		System.out.println();

		// short
		System.out.println("基本类型：short 二进制位数：" + Short.SIZE);
		System.out.println("包装类：java.lang.Short");
		System.out.println("最小值：Short.MIN_VALUE=" + Short.MIN_VALUE);
		System.out.println("最大值：Short.MAX_VALUE=" + Short.MAX_VALUE);
		System.out.println();

		// int
		System.out.println("基本类型：int 二进制位数：" + Integer.SIZE);
		System.out.println("包装类：java.lang.Integer");
		System.out.println("最小值：Integer.MIN_VALUE=" + Integer.MIN_VALUE);
		System.out.println("最大值：Integer.MAX_VALUE=" + Integer.MAX_VALUE);
		System.out.println();

		// long
		System.out.println("基本类型：long 二进制位数：" + Long.SIZE);
		System.out.println("包装类：java.lang.Long");
		System.out.println("最小值：Long.MIN_VALUE=" + Long.MIN_VALUE);
		System.out.println("最大值：Long.MAX_VALUE=" + Long.MAX_VALUE);
		System.out.println();

		// float
		System.out.println("基本类型：float 二进制位数：" + Float.SIZE);
		System.out.println("包装类：java.lang.Float");
		System.out.println("最小值：Float.MIN_VALUE=" + Float.MIN_VALUE);
		System.out.println("最大值：Float.MAX_VALUE=" + Float.MAX_VALUE);
		System.out.println();

		// double
		System.out.println("基本类型：double 二进制位数：" + Double.SIZE);
		System.out.println("包装类：java.lang.Double");
		System.out.println("最小值：Double.MIN_VALUE=" + Double.MIN_VALUE);
		System.out.println("最大值：Double.MAX_VALUE=" + Double.MAX_VALUE);
		System.out.println();

		// char
		System.out.println("基本类型：char 二进制位数：" + Character.SIZE);
		System.out.println("包装类：java.lang.Character");
		// 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
		System.out.println("最小值：Character.MIN_VALUE="
				+ (int) Character.MIN_VALUE);
		// 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
		System.out.println("最大值：Character.MAX_VALUE="
				+ (int) Character.MAX_VALUE);
	}
}</pre><br />运行结果：<br /><ol><li>基本类型：byte 二进制位数：8</li><li>包装类：java.lang.Byte</li><li>最小值：Byte.MIN_VALUE=-128</li><li>最大值：Byte.MAX_VALUE=127</li><li></li><li>基本类型：short 二进制位数：16</li><li>包装类：java.lang.Short</li><li>最小值：Short.MIN_VALUE=-32768</li><li>最大值：Short.MAX_VALUE=32767</li><li></li><li>基本类型：int 二进制位数：32</li><li>包装类：java.lang.Integer</li><li>最小值：Integer.MIN_VALUE=-2147483648</li><li>最大值：Integer.MAX_VALUE=2147483647</li><li></li><li>基本类型：long 二进制位数：64</li><li>包装类：java.lang.Long</li><li>最小值：Long.MIN_VALUE=-9223372036854775808</li><li>最大值：Long.MAX_VALUE=9223372036854775807</li><li></li><li>基本类型：float 二进制位数：32</li><li>包装类：java.lang.Float</li><li>最小值：Float.MIN_VALUE=1.4E-45</li><li>最大值：Float.MAX_VALUE=3.4028235E38</li><li></li><li>基本类型：double 二进制位数：64</li><li>包装类：java.lang.Double</li><li>最小值：Double.MIN_VALUE=4.9E-324</li><li>最大值：Double.MAX_VALUE=1.7976931348623157E308</li><li></li><li>基本类型：char 二进制位数：16</li><li>包装类：java.lang.Character</li><li>最小值：Character.MIN_VALUE=0</li><li>最大值：Character.MAX_VALUE=65535</li></ol><br />Float和Double的最小值和最大值都是以科学记数法的形式输出的，结尾的“E+数字”表示E之前的数字要乘以10的多少倍。比如3.14E3就是3.14×1000=3140，3.14E-3就是3.14/1000=0.00314。<br /><br />大家将运行结果与上表信息仔细比较就会发现float、double两种类型的最小值与Float.MIN_VALUE、Double.MIN_VALUE的值并不相同，这是为什么呢？实际上Float.MIN_VALUE和Double.MIN_VALUE分别指的是float和double类型所能表示的最小正数。也就是说存在这样一种情况，0到±Float.MIN_VALUE之间的值float类型无法表示，0到±Double.MIN_VALUE之间的值double类型无法表示。这并没有什么好奇怪的，因为这些范围内的数值超出了它们的精度范围。<br /><br />基本类型存储在栈中，因此它们的存取速度要快于存储在堆中的对应包装类的实例对象。从Java5.0（1.5）开始，JAVA虚拟机（Java Virtual Machine）可以完成基本类型和它们对应包装类之间的自动转换。因此我们在赋值、参数传递以及数学运算的时候像使用基本类型一样使用它们的包装类，但这并不意味着你可以通过基本类型调用它们的包装类才具有的方法。另外，所有基本类型（包括void）的包装类都使用了final修饰，因此我们无法继承它们扩展新的类，也无法重写它们的任何方法。<br /><br />各种数值类型之间的赋值与转换遵循什么规律呢？我们来看下面这个例子：<br /><pre name="code" class="java">
public class PrimitiveTypeTest {
	public static void main(String[] args) {
		// 给byte类型变量赋值时，数字后无需后缀标识
		byte byte_a = 1;
		// 编译器会做范围检查，如果赋予的值超出了范围就会报错
		// byte byte_b = 1000;
		// 把一个long型值赋值给byte型变量，编译时会报错，即使这个值没有超出byte类型的取值范围
		// byte byte_c = 1L;

		// 给short类型变量赋值时，数字后无需后缀标识
		short short_a = 1;
		// 编译器会做范围检查，如果赋予的值超出了范围就会报错
		// short short_b = 70000;
		// 把一个long型值赋值给short型变量，编译时会报错，即使这个值没有超出short类型的取值范围
		// byte short_c = 1L;

		// 给short类型变量赋值时，数字后无需后缀标识
		int int_a = 1;
		// 编译器会做范围检查，如果赋予的值超出了范围就会报错
		// int int_b = 2200000000;
		// 把一个long型值赋值给int型变量，编译时会报错，即使这个值没有超出int类型的取值范围
		// int int_c = 1L;

		// 可以把一个int型值直接赋值给long型变量，数字后无需后缀标识
		long long_a = 1;
		// 如果给long型变量赋予的值超出了int型值的范围，数字后必须加L（不区分大小写）标识
		long long_b = 2200000000L;
		// 编译器会做范围检查，如果赋予的值超出了范围就会报错
		// long long_c = 9300000000000000000L;

		// 可以把一个int型值直接赋值给float型变量
		float float_a = 1;
		// 可以把一个long型值直接赋值给float型变量
		float float_b = 1L;
		// 没有F（不区分大小写）后缀标识的浮点数默认为double型的，不能将它直接赋值给float型变量
		// float float_c = 1.0;
		// float型数值需要有一个F（不区分大小写）后缀标识
		float float_d = 1.0F;
		// 把一个double型值赋值给float型变量，编译时会报错，即使这个值没有超出float类型的取值范围
		// float float_e = 1.0D;
		// 编译器会做范围检查，如果赋予的值超出了范围就会报错
		// float float_f = 3.5000000E38F;

		// 可以把一个int型值直接赋值给double型变量
		double double_a = 1;
		// 可以把一个long型值直接赋值给double型变量
		double double_b = 1L;
		// 可以把一个float型值直接赋值给double型变量
		double double_c = 1F;
		// 不带后缀标识的浮点数默认为double类型的，可以直接赋值
		double double_d = 1.0;
		// 也可以给数字增加一个D（不区分大小写）后缀标识，明确标出它是double类型的
		double double_e = 1.0D;
		// 编译器会做范围检查，如果赋予的值超出了范围就会报错
		// double double_f = 1.8000000000000000E308D;

		// 把一个double型值赋值给一个byte类型变量，编译时会报错，即使这个值没有超出byte类型的取值范围
		// byte byte_d = 1.0D;
		// 把一个double型值赋值给一个short类型变量，编译时会报错，即使这个值没有超出short类型的取值范围
		// short short_d = 1.0D;
		// 把一个double型值赋值给一个int类型变量，编译时会报错，即使这个值没有超出int类型的取值范围
		// int int_d = 1.0D;
		// 把一个double型值赋值给一个long类型变量，编译时会报错，即使这个值没有超出long类型的取值范围
		// long long_d = 1.0D;

		// 可以用字符初始化一个char型变量
		char char_a = 'a';
		// 也可以用一个int型数值初始化char型变量
		char char_b = 1;
		// 把一个long型值赋值给一个char类型变量，编译时会报错，即使这个值没有超出char类型的取值范围
		// char char_c = 1L;
		// 把一个float型值赋值给一个char类型变量，编译时会报错，即使这个值没有超出char类型的取值范围
		// char char_d = 1.0F;
		// 把一个double型值赋值给一个char类型变量，编译时会报错，即使这个值没有超出char类型的取值范围
		// char char_e = 1.0D;
		// 编译器会做范围检查，如果赋予的值超出了范围就会报错
		// char char_f = 70000;
	}
}
</pre><br />从上面的例子中我们可以得出如下几条结论：<br /><ol><li>未带有字符后缀标识的整数默认为int类型；未带有字符后缀标识的浮点数默认为double类型。</li><li>如果一个整数的值超出了int类型能够表示的范围，则必须增加后缀“L”（不区分大小写，建议用大写，因为小写的L与阿拉伯数字1很容易混淆），表示为long型。</li><li>带有“F”（不区分大小写）后缀的整数和浮点数都是float类型的；带有“D”（不区分大小写）后缀的整数和浮点数都是double类型的。</li><li>编译器会在编译期对byte、short、int、long、float、double、char型变量的值进行检查，如果超出了它们的取值范围就会报错。</li><li>int型值可以赋给所有数值类型的变量；long型值可以赋给long、float、double类型的变量；float型值可以赋给float、double类型的变量；double型值只能赋给double类型变量。</li></ol><br />下图显示了几种基本类型之间的默认逻辑转换关系：<br /><img src="http://zangweiren.javaeye.com/upload/picture/pic/18486/8388f0c6-72f8-3487-b470-aeec80b60775.jpg" /><br />图中的实线表示无精度损失的转换，而虚线则表示这样的转换可能会损失一定的精度。如果我们想把一个能表示更大范围或者更高精度的类型，转换为一个范围更小或者精度更低的类型时，就需要使用强制类型转换（Cast）了。不过我们要尽量避免这种用法，因为它常常引发错误。请看下面的例子，如果不运行代码，你能预测它的结果吗？<br /><pre name="code" class="java">
public class PrimitiveTypeTest {
	public static void main(String[] args) {
		int a = 123456;
		short b = (short) a;
		// b的值会是什么呢？
		System.out.println(b);
	}
}
</pre><br />运行结果：<br /><ol><li>-7616</li></ol><br /><em><strong><span style="font-size: medium">运算符对基本类型的影响</span></strong></em><br /><br />当使用+、-、*、/、%运算符对基本类型进行运算时，遵循如下规则：<br /><ol><li>只要两个操作数中有一个是double类型的，另一个将会被转换成double类型，并且结果也是double类型；</li><li>否则，只要两个操作数中有一个是float类型的，另一个将会被转换成float类型，并且结果也是float类型；</li><li>否则，只要两个操作数中有一个是long类型的，另一个将会被转换成long类型，并且结果也是long类型；</li><li>否则，两个操作数（包括byte、short、int、char）都将会被转换成int类型，并且结果也是int类型。</li></ol><br />当使用+=、-=、*=、/=、%=、运算符对基本类型进行运算时，遵循如下规则：<br /><ul><li>运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型，然后再执行运算，且运算结果与运算符右边数值类型相同。</li></ul><br />了解了这些，我们就能解答下面这个常考的面试题了。请看：<br /><div class="quote_title">引用</div><div class="quote_div">short s1=1;s1=s1+1;有什么错？short s1=1;s1+=1;有什么错？</div><br />乍一看，觉得它们都应该没有错误，可以正常运行。我们来写个例子试试：<br /><pre name="code" class="java">
public class PrimitiveTypeTest {
	public static void main(String[] args) {
		short s1 = 1;
		// 这一行代码会报编译错误
		// s1 = s1 + 1;
		// 这一行代码没有报错
		s1 = 1 + 1;
		// 这一行代码也没有报错
		s1 += 1;
	}
}
</pre><br />从例子中我们可以看出结果了。利用上面列举的规律，也很容易解释。在s1=s1+1;中，s1+1运算的结果是int型，把它赋值给一个short型变量s1，所以会报错；而在s1+=1;中，由于是s1是short类型的，所以1首先被强制转换为short型，然后再参与运算，并且结果也是short类型的，因此不会报错。那么，s1=1+1;为什么不报错呢？这是因为1+1是个编译时可以确定的常量，“+”运算在编译时就被执行了，而不是在程序执行的时候，这个语句的效果等同于s1=2，所以不会报错。前面讲过了，对基本类型执行强制类型转换可能得出错误的结果，因此在使用+=、-=、*=、/=、%=等运算符时，要多加注意。<br /><br /><em><strong><span style="font-size: medium">Math.round()方法</span></strong></em><br /><br />java.lang.Math类里有两个round()方法，它们的定义如下：<br /><pre name="code" class="java">
public static int round(float a) {
    //other code
}

public static long round(double a) {
    //other code
}
</pre><br />它们的返回值都是整数，且都采用四舍五入法。运算规则如下：<br /><ol><li>如果参数为正数，且小数点后第一位>=5，运算结果为参数的整数部分+1。</li><li>如果参数为负数，且小数点后第一位>5，运算结果为参数的整数部分-1。</li><li>如果参数为正数，且小数点后第一位&lt;5；或者参数为负数，且小数点后第一位&lt;=5，运算结果为参数的整数部分。</li></ol><br />我们可以通过下面的例子来验证：<br /><pre name="code" class="java">
public class MathTest {
	public static void main(String[] args) {
		System.out.println("小数点后第一位=5");
		System.out.println("正数：Math.round(11.5)=" + Math.round(11.5));
		System.out.println("负数：Math.round(-11.5)=" + Math.round(-11.5));
		System.out.println();

		System.out.println("小数点后第一位&lt;5");
		System.out.println("正数：Math.round(11.46)=" + Math.round(11.46));
		System.out.println("负数：Math.round(-11.46)=" + Math.round(-11.46));
		System.out.println();

		System.out.println("小数点后第一位>5");
		System.out.println("正数：Math.round(11.68)=" + Math.round(11.68));
		System.out.println("负数：Math.round(-11.68)=" + Math.round(-11.68));
	}
}
</pre><br />运行结果：<br /><ol><li>小数点后第一位=5</li><li>正数：Math.round(11.5)=12</li><li>负数：Math.round(-11.5)=-11</li><li></li><li>小数点后第一位&lt;5</li><li>正数：Math.round(11.46)=11</li><li>负数：Math.round(-11.46)=-11</li><li></li><li>小数点后第一位>5</li><li>正数：Math.round(11.68)=12</li><li>负数：Math.round(-11.68)=-12</li></ol><br />根据上面例子的运行结果，我们还可以按照如下方式总结，或许更加容易记忆：<br /><ol><li>参数的小数点后第一位&lt;5，运算结果为参数整数部分。</li><li>参数的小数点后第一位>5，运算结果为参数整数部分绝对值+1，符号（即正负）不变。</li><li>参数的小数点后第一位=5，正数运算结果为整数部分+1，负数运算结果为整数部分。</li></ol><br /><em><strong><span style="font-size: medium">switch语句</span></strong></em><br /><br />哪些类型可以用于switch语句的判断呢？我们做个测试就知道了：<br /><pre name="code" class="java">
public class MathTest {
	// 枚举类型，Java5.0以上版本可用
	static enum enum_e {
		A, B
	}

	public static void main(String[] args) {
		// byte
		byte byte_n = 0;
		switch (byte_n) {
		case 0:
			System.out.println("byte可以用于switch语句");
			break;
		}

		// Byte类
		Byte byte_m = 0;
		// 需要Java5.0（1.5）以上版本支持
		switch (byte_m) {
		case 0:
			System.out.println("Byte类可以用于switch语句");
			System.out.println();
			break;
		}

		// char
		char char_n = 0;
		switch (char_n) {
		case 0:
			System.out.println("char可以用于switch语句");
			break;
		}

		// Character类
		Character char_m = 0;
		// 需要Java5.0（1.5）以上版本支持
		switch (char_m) {
		case 0:
			System.out.println("Character类可以用于switch语句");
			System.out.println();
			break;
		}

		// short
		short short_n = 0;
		switch (short_n) {
		case 0:
			System.out.println("short可以用于switch语句");
			break;
		}

		// Short
		Short short_m = 0;
		// 需要Java5.0（1.5）以上版本支持
		switch (short_m) {
		case 0:
			System.out.println("Short类可以用于switch语句");
			System.out.println();
			break;
		}

		// int
		int int_n = 0;
		switch (int_n) {
		case 0:
			System.out.println("int可以用于switch语句");
			break;
		}

		// Integer类
		Integer int_m = 0;
		// 需要Java5.0（1.5）以上版本支持
		switch (int_m) {
		case 0:
			System.out.println("Integer类可以用于switch语句");
			System.out.println();
			break;
		}

		// long
		long long_n = 0;
		// 编译错误，long型不能用于switch语句
		// switch (long_n) {
		// case 0:
		// System.out.println("long可以用于switch语句");
		// break;
		// }

		// Long类
		Long long_m = 0L;
		// 编译错误，Long类型不能用于switch语句
		// switch (long_m) {
		// case 0:
		// System.out.println("Long类可以用于switch语句");
		// System.out.println();
		// break;
		// }

		// float
		float float_n = 0.0F;
		// 编译错误，float型不能用于switch语句
		// switch (float_n) {
		// case 0.0F:
		// System.out.println("float可以用于switch语句");
		// break;
		// }

		// Float类
		Float float_m = 0.0F;
		// 编译错误，Float类型不能用于switch语句
		// switch (float_m) {
		// case 0.0F:
		// System.out.println("Float类可以用于switch语句");
		// System.out.println();
		// break;
		// }

		// double
		double double_n = 0.0;
		// 编译错误，double型不能用于switch语句
		// switch (double_n) {
		// case 0.0:
		// System.out.println("double可以用于switch语句");
		// break;
		// }

		// Double类
		Double double_m = 0.0;
		// 编译错误，Double类型不能用于switch语句
		// switch (double_m) {
		// case 0.0:
		// System.out.println("Double类可以用于switch语句");
		// System.out.println();
		// break;
		// }

		// boolean
		boolean bool_b = true;
		// 编译错误，boolean型不能用于switch语句
		// switch (bool_b) {
		// case true:
		// System.out.println("boolean可以用于switch语句");
		// break;
		// }

		// Boolean类
		Boolean bool_l = true;
		// 编译错误，Boolean类型不能用于switch语句
		// switch (bool_l) {
		// case true:
		// System.out.println("Boolean类可以用于switch语句");
		// System.out.println();
		// break;
		// }

		// String对象
		String string_s = "Z";
		// 编译错误，long型不能用于switch语句
		// switch (string_s) {
		// case "Z":
		// System.out.println("String可以用于switch语句");
		// System.out.println();
		// break;
		// }

		// enum（枚举类型，Java5.0以上版本可用）
		switch (MathTest.enum_e.A) {
		case A:
			System.out.println("enum可以用于switch语句-A");
			break;
		case B:
			System.out.println("enum可以用于switch语句-B");
			break;
		}
	}
}
</pre><br />运行结果如下：<br /><ol><li>byte可以用于switch语句</li><li>Byte类可以用于switch语句</li><li></li><li>char可以用于switch语句</li><li>Character类可以用于switch语句</li><li></li><li>short可以用于switch语句</li><li>Short类可以用于switch语句</li><li></li><li>int可以用于switch语句</li><li>Integer类可以用于switch语句</li><li></li><li>enum可以用于switch语句-A</li></ol><br />结果已经出来了，我们来总结一下：<br /><ol><li>byte、char、short、int四种基本类型以及它们的包装类（需要Java5.0/1.5以上版本支持）都可以用于switch语句。</li><li>long、float、double、boolean四种基本类型以及它们的包装类（在Java所有版本中）都不能用于switch语句。</li><li>enum类型，即枚举类型可以用于switch语句，但是要在Java5.0（1.5）版本以上才支持。</li><li>所有类型的对象（包括String类，但在Java5.0/1.5以上版本中，该项要排除byte、char、short、int四种基本类型对应的包装类）都不能用于switch语句。</li></ol>
          <br/>
          <span style="color:red;">
            <a href="http://zangweiren.javaeye.com/blog/219369#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 10:24:25 +0800</pubDate>
        <link>http://zangweiren.javaeye.com/blog/219369</link>
        <guid>http://zangweiren.javaeye.com/blog/219369</guid>
      </item>
      <item>
        <title>lucene 处理一对多关系</title>
        <author>hqman</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hqman.javaeye.com">hqman</a>&nbsp;
          链接：<a href="http://hqman.javaeye.com/blog/219337" style="color:red;">http://hqman.javaeye.com/blog/219337</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp; 项目开发中碰到这样一个问题 ：</p>
<p>&nbsp;</p>
<pre name="code" class="ruby"> 一个人有多种职业 教师（123），程序员（456）。 我要搜索 所有是 教师的人，或者是 教师 又是程序员的人。</pre>
<p>&nbsp;解决：</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 只要职业对应 job字段 多放几个Term，然后在搜索的时候 用 job： ＋123&nbsp; or job： ＋123 ＋456，就可以找出相应的人</p>
          <br/>
          <span style="color:red;">
            <a href="http://hqman.javaeye.com/blog/219337#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 09:55:06 +0800</pubDate>
        <link>http://hqman.javaeye.com/blog/219337</link>
        <guid>http://hqman.javaeye.com/blog/219337</guid>
      </item>
      <item>
        <title>IT路况：马云的冬天穿裤衩</title>
        <author>皆 乐</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhanglei14616-163-com.javaeye.com">皆 乐</a>&nbsp;
          链接：<a href="http://zhanglei14616-163-com.javaeye.com/blog/219335" style="color:red;">http://zhanglei14616-163-com.javaeye.com/blog/219335</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          马云的冬天穿裤衩<br /><br />啥叫全球变暖了？<br /><br />想当年，深圳，华为的冬天穿棉袄，<br /><br />现在啊，杭州，马云的冬天穿裤衩。<br /><br /> <br /><br />啥叫内部邮件外泄啊？<br /><br />想当年，裤衩是穿在裙子里的，<br /><br />现在啊，MM流行内衣外穿。<br /><br /> <br /><br />啥叫危机公关啊？<br /><br />想当年，我们组织淘宝网专家舆论研讨北京市工商局网上办照对电子商务的严重危害。<br /><br />现在啊，我们冬天穿裤衩，转移阿里巴巴股价视线。<br /><br />（我们是内衣外穿啊，别光穿一条内裤斗严寒）<br /><br /> <br /><br />啥叫周鸿祎的概念游戏啊？<br /><br />想当年，那是KESO点评360杀毒免费就是要砸瑞星的饭碗。<br /><br />现在啊，我们叫奇虎的冬天。<br /><br /> <br /><br />啥叫冬天啊？<br /><br />想当年，那是搜狐奥运独家资源抢了新浪风头挣了大钱，陈彤的感觉。<br /><br />现在呢，我们老老实实为您提供每股实时行情中文版，就算你只会说山西话，也能把小煤窑，变成美元炒巨人的股票。<br /><br /> <br /><br />提问&回答：<br /><br />Q：阿里巴巴到底有没有冬天啊？<br /><br />A：你炒马云的股票吗？不炒！大哥，你就是春天啊。
          <br/>
          <span style="color:red;">
            <a href="http://zhanglei14616-163-com.javaeye.com/blog/219335#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 09:45:51 +0800</pubDate>
        <link>http://zhanglei14616-163-com.javaeye.com/blog/219335</link>
        <guid>http://zhanglei14616-163-com.javaeye.com/blog/219335</guid>
      </item>
      <item>
        <title>New version of the Groovy Eclipse plugin</title>
        <author>masterkey</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://masterkey.javaeye.com">masterkey</a>&nbsp;
          链接：<a href="http://masterkey.javaeye.com/blog/219326" style="color:red;">http://masterkey.javaeye.com/blog/219326</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p>Groovy Eclipse plugin已经更新。已经采用了Groovy 1.5.6,同时支持Eclipse3.4<br />
<br />
<br />
zip:<br />
<a href="http://dist.codehaus.org/groovy/distributions/update/GroovyEclipse.zip" target="_blank">http://dist.codehaus.org/groovy/distributions/update/GroovyEclipse.zip</a>
<br />
<br />
online update:<br />
<a href="http://dist.groovy.codehaus.org/distributions/update/" target="_blank">http://dist.groovy.codehaus.org/distributions/update/</a>
<br />
<br />
Upcoming version of the plugin will feature the first refactorings<br />
(extract method).<br />
You can discover more on the topic thanks to the students working on<br />
this project as part of their Bachelor thesis at University of applied<br />
sciences, in Rapperswil, Switzerland, here:<br />
<a href="http://sifsstud4.hsr.ch/trac/GroovyRefactoring" target="_blank">http://sifsstud4.hsr.ch/trac/GroovyRefactoring</a>
</p>
          <br/>
          <span style="color:red;">
            <a href="http://masterkey.javaeye.com/blog/219326#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 09:22:43 +0800</pubDate>
        <link>http://masterkey.javaeye.com/blog/219326</link>
        <guid>http://masterkey.javaeye.com/blog/219326</guid>
      </item>
      <item>
        <title>代码写来是用来读的</title>
        <author>Goodtiger</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://goodtiger.javaeye.com">Goodtiger</a>&nbsp;
          链接：<a href="http://goodtiger.javaeye.com/blog/219315" style="color:red;">http://goodtiger.javaeye.com/blog/219315</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>今天读了一些业务相关的代码，有一个类的方法达到了400多行，里面很多的判断语句，最多的if嵌套深度到达了5层，其实整个方法的业务逻辑并不是很复
杂，就是对调用请求进行一些检查，然后在每种情况下进行一些不同的处理，而且这些处理都比较的简单，但是糅合在一起的代码。却很多的问题<br />
<strong>一、很难直白的理解方法的意图</strong>
<br />
&nbsp;&nbsp;&nbsp;    虽然你可以从if语句的判断条件中读懂整个执行流程，但是这还是很费力的，如果碰到变量名取得不好，或者if判断中间是N个条件的组合判断，你就很难读了。<br />
<strong>二、为方法增加新的逻辑之后就很困难而且容易出错</strong>
<br />
&nbsp;&nbsp;&nbsp;    在众多的判断逻辑中要增加新的逻辑，最大的成本在于你要先读懂原有逻辑，最好是画出原有方法的顺序图，然后基于这个顺序图再来添加新的逻辑，但是基本上是不会有人这么做的，所以添加新的逻辑处理的时候，就基本上是Bug数量迅速增长的时候。<br />
<strong>三、方法难以测试</strong>
<br />
&nbsp;&nbsp;&nbsp;    因为判断逻辑很多，导致代码的执行路径很多，在编写测试用例的时候，做到路径覆盖也是很困难的。而且一旦方法的处理逻辑改变了比较大，基本上所有的测试用例都得重写。<br />
问题肯定还是很多的，简单的重构的方向<br />
<strong>一、将判断逻辑封装成方法</strong>
<br />
&nbsp;&nbsp;&nbsp;
这是最直接的想法，其实就是将复杂的处理逻辑分解成一个个小方法，然后再拼装起来，这样就可以克服上述3个缺点，如果封装的方法名取得得当，那么你就不需
要读懂if的复杂判断语句来理解方法所表达的业务处理逻辑，与此代码的增加新的逻辑就简单了，在较小的方法中进行修改就相对容易多了，但并不是绝对的。<br />
<strong>二、利用面向对象进行更深层次的封装</strong>
<br />
&nbsp;&nbsp;&nbsp;
如果代码中到处都是if的判断语句，那显然是面向过程的痕迹很重，我们可以深入的分析，将设计变得更加面向对象，对对象职责的细分，对象方法处理逻辑的简
化，对象之间的交互更简单直接些。其实这未必更加简单，需要付出的设计、重构的代价也很大。理解更多的对象之间的交互也不是一件简单的事情，但是在可扩展
性方面就更好。<br />
<br />
&nbsp;&nbsp;&nbsp;    没有拿实例代码来说明，但是道理还是很简单的，如果想要较小的成本在短时间内进行重构，那么就采用第一种方法，将判断逻辑封装成方法。想要在一个大的系统内得到更好的重构效果，就要重新考虑设计，进行设计到代码两层次的重构。</p>
          <br/>
          <span style="color:red;">
            <a href="http://goodtiger.javaeye.com/blog/219315#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 09:05:43 +0800</pubDate>
        <link>http://goodtiger.javaeye.com/blog/219315</link>
        <guid>http://goodtiger.javaeye.com/blog/219315</guid>
      </item>
      <item>
        <title>DOM 模型和 Prototype</title>
        <author>sunfengcheng</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sunfengcheng.javaeye.com">sunfengcheng</a>&nbsp;
          链接：<a href="http://sunfengcheng.javaeye.com/blog/219307" style="color:red;">http://sunfengcheng.javaeye.com/blog/219307</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="font-size: large"><span style="color: blue"> 今天介绍一下 DOM 模型和 Prototype框架的一些对象和类，<br /> 什么是 DOM模型 --Document Object Module 就是文档对象类型，可以看成是结构化的树形的数据<br /> ，闲言少叙书归正传，下面是我最近学习js搜集到的一些document的方法，很实用的。下面将介绍它包含的对象方法。<br /> <br />Element对象的方法：<br /><br />visible: function(element)：判断element是否可见, 参数element可以是元素本身或元素id(下面的方面的参数基本上都是这样的)<br /><br />toggle: function(element)：反转element的可见性<br /><br />hide: function(element)：隐藏元素<br /><br />show: function(element)：显示元素<br /><br />remove: function(element)：移除元素<br /><br />update: function(element, html) ：使用html更新element的内容，html中的script会执行(下同)<br /><br />replace: function(element, html)：将element替换为html<br /><br />inspect: function(element)：element的字符串表示<br /><br />Element对象的方法：<br /><br />visible: function(element)：判断element是否可见, 参数element可以是元素本身或元素id(下面的方面的参数基本上都是这样的)<br /><br />toggle: function(element)：反转element的可见性<br /><br />hide: function(element)：隐藏元素<br /><br />show: function(element)：显示元素<br /><br />remove: function(element)：移除元素<br /><br />update: function(element, html) ：使用html更新element的内容，html中的script会执行(下同)<br /><br />replace: function(element, html)：将element替换为html<br /><br />inspect: function(element)：element的字符串表示<br /><br />up(element, expression, index)：利用Selector.findElement方法找到element元素的祖先节点中符合表达式expression的所有元素组成的数组索引为index的元素，也可以忽略expression(默认为*，表示匹配所有元素)和index(默认为0)，直接这样调用up(element, index)或up(element)<br /><br />down(element, expression, index)：跟up一样，只是返回的是子孙节点<br /><br />previous(element, expression, index)：返回前面的兄弟节点<br /><br />next(element, expression, index)：返回后面的兄弟节点<br /><br />getElementsBySelector(element,args)：Selector.findChildElements(element, args)的封装，args表示可以传递多个参数，每个参数是一个css selector表达式，返回element的子孙节点中符合任何一个css selector表达式的元素组成的数组<br /><br />getElementsByClassName(element, className)：返回element中的子孙节点中符合clsssName的元素<br /><br />hasClassName: function(element, className) ：判断element是否含有className<br /><br />addClassName: function(element, className) ：给element添加一个class<br /><br />removeClassName: function(element, className) ：移除元素中的一个class<br /><br />observe()：调用Event对象(Prototype中的，将在后面介绍)的observe方法为元素注册事件handle<br /><br />stopObserving() ：移除注册的事件handle<br /><br />cleanWhitespace: function(element)：移除元素中空白的文本子节点<br /><br />empty: function(element)：判断元素是否为空<br /><br />childOf: function(element, ancestor) ：判断element是否为ancestor的子孙节点<br /><br />scrollTo: function(element) ：滚动条移动到元素所在的地方<br /><br />getStyle: function(element, style) ：得到元素某个css样式的值，例如$(element).getStyle("float")<br /><br />setStyle: function(element, style) ：设置元素的css样式，style十一个对象，例如element.setStyle({left: "40px", "background-color":"#666"})<br /><br />getDimensions: function(element) ：得到元素的尺寸，即使元素是隐藏的也可以正确的返回，返回 return {width: originalWidth, height: originalHeight}这样的关联数组<br /><br />makePositioned: function(element) ：当元素的position css属性为static或不存在使，将次属性更改为relative<br /><br />undoPositioned: function(element) ：跟makePositioned相反的操作<br /><br />makeClipping: function(element) ：把元素变成clipping(切片)，也就是设置元素的overflow属性为hidden<br /><br />undoClipping: function(element)：反转上面的方法对元素所做的修改<br /><br />hasAttribute(element)：判断元素是否有某个属性<br /><br />Insertion.Before：将内容插入到元素的前面，内容在元素外面<br /><br />Insertion.Top：将内容插入到元素的顶部，内容在元素里面<br /><br />Insertion.Bottom：将内容插入到元素的底部，内容在元素里面<br /><br />Insertion.After：将内容插入到元素后面，内容在元素外面<br /><br />以上的这些方法经常会使用到的，不过里面有很多方法我也没有使用过，有些是在网上搜集的，有的是在书上找到的，里面有很多在最近制作google日历时用到了，在js创建表格，div什么虽然具有挑战，比起其他使用起来麻烦多了，但是很有逻辑性的。<br />  希望上面能给JavaScript的学习使用的同仁带来方便，这里可是实现Ajax的关键因素。<br /><br /> 提供给大家参考学习，这是经常用到的。</span></span>
          <br/>
          <span style="color:red;">
            <a href="http://sunfengcheng.javaeye.com/blog/219307#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 08:13:22 +0800</pubDate>
        <link>http://sunfengcheng.javaeye.com/blog/219307</link>
        <guid>http://sunfengcheng.javaeye.com/blog/219307</guid>
      </item>
      <item>
        <title>Flex 开发架构(一): 混沌未开－Flex-all-in-one</title>
        <author>houwei</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://houwei.javaeye.com">houwei</a>&nbsp;
          链接：<a href="http://houwei.javaeye.com/blog/219304" style="color:red;">http://houwei.javaeye.com/blog/219304</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="font-family: Times New Roman;">
<p><span style="font-size: 12pt; font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: SimSun; mso-ansi-language: ZH-CN; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">
<p class="MsoNormal" style="MARGIN: 0in 0.9pt 5pt 13.6pt; TEXT-INDENT: -7.5pt; mso-layout-grid-align: none"><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: SimSun; mso-ansi-language: ZH-CN;">混沌未开，顾名思义就是匹萨店里面烘烤的色香味俱全的一个</span><span style="mso-fareast-font-family: SimSun"><span style="font-family: Times New Roman;">pizza</span></span><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: SimSun; mso-ansi-language: ZH-CN;">大饼，在一个面饼的底板上，混合所有的原料。<span lang="ZH-CN"> Lets make Pizza!</span></span></p>
<p class="MsoNormal" style="MARGIN: 0in 0.9pt 5pt 13.6pt; TEXT-INDENT: -7.5pt; mso-layout-grid-align: none">&nbsp;</p>
<p><span style="font-family: Times New Roman;">Flex</span><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">与生俱来的是它的事件驱动（</span><span style="font-family: Times New Roman;">event-driven</span><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">）的特点。就是说，</span><span style="font-family: Times New Roman;">Flex</span><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">可以使用它的标签做到任何事情。因此开发一个</span><span style="font-family: Times New Roman;">Flex</span><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">应用程序最简单，最基础的方法就是使用</span><span style="font-family: Times New Roman;">Flex</span><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">标签，先来看看代码。</span></p>
<p>&nbsp;</p>
<p><span style="font-family: Times New Roman;">Loginview</span><span style="mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">，用户界面部分：</span></p>
<p>&nbsp;</p>
<p><span style="mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">
<pre name="code" class="xml">&lt;mx:Form id=”loginForm” x=”0″ y=”0″&gt;
          &lt;mx:FormItem label=”Username:” &gt;
               &lt;mx:TextInput id=”username” /&gt;
           &lt;/mx:FormItem&gt;
           &lt;mx:FormItem label=”Password:” &gt;
               &lt;mx:TextInput id=”password” displayAsPassword=”true” /&gt;
           &lt;/mx:FormItem&gt;
           &lt;mx:FormItem direction=”horizontal” verticalGap=”15″ paddingTop=”5″ width=”170″&gt;
               &lt;mx:Button id=”loginBtn” label=”Login” click=”login()”/&gt;
           &lt;/mx:FormItem&gt;
 &lt;/mx:Form&gt;
</pre>
<font style="mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">
<p>&nbsp;</p>
</font></span>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
<p>
<p><span style="mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">使用</span><span style="font-family: Times New Roman;"> &lt;mx:RemoteObject&gt; </span><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">标签调用远程服务：</span></p>
</p>
<p>&nbsp;</p>
<pre name="code" class="xml">&lt;mx:RemoteObject  id=”loginReq” destination=”flexmvcRO”&gt;
    &lt;mx:method name=”login” result=”loginHandler(event)” fault=”mx.controls.Alert.show(event.fault.faultString)”&gt;
     &lt;mx:arguments&gt;
      &lt;userName&gt;{username.text}&lt;/userName&gt;
      &lt;password&gt;{password.text}&lt;/password&gt;
     &lt;/mx:arguments&gt;
    &lt;/mx:method&gt;
&lt;/mx:RemoteObject&gt;
</pre>
<p>&nbsp;</p>
<p><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">现在，在</span><span style="font-family: Times New Roman;">login</span><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">方法中发送请求：</span></p>
<p>&nbsp;</p>
<pre name="code" class="xml">   if(Validator.validateAll(validators).length == 0){
     loginReq.login.send();
   }  
</pre>
<p>&nbsp;</p>
<p>
<p>&nbsp;</p>
<p><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">在发送请求之后，需要建立一个返回结果的处理方法：</span></p>
<p>&nbsp;</p>
</p>
<p><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">
<pre name="code" class="xml">  private function  loginHandler(event:ResultEvent):void{
    var isLogin:Boolean = event.result as Boolean;
   if(isLogin){
    this.parentApplication.viewStack.selectedIndex=1;
    dispatchEvent(new LoginUserEvent(username.text));
   }
  }
</pre>
<font face="SimSun" style="mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">
<p>&nbsp;</p>
</font></span>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
<p>
<p><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">最后，在页面之间建立联系，在这里我使用播送事件：</span></p>
<p>&nbsp;</p>
</p>
<p><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">
<pre name="code" class="xml">dispatchEvent(new LoginUserEvent(username.text));</pre>
<font face="SimSun" style="mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">
<p>&nbsp;</p>
</font></span>
<p>&nbsp;</p>
</p>
<p>
<p><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">播送用户自定义的事件，就必须在代码最前面写入下述的元标签代码：</span></p>
<p>&nbsp;</p>
</p>
<pre name="code" class="xml"> &lt;mx:Metadata&gt;
     [Event(name="loginUser", type="flash.events.Event")]
&lt;/mx:Metadata
</pre>
<p>&nbsp;</p>
<p>
<p>&nbsp;</p>
<p><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">然后，建立用户自定义的事件</span><span style="font-family: Times New Roman;">LoginUserEvent.as:</span></p>
</p>
<p>&nbsp;</p>
<pre name="code" class="xml">import flash.events.Event;
 public class LoginUserEvent extends Event
 {
  public static const LOGINUSEREVENT:String =”loginUser”;
  public var loginUserName:String = “”;
  
  public function LoginUserEvent(userName:String)
  {
   super(LOGINUSEREVENT, true, true);
   this.loginUserName = userName;
  }
  override public function clone():Event {
     
      return new LoginUserEvent(loginUserName);
     
   }
</pre>
<p>&nbsp;</p>
<p>
<p>&nbsp;</p>
<p><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">当登录成功后，密友列表页面将会显示，</span><span style="font-family: Times New Roman;">BuddyListVew.mxml</span><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">：</span></p>
<p><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">重要的是在列表代码中，首先要监听</span><span style="font-family: Times New Roman;">LoginUserEvent</span><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">，因此要创建一个</span><span style="font-family: Times New Roman;">preinitialize</span><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">的方法：</span></p>
</p>
<p>&nbsp;</p>
<pre name="code" class="xml">&lt;mx:Panel xmlns:mx=”http://www.adobe.com/2006/mxml” title=”Buddy List of {loginUserName}”     preinitialize=”init()” width=”500″ height=”320″&gt;
   private function init():void{
   this.parentApplication.addEventListener(LoginUserEvent.LOGINUSEREVENT, getUserName);
 }
</pre>
<p>&nbsp;</p>
<p>
<p>&nbsp;</p>
<p><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">然后完成事件监听的管理程序：</span></p>
</p>
<p>&nbsp;</p>
<pre name="code" class="xml">private function getUserName(event:LoginUserEvent):void{
loginUserName = event.loginUserName;
loginReq.getAllFriends.send();
}
</pre>
<p>&nbsp;</p>
<p>
<p>&nbsp;</p>
<p><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">发送获得全部密友列表的请求，并且创建对应的管理方法：</span></p>
</p>
<pre name="code" class="xml">   private function getAllFriendsHandler(event:ResultEvent):void{
   mybuddyList = event.result as ArrayCollection;
   
  }
</pre>
<p>&nbsp;</p>
<p>
<p><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">在代码中，必须包含定义远程对象的标签：</span></p>
</p>
<pre name="code" class="xml">&lt;mx:RemoteObject  id=”loginReq” destination=”flexmvcRO”&gt;
    &lt;mx:method name=”getAllFriends” result=”getAllFriendsHandler(event)” fault=”mx.controls.Alert.show(event.fault.faultString)”&gt;
     &lt;mx:arguments&gt;
      &lt;userName&gt;{loginUserName}&lt;/userName&gt;
     &lt;/mx:arguments&gt;
    &lt;/mx:method&gt;
&lt;/mx:RemoteObject&gt;
</pre>
<p>&nbsp;&nbsp;</p>
<p>
<p>
<p><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';"><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';"><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';"><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">
<p>&nbsp;</p>
<font face="SimSun" style="mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';"><font face="SimSun" style="mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';"><font face="SimSun" style="mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';"><font face="SimSun" style="mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">
<p>&nbsp;</p>
</font></font></font></font></span><font face="SimSun" style="mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';"><font face="SimSun" style="mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';"><font face="SimSun" style="mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">
<p>&nbsp;</p>
</font></font></font></span><font face="SimSun" style="mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';"><font face="SimSun" style="mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">
<p>&nbsp;</p>
</font></font></span><font face="SimSun" style="mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">
<p>&nbsp;</p>
</font></span>
<p><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">使用</span><span style="font-family: Times New Roman;">Flex</span><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">标签完成程序方法非常简单，并且对于简单的系统来说，</span><span lang="ZH-CN"><span style="font-family: Times New Roman;"> </span></span><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">也是非常有效，其商务逻辑层也不复杂。但在实际的应用中，并非只存在这样的项目，相反，实际工作中往往需要大量的远程对象的通讯。</span></p>
</p>
</p>
<p>&nbsp;</p>
</p>
<p><span style="font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman';">好了，来看看：中央管理－</span><span style="font-family: Times New Roman;">Flex Central Management.</span></p>
<font face="SimSun" style="font-size: 12pt; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: SimSun; mso-ansi-language: ZH-CN; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">
<p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><span style="font-family: Times New Roman;">&nbsp;</span></p>
<span style="font-size: 12pt; font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: SimSun; mso-ansi-language: ZH-CN; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">
<p>&nbsp;</p>
</span></p>
</font></span></p>
<p>&nbsp;</p>
<font face="Times New Roman">
<p>
<p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</p>
</p>
</font></span></p>
<p>
<p>&nbsp;</p>
</p>
<p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://houwei.javaeye.com/blog/219304#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 03:44:44 +0800</pubDate>
        <link>http://houwei.javaeye.com/blog/219304</link>
        <guid>http://houwei.javaeye.com/blog/219304</guid>
      </item>
      <item>
        <title>某互联网广告分析公司招聘软件工程师的面试题</title>
        <author>liuming</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liuming.javaeye.com">liuming</a>&nbsp;
          链接：<a href="http://liuming.javaeye.com/blog/219296" style="color:red;">http://liuming.javaeye.com/blog/219296</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>1. 现有的系统和数据库中有一张产品数据表products，有例如id,name,price,catagory等一系列固有的字段。当然还有用户数据表users。用户可以查看自己添加的产品，现在需要加上一个功能，使得用户可以在自己的产品查看界面中，为产品增加自定义的字段。比如，一个用户需要增加一个字段，记录每种产品的货源地。请给出数据库的解决方案，例如要添加或修改哪些字段或表。</p>
<p>&nbsp;</p>
<p>2. 承接上题，请写出SQL，查询出某用户的产品和及其自定义的产品字段的全部信息。</p>
<p>&nbsp;</p>
<p>3. 网页中有一个文本域控件，一个按钮控件和一个文本框控件。问题一，请写出原生JavaScript代码，使得点击按钮时，文本域内的字符添加到文本框中。问题二，如果把文本框换成div，请给出实现相同功能的原生JavaScript代码。</p>
<p>&nbsp;</p>
<p>4. 磁盘中有一个文本文件list.txt，保存了用户自己的产品数据，其文件体积不确定，可能2G，也可能200byte。文件格式类似如下格式：</p>
<p>&quot;name&quot;, &quot;price&quot;, &quot;description&quot;</p>
<p>&quot;iPod&quot;, &quot;200.00&quot;,&quot;good player&quot;</p>
<p>&quot;dvd player&quot;, &quot;109.99&quot;,&quot;bad thing&quot;</p>
<p>..................</p>
<p>请给出程序代码，读取这个文件，并把每条数据和个数据项插入到数据库中。可在Perl，Python，PHP，C或者Ruby语言中任选一种实现。</p>
<p>&nbsp;</p>
<p>5. 请说出以下代码的运行结果</p>
<p>&lt;script type=&quot;text/javascript&quot;&gt;<br />
function defineA() {<br />
&nbsp;&nbsp; a = 1;<br />
}<br />
<br />
function defineB() {<br />
&nbsp;&nbsp; var b = 2;<br />
}<br />
<br />
defineA();<br />
defineB();<br />
<br />
alert(&quot;a + b = &quot; + a + b);<br />
&lt;/script&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>6. 有一个套广告管理系统，用户登陆后发现显示数据等大部份操作都很慢，而目前尚未确定问题的原因。请你给你假设一些内部和外部条件，说说你排查问题的思路。</p>
          <br/>
          <span style="color:red;">
            <a href="http://liuming.javaeye.com/blog/219296#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 02:19:19 +0800</pubDate>
        <link>http://liuming.javaeye.com/blog/219296</link>
        <guid>http://liuming.javaeye.com/blog/219296</guid>
      </item>
      <item>
        <title>Struts2.1.x+Spring2.5.x+Hibernate3.2.x实例教程(1)V0.1</title>
        <author>王者之剑</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://albertsong.javaeye.com">王者之剑</a>&nbsp;
          链接：<a href="http://albertsong.javaeye.com/blog/219281" style="color:red;">http://albertsong.javaeye.com/blog/219281</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="font-weight: bold; font-size: medium;">一、搭建Windows下Java Web开发环境</span>
<br />
<br />
<span style="font-weight: bold;">概要</span>
<br />
1．SSH开发相关软件及开发包下载<br />
2．软件安装及相关设置<br />
3．最简单的Web程序<br />
<br />
<span style="font-weight: bold;">1.软件下载</span>
<br />
在Ｄ盘建一个目录JavaTools，用来存放下载的软件和开发包。（本教程将使用D盘，你也可以使用C盘或E盘）。下载软件的原则，有Zip版的不下载exe版的。<br />
1）<span style="font-weight: bold;">JDK：JDK 6 Update 7 Windows版</span>
<br />
下载页面：<a href="http://java.sun.com/javase/downloads/index.jsp">http://java.sun.com/javase/downloads/index.jsp</a>
<br />
下载链接：<br />
<a href="https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewFilteredProducts-SingleVariationTypeFilter;pgid=yYdgaHqkkjVSR0EUPIQsoQ3D0000o_tQgoGy;sid=AeftgEasIkTtgQ4qZlGlhakFzl2YCYvpVAUiQVuyc5IGAw==">https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewFilteredProducts-SingleVariationTypeFilter;pgid=yYdgaHqkkjVSR0EUPIQsoQ3D0000o_tQgoGy;sid=AeftgEasIkTtgQ4qZlGlhakFzl2YCYvpVAUiQVuyc5IGAw==</a>
<br />
更多信息：http://java.sun.com<br />
2）IDE：<span style="font-weight: bold;">Eclipse IDE for Java EE Developers</span>
<br />
下载页面：<br />
<a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/R/eclipse-jee-ganymede-win32.zip">http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/R/eclipse-jee-ganymede-win32.zip</a>
<br />
下载链接：<br />
<a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/R/eclipse-jee-ganymede-win32.zip&amp;url=http://download.actuatechina.com/eclipse/technology/epp/downloads/release/ganymede/R/eclipse-jee-ganymede-win32.zip&amp;mirror_id=385">http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/ganymede/R/eclipse-jee-ganymede-win32.zip&amp;url=http://download.actuatechina.com/eclipse/technology/epp/downloads/release/ganymede/R/eclipse-jee-ganymede-win32.zip&amp;mirror_id=385</a>
<br />
更多信息：http://www.eclipse.org/<br />
3）Web Server：<span style="font-weight: bold;">Tomcat 6.0.16</span>
<br />
下载页面：<br />
<a href="http://tomcat.apache.org/download-60.cgi">http://tomcat.apache.org/download-60.cgi</a>
<br />
下载链接：<br />
<a href="http://www.meisei-u.ac.jp/mirror/apache/dist/tomcat/tomcat-6/v6.0.16/bin/apache-tomcat-6.0.16.zip">http://www.meisei-u.ac.jp/mirror/apache/dist/tomcat/tomcat-6/v6.0.16/bin/apache-tomcat-6.0.16.zip</a>
<br />
更多信息：<br />
<a href="http://tomcat.apache.org/" target="_blank">http://tomcat.apache.org/</a><br />
4）Database：<span style="font-weight: bold;">MySQL-5.0 Without installer</span>
<br />
下载页面：<br />
<a href="http://dev.mysql.com/downloads/mysql/5.0.html#win32">http://dev.mysql.com/downloads/mysql/5.0.html#win32</a>
<br />
下载链接：<br />
<a href="http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-noinstall-5.0.51b-win32.zip/from/pick#mirrors">http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-noinstall-5.0.51b-win32.zip/from/pick#mirrors</a>
<br />
更多信息：<br />
<a href="http://dev.mysql.com/" target="_blank">http://dev.mysql.com/</a><br />
5）<span style="font-weight: bold;">Database GUI客户端</span>
<br />
下载页面：<br />
<a href="http://dev.mysql.com/downloads/gui-tools/5.0.html">http://dev.mysql.com/downloads/gui-tools/5.0.html</a>
<br />
下载链接：<br />
<a href="http://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-gui-tools-noinstall-5.0-r12-win32.zip/from/pick#mirrors">http://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-gui-tools-noinstall-5.0-r12-win32.zip/from/pick#mirrors</a>
<br />
6）Eclipse插件<br />
6.1) <span style="font-weight: bold;">Sysdeo Eclipse Tomcat Launcher plugin</span>
<br />
下载链接：<br />
<a href="http://www.eclipsetotale.com/tomcatPlugin/tomcatPluginV321.zip">http://www.eclipsetotale.com/tomcatPlugin/tomcatPluginV321.zip</a>
<br />
更多信息：<br />
<a href="http://www.eclipsetotale.com/tomcatPlugin.html" target="_blank">http://www.eclipsetotale.com/tomcatPlugin.html</a><br />
7）<span style="font-weight: bold;">开发包</span>
<br />
7.1）<span style="font-weight: bold;">Struts 2.1.2</span>
<br />
下载链接：<br />
<a href="http://www.meisei-u.ac.jp/mirror/apache/dist/struts/binaries/struts-2.1.2-all.zip">http://www.meisei-u.ac.jp/mirror/apache/dist/struts/binaries/struts-2.1.2-all.zip</a>
<br />
下载页面：<br />
<a href="http://struts.apache.org/download.cgi#struts212">http://struts.apache.org/download.cgi#struts212</a>
<br />
更多信息：<br />
<a href="http://struts.apache.org/" target="_blank">http://struts.apache.org/</a><br />
7.2）<span style="font-weight: bold;">Spring Framework 2.5.5</span>
<br />
下载链接：<br />
<a href="http://downloads.sourceforge.net/springframework/spring-framework-2.5.5-with-dependencies.zip?modtime=1214221252&amp;big_mirror=0">http://downloads.sourceforge.net/springframework/spring-framework-2.5.5-with-dependencies.zip?modtime=1214221252&amp;big_mirror=0</a>
<br />
下载页面：<br />
<a href="http://www.springframework.org/download">http://www.springframework.org/download</a>
<br />
更多信息：<br />
<a href="http://www.springframework.org/" target="_blank">http://www.springframework.org/</a><br />
7.3) <span style="font-weight: bold;">Hibernate</span>
<br />
下载页面：http://www.hibernate.org/6.html<br />
Hibernate Core 3.2.6 GA<br />
下载链接：<br />
<a href="http://sourceforge.net/project/showfiles.php?group_id=40712&amp;package_id=127784&amp;release_id=574498">http://sourceforge.net/project/showfiles.php?group_id=40712&amp;package_id=127784&amp;release_id=574498</a>
<br />
Hibernate Annotations 3.3.1 GA<br />
下载链接：<br />
<a href="http://sourceforge.net/project/showfiles.php?group_id=40712&amp;package_id=139933">http://sourceforge.net/project/showfiles.php?group_id=40712&amp;package_id=139933</a>
<br />
Hibernate Tools3.2.2 Beta<br />
下载链接：<br />
<a href="http://sourceforge.net/project/downloading.php?groupname=jboss&amp;filename=HibernateTools-3.2.2.Beta1.zip&amp;use_mirror=osdn">http://sourceforge.net/project/downloading.php?groupname=jboss&amp;filename=HibernateTools-3.2.2.Beta1.zip&amp;use_mirror=osdn</a>
<br />
Hibernate Validator 3.0.0 GA<br />
下载链接：<br />
<a href="http://sourceforge.net/project/showfiles.php?group_id=40712&amp;package_id=225206">http://sourceforge.net/project/showfiles.php?group_id=40712&amp;package_id=225206</a>
<br />
7.4) <span style="font-weight: bold;">FreeMarker 2.3.13</span>
<br />
下载链接：<br />
<a href="http://prdownloads.sourceforge.net/freemarker/freemarker-2.3.13.tar.gz">http://prdownloads.sourceforge.net/freemarker/freemarker-2.3.13.tar.gz</a>
<br />
更多信息：<br />
<a href="http://www.freemarker.org/" target="_blank">http://www.freemarker.org/</a><br />
下载后的JavaTools的内容如下：<br />
D:\JavaTools\apache-tomcat-6.0.16.zip<br />
D:\JavaTools\eclipse-jee-ganymede-win32.zip<br />
D:\JavaTools\freemarker-2.3.13.tar.gz<br />
D:\JavaTools\hibernate-3.2.6.ga.zip<br />
D:\JavaTools\hibernate-annotations-3.3.1.GA.zip<br />
D:\JavaTools\HibernateTools-3.2.2.Beta1.zip<br />
D:\JavaTools\hibernate-validator-3.0.0.GA.zip<br />
D:\JavaTools\jdk-6u7-windows-i586-p.exe<br />
D:\JavaTools\mysql-gui-tools-noinstall-5.0-r12-win32.zip<br />
D:\JavaTools\mysql-noinstall-5.0.51b-win32.zip<br />
D:\JavaTools\spring-framework-2.5.5-with-dependencies.zip<br />
D:\JavaTools\struts-2.1.2-all.zip<br />
D:\JavaTools\tomcatPluginV321.zip<br />
（注：其它的软件和开发包在开发中用到时再下载，如jQuery）<br />
<span style="font-weight: bold;">2.安装设置</span>
<br />
1）<span style="font-weight: bold;">安装JDK</span>
<br />
双击jdk-6u7-windows-i586-p.exe安装JDK<br />
不安装公共JRE和JavaDB，安装到D:\，如图示。<br />
&nbsp;<img src="http://www.albertsong.com/attachments/200807/7569184466.png" height="382" alt="open_img('attachments/200807/7569184466.png')" width="500" />
<br />
安装完成后，在Window环境变量的系统变量中添加JAVA_HOME，其值为D:\jdk1.6.0_07，在Path环境变量的前面加上%JAVA_HOME%\bin;（分号不要掉了）。<br />
2）<span style="font-weight: bold;">安装Eclipse</span>
<br />
将D:\JavaTools\eclipse-jee-ganymede-win32.zip解压到D:\eclipse，改名为D:\eclipse3.4.0。<br />
右键单击D:\eclipse3.4.0\eclipse.exe，发送到桌面一个快捷方式，将快捷方式改名为eclipse3.4.0.exe。<br />
将D:
\JavaTools\tomcatPluginV321.zip解压到D:\JavaTools\tomcatPluginV321\，将里面的
com.sysdeo.eclipse.tomcat_3.2.1目录及内容复制到D:\eclipse3.4.0\dropins目录下。<br />
启动Eclipse，注意将workspace设置到eclipse3.4.0目录下，并设为默认。见下图。<br />
&nbsp;<img src="http://www.albertsong.com/attachments/200807/1311829220.png" height="182" alt="open_img('attachments/200807/1311829220.png')" width="500" />
<br />
<img src="http://www.albertsong.com/attachments/200807/3999560475.png" height="182" alt="open_img('attachments/200807/3999560475.png')" width="500" />
<br />
<br />
如果正常，进去后在工具条上会看到<br />
&nbsp;<img src="http://www.albertsong.com/attachments/200807/0967659776.png" height="22" alt="open_img('attachments/200807/0967659776.png')" width="69" />
<br />
退出Eclipse。<br />
3）<span style="font-weight: bold;">安装Tomcat</span>
<br />
将D:\JavaTools\apache-tomcat-6.0.16.zip解压到D:\apache-tomcat-6.0.16，改名为D:\tomcat-6.0.16。<br />
执行D:\tomcat-6.0.16\bin\startup.bat启动Tomcat。<br />
在浏览器中查看http://localhost:8080/<br />
正常的话可以看到Tomcat的页面。<br />
关闭浏览器窗口，关闭Tomcat控制台窗口。<br />
4）<span style="font-weight: bold;">安装MySQL</span>
<br />
将D:\JavaTools\mysql-noinstall-5.0.51b-win32.zip解压到D:\mysql-5.0.51b-win32，改名为<br />
D:\mysql-5.0.51b。<br />
执行D:\mysql-5.0.51b\bin\mysqld-nt.exe启动mysql。<br />
将D:\JavaTools\mysql-gui-tools-noinstall-5.0-r12-win32.zip解压到D:\MySQL GUI Tools 5.0\。<br />
执行D:\MySQL GUI Tools 5.0\MySQLQueryBrowser.exe启动客户端。<br />
正常情况下OK进去以后，可以访问数据库。<br />
（注：为了访问方便，可以建立以上可执行文件的快捷方式）<br />
<span style="font-weight: bold;">3.Hello Java Web</span>
<br />
1）<span style="font-weight: bold;">建立Web工程</span>
<br />
建立目录D:\Project用来放工程。<br />
启动Eclipse。<br />
菜单Window--&gt;Preferences--&gt;Tomcat。<br />
Tomcat version，Tomcat home和Context declaration mode的选择如下图所示 。<br />
&nbsp;<img src="http://www.albertsong.com/attachments/200807/3890579454.png" height="433" alt="open_img('attachments/200807/3890579454.png')" width="500" />
<br />
OK保存。<br />
菜单File--&gt;New--&gt;Project&hellip;--&gt;Java--&gt;Tomcat Project，下一步，Project name填Bitrac。<br />
Use default location取消，然后选择D:\Project如下图所示<br />
&nbsp;<img src="http://www.albertsong.com/attachments/200807/1457145286.png" height="436" alt="open_img('attachments/200807/1457145286.png')" width="500" />
<br />
Location后面要加上\Bitrac。<br />
下一步，设置WebRoot，见下图<br />
&nbsp;<img src="http://www.albertsong.com/attachments/200807/2027305000.png" height="436" alt="open_img('attachments/200807/2027305000.png')" width="500" />
<br />
Finish完成工程创建。<br />
正常的话会转到Java视图，可以在Eclipse中看到如下图所示的工程结构。<br />
&nbsp;<img src="http://www.albertsong.com/attachments/200807/4952027448.png" height="323" alt="open_img('attachments/200807/4952027448.png')" width="500" />
<br />
在Eclipse中右键单击WebRoot/WEB-INF/src，delete删除这个目录。<br />
在Bitrac
上点右键，快捷菜单中选择Tomcat project--&gt;Update context
definition，成功后，会看到D:\tomcat-6.0.16\conf\Catalina\localhost下面有个Bitrac.xml
文件。<br />
在Bitrac上点右键，快捷菜单中选择Properties--&gt;Tomcat--&gt;Context name，将Bitrac改成bitrac，再重复上面的步骤Update context definition。<br />
在Bitrac上点右键，快捷菜单中选择Properties--&gt;Resource--&gt;Text file encoding--&gt;Other，选择UTF-8，OK保存。（上述操作实际是打开了工程属性对话框，后面将用这一说法代替）<br />
2）<span style="font-weight: bold;">新增文件</span>
<br />
选择WebRoot，快捷键Ctrl+N打开新建文件对话框，Web--&gt;Jsp，下一步，文件名填index.jsp，finish完成新建文件。<br />
在新文件的&lt;body&gt;&lt;/body&gt;之间写上Hello Java Web。<br />
3）<span style="font-weight: bold;">运行</span>
<br />
点工具条上Tomcat插件按钮 中的第一个按钮启动Tomcat。<br />
在浏览器中查看http://localhost:8080/bitrac/<br />
正常的话会看到Hello Java Web，最简单的Java Web程序完成。<br />
4）<span style="font-weight: bold;">为复杂的Java Web程序做准备</span>
<br />
点Tomcat插件工具条的第二个按钮停止Tomcat。<br />
4.1）将D:\JavaTools\struts-2.1.2-all.zip解压到D:\JavaTools\struts-2.1.2<br />
将下列文件<br />
D:\JavaTools\struts-2.1.2\lib\struts2-core-2.1.2.jar<br />
D:\JavaTools\struts-2.1.2\lib\xwork-2.1.1.jar<br />
D:\JavaTools\struts-2.1.2\lib\commons-fileupload-1.2.1.jar<br />
D:\JavaTools\struts-2.1.2\lib\commons-io-1.3.2.jar<br />
D:\JavaTools\struts-2.1.2\lib\commons-logging-api-1.1.jar<br />
D:\JavaTools\struts-2.1.2\lib\ognl-2.6.11.jar<br />
复制到D:\Project\Bitrac\WebRoot\WEB-INF\lib<br />
4.2）将D:\JavaTools\freemarker-2.3.13.tar.gz解压到D:\JavaTools\freemarker-2.3.13<br />
将D:\JavaTools\freemarker-2.3.13\lib\freemarker.jar复制到<br />
D:\Project\Bitrac\WebRoot\WEB-INF\lib，改名为freemarker-2.3.13.jar<br />
4.3）将D:\JavaTools\spring-framework-2.5.5-with-dependencies.zip解压到<br />
D:\JavaTools\spring-framework-2.5.5<br />
将D:\JavaTools\spring-framework-2.5.5\dist\spring.jar复制到<br />
D:\Project\Bitrac\WebRoot\WEB-INF\lib，改名为spring-2.5.5.jar<br />
4.4）将D:\JavaTools\hibernate-3.2.6.ga.zip解压到D:\JavaTools\hibernate-3.2\<br />
将D:\JavaTools\hibernate-3.2\hibernate3.jar复制到<br />
D:\Project\Bitrac\WebRoot\WEB-INF\lib，改名为hibernate-3.2.6.jar<br />
4.5）将D:\JavaTools\hibernate-annotations-3.3.1.GA.zip解压到<br />
D:\JavaTools\hibernate-annotations-3.3.1.GA\<br />
将D:\JavaTools\hibernate-annotations-3.3.1.GA\hibernate-annotations.jar复制到<br />
D:\Project\Bitrac\WebRoot\WEB-INF\lib，改名为hibernate-annotations-3.3.1.jar<br />
4.6）将D:\JavaTools\hibernate-validator-3.0.0.GA.zip解压到<br />
D:\JavaTools\hibernate-validator-3.0.0.GA<br />
将D:\JavaTools\hibernate-validator-3.0.0.GA\hibernate-validator.jar复制到<br />
D:\Project\Bitrac\WebRoot\WEB-INF\lib，改名为hibernate-validator-3.0.0.jar<br />
打开Bitrac工程属性对话框<br />
Java Build Path--&gt;Libraries--&gt;Add Jars&hellip;，将lib下的jar都添加到当前Libraries中。<br />
将D:\JavaTools\struts-2.1.2\apps\struts2-blank-2.1.2.war中的web.xml用winrar解压出来，复制到D:\Project\Bitrac\WebRoot\WEB-INF下。<br />
打开D:\Project\Bitrac\WebRoot\WEB-INF\web.xml<br />
将index.html改为index.jsp，保存。<br />
启动tomcat。<br />
浏览http://localhost:8080/bitrac/。<br />
（如果不想自己做一遍，这里有完整的工程下载<a href="http://www.albertsong.com/download/Bitrac/Bitrac.rar">http://www.albertsong.com/download/Bitrac/Bitrac.rar</a>
）<br />
4．什么是Bitrac<br />
&nbsp;&nbsp; 在这里http://www.loveyuki.com/Article/Bitrac_Alpha_Update_List.aspx<br />
<br />
从下一章开始，将正式进入Bitrac Java版的开发。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://albertsong.javaeye.com/blog/219281#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 00:45:21 +0800</pubDate>
        <link>http://albertsong.javaeye.com/blog/219281</link>
        <guid>http://albertsong.javaeye.com/blog/219281</guid>
      </item>
      <item>
        <title>买来的教训</title>
        <author>ggggqqqqihc</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ggggqqqqihc.javaeye.com">ggggqqqqihc</a>&nbsp;
          链接：<a href="http://ggggqqqqihc.javaeye.com/blog/219274" style="color:red;">http://ggggqqqqihc.javaeye.com/blog/219274</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          先说明，这个教训不是对我的，当然花的也不是我的钱。能从自己的失败中吸取教训固然很好，但从别人的失败中吸取教训无疑更划算。<br /><br />话说今年五月份我的某个老师想在网上淘淘金，打算弄个网站玩玩儿，向我咨询有关服务器的问题。我考虑到他想要的网站规模实在不大（面向一个小城市的小广告网站），建议他不必自己买服务器再放到电信机房里托管了，直接买一个虚拟主机提供商的方案比较合算。于是他问我买哪家的比较好。我那些天正在对国外的特别是美国的Hosting市场关注比较多，而且自己感觉美国的服务器在国内的访问速度也还挺快，特别是Lunarpages，HostMonster等等，而且和国内的相比要便宜不少。再说我那个老师也当然希望花最少的钱赚最多的钱，所以向他介绍了几个美国的虚拟主机提供商。不过他始终担心服务器位于国外的话访问速度要慢－－尽管我当着他的面测试了服务器在中国和美国的一些网站的速度。<br /><br />不过这期间除了我以外，他过去的一个学生也听说他的想法了，那个学生极力推荐某个国内的主机商－－后来我知道原因了，他是那个主机商的一个代理。还说可以低价帮他买个最好的配置－－当然所谓的“最好”和美国的那个相比还是有相当大的差距的，而价格则是人家的两倍多。后来我的那个老师懵了，终于在某天晚上带着我和他以前的那个学生在一家饭馆里见面（说实话，我相当反感在饭店里谈正事）。呆了三个多小时，正事儿估计也就说了不到20分钟。那个学生一再说他代理的那个主机商的质量多么多么好，相当能说。而且说国外的服务器当然不能和国内的服务器比，多远啊。我说我已经在不同的时间测试比较了好几个在不同主机上的网站了，总体来说还是国外的要稳定一些。结果那人说我的测试毫无意义，明摆着他们的服务器在山东（我们在河北），而美国的服务器还要隔着一个太平洋。我很尴尬地一笑，我对老师说你定夺吧。就不想再说什么了。<br /><br />后来老师还是听那个学生的了。我负责管理服务器域名方面的东西。其实在老师得到主机账号时我就感觉他上当了。当时我们要求的是一台Unix主机，可拿到手的是Windows的。结果某些维护工作做起来要麻烦得多（Unix带SSH，而Windows不带）。当然这些对我来说还不算什么，我可以自己修改一下程序或者是自己写一些脚本放在服务器上，以方便维护的工作。更糟的是，有时候网站访问的速度非常慢，但往往过一段时候就正常。有时则是Web服务器和数据库服务器通信太慢，表现为静态的文本图片很快显示出来，而需要从数据库中得到的信息再迟迟不显示，而且通过后台操作数据库非常缓慢，有时一条SQL提交上去要等上五六分钟才能看到结果。<br /><br />迄今为止，最糟的还是前些天。索性连网站那很难打开了，总是出现连接重置。好在我的那个老师从他开始进入这个领域到现在也经历了不少磨难，倒也万事不急了。<br /><br />总结几个教训：不要太相信熟人的推荐，特别是当他和你有直接利益关系的时候更要小心；相信自己的测试、感觉，别那么容易被别人“想当然”地给忽悠进去；饭桌上谈正事，有些话确实不方便说；多听听各方面的建议，多利用网络做做调查，我的老师可是在这上面吃亏了。<br /><br />暂时就这么多。
          <br/>
          <span style="color:red;">
            <a href="http://ggggqqqqihc.javaeye.com/blog/219274#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 00:26:26 +0800</pubDate>
        <link>http://ggggqqqqihc.javaeye.com/blog/219274</link>
        <guid>http://ggggqqqqihc.javaeye.com/blog/219274</guid>
      </item>
      <item>
        <title>很多人告诉我，要做总结</title>
        <author>kellin</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kellin.javaeye.com">kellin</a>&nbsp;
          链接：<a href="http://kellin.javaeye.com/blog/219272" style="color:red;">http://kellin.javaeye.com/blog/219272</a>&nbsp;
          发表时间: 2008年07月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="color: #ff0000;">原创：冯真海 2008年7月25日 于新疆 乌鲁木齐</span></p>
<p>&nbsp;</p>
<p><span style="font-size: small; color: #823bc3;">做了1年多的程序员，都没有做过总结，即使做过，也是零散的，不系统的。即使像篇论文那样也行啊，就某个论题写文章，写总结也可以啊。原先和我一起&ldquo;合作&rdquo;研发仿真系统的博士也是这样和我说的。</span></p>
<p>&nbsp;</p>
<p><span style="font-size: small; color: #823bc3;">每做完一些东西，就从中整理些形成一篇文章，也作为阶段行总结也行。后来，记得江经理也和我这样说过，项目过后，做些总结，每次总结过后，都会有一些进步的。是啊，尤其是做技术的，本身就是靠的是积累。总结是再重要不过的。</span></p>
<p>&nbsp;</p>
<p><span style="font-size: small; color: #823bc3;">又忆起高中时期的老校长，在课间的讲话中。也特意强调总结的重要。还举以全省第五、全市第一的优异成绩考上清华大学的一学长为例。告诫我们要重视总结。</span></p>
<p>&nbsp;</p>
<p><span style="font-size: small; color: #823bc3;">难怪在我们转正时，在我们即将要加薪时，江经理都要求我们写份总结。</span></p>
          <br/>
          <span style="color:red;">
            <a href="http://kellin.javaeye.com/blog/219272#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 00:22:30 +0800</pubDate>
        <link>http://kellin.javaeye.com/blog/219272</link>
        <guid>http://kellin.javaeye.com/blog/219272</guid>
      </item>
      <item>
        <title>Struts2.1.x+Spring2.5.x+Hibernate3.2.x实例教程(0)V0.1</title>
        <author>王者之剑</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://albertsong.javaeye.com">王者之剑</a>&nbsp;
          链接：<a href="http://albertsong.javaeye.com/blog/219266" style="color:red;">http://albertsong.javaeye.com/blog/219266</a>&nbsp;
          发表时间: 2008年07月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;</p>
<p class="MsoNormal"><span style="font-size: medium;">序言</span>
</p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><strong><span style="font-family: 宋体;">为什么要写这个教程？</span>
</strong>
</p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--  [if !supportLists]--><span lang="EN-US"><span>1．<span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; font-family: &quot;Times New Roman&quot;;">&nbsp;
</span>
</span>
</span>
<!--  [endif]--><span style="font-family: 宋体;">检验自己的学习能力和表达能力。</span>
</p>
<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;"><!--  [if !supportLists]--><span lang="EN-US">