<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>huihua</title>
    <description></description>
    <link>http://huihua.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>0000003</title>
        <author>huihua</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://huihua.javaeye.com">huihua</a>&nbsp;
          链接：<a href="http://huihua.javaeye.com/blog/192803" style="color:red;">http://huihua.javaeye.com/blog/192803</a>&nbsp;
          发表时间: 2008年05月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>0000003</p>
          <br/>
          <span style="color:red;">
            <a href="http://huihua.javaeye.com/blog/192803#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 14 May 2008 08:39:34 +0800</pubDate>
        <link>http://huihua.javaeye.com/blog/192803</link>
        <guid>http://huihua.javaeye.com/blog/192803</guid>
      </item>
      <item>
        <title>006</title>
        <author>huihua</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://huihua.javaeye.com">huihua</a>&nbsp;
          链接：<a href="http://huihua.javaeye.com/blog/192797" style="color:red;">http://huihua.javaeye.com/blog/192797</a>&nbsp;
          发表时间: 2008年05月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>006</p>
          <br/>
          <span style="color:red;">
            <a href="http://huihua.javaeye.com/blog/192797#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 14 May 2008 08:24:29 +0800</pubDate>
        <link>http://huihua.javaeye.com/blog/192797</link>
        <guid>http://huihua.javaeye.com/blog/192797</guid>
      </item>
      <item>
        <title>005</title>
        <author>huihua</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://huihua.javaeye.com">huihua</a>&nbsp;
          链接：<a href="http://huihua.javaeye.com/blog/192796" style="color:red;">http://huihua.javaeye.com/blog/192796</a>&nbsp;
          发表时间: 2008年05月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>005</p>
          <br/>
          <span style="color:red;">
            <a href="http://huihua.javaeye.com/blog/192796#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 14 May 2008 08:14:50 +0800</pubDate>
        <link>http://huihua.javaeye.com/blog/192796</link>
        <guid>http://huihua.javaeye.com/blog/192796</guid>
      </item>
      <item>
        <title>004</title>
        <author>huihua</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://huihua.javaeye.com">huihua</a>&nbsp;
          链接：<a href="http://huihua.javaeye.com/blog/192793" style="color:red;">http://huihua.javaeye.com/blog/192793</a>&nbsp;
          发表时间: 2008年05月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>004</p>
          <br/>
          <span style="color:red;">
            <a href="http://huihua.javaeye.com/blog/192793#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 14 May 2008 08:12:15 +0800</pubDate>
        <link>http://huihua.javaeye.com/blog/192793</link>
        <guid>http://huihua.javaeye.com/blog/192793</guid>
      </item>
      <item>
        <title>003</title>
        <author>huihua</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://huihua.javaeye.com">huihua</a>&nbsp;
          链接：<a href="http://huihua.javaeye.com/blog/192791" style="color:red;">http://huihua.javaeye.com/blog/192791</a>&nbsp;
          发表时间: 2008年05月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>003</p>
          <br/>
          <span style="color:red;">
            <a href="http://huihua.javaeye.com/blog/192791#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 14 May 2008 08:10:12 +0800</pubDate>
        <link>http://huihua.javaeye.com/blog/192791</link>
        <guid>http://huihua.javaeye.com/blog/192791</guid>
      </item>
      <item>
        <title>002</title>
        <author>huihua</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://huihua.javaeye.com">huihua</a>&nbsp;
          链接：<a href="http://huihua.javaeye.com/blog/192790" style="color:red;">http://huihua.javaeye.com/blog/192790</a>&nbsp;
          发表时间: 2008年05月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>002</p>
          <br/>
          <span style="color:red;">
            <a href="http://huihua.javaeye.com/blog/192790#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 14 May 2008 08:08:09 +0800</pubDate>
        <link>http://huihua.javaeye.com/blog/192790</link>
        <guid>http://huihua.javaeye.com/blog/192790</guid>
      </item>
      <item>
        <title>001</title>
        <author>huihua</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://huihua.javaeye.com">huihua</a>&nbsp;
          链接：<a href="http://huihua.javaeye.com/blog/192789" style="color:red;">http://huihua.javaeye.com/blog/192789</a>&nbsp;
          发表时间: 2008年05月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>001</p>
          <br/>
          <span style="color:red;">
            <a href="http://huihua.javaeye.com/blog/192789#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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 14 May 2008 08:05:51 +0800</pubDate>
        <link>http://huihua.javaeye.com/blog/192789</link>
        <guid>http://huihua.javaeye.com/blog/192789</guid>
      </item>
      <item>
        <title>设计模式：Static Factory</title>
        <author>huihua</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://huihua.javaeye.com">huihua</a>&nbsp;
          链接：<a href="http://huihua.javaeye.com/blog/130199" style="color:red;">http://huihua.javaeye.com/blog/130199</a>&nbsp;
          发表时间: 2007年10月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>设计模式有很多种，这里说一下Static Factory模式，以汽车为例子吧。</p>
<p>图一：设计图</p>
<p><img src="http://huihua.javaeye.com/upload/picture/pic/5614/7fd9b739-05de-4032-8671-805323a76cfc.gif" alt="" />&nbsp;</p>
<p>&nbsp;</p>
<p><font face="Arial">IAuto.java</font></p>
<font face="Arial">
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;designpattern.factorymethod; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">interface</span><span>&nbsp;IAuto&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;run(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;stop(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>Car.java</p>
<font face="Arial">
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;designpattern.factorymethod; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Car&nbsp;</span><span class="keyword">implements</span><span>&nbsp;IAuto{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;run()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;Car&nbsp;run!&quot;</span><span>);&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;stop()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;Car&nbsp;run!&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>Truck.java</p>
<font face="Arial">
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;designpattern.factorymethod; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Truck&nbsp;</span><span class="keyword">implements</span><span>&nbsp;IAuto{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;run()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;Truck&nbsp;run!&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;stop()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;System.out.println(</span><span class="string">&quot;Truck&nbsp;stop!&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>} &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p><br />
StaticAutoFactory.java<br />
</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;designpattern.factorymethod; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;StaticAutoFactory&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;</span><span class="comment">//can&nbsp;not&nbsp;instance </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;</span><span class="keyword">private</span><span>&nbsp;StaticAutoFactory(){} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="comment">//-------------example1--------------------------&nbsp; </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;IAuto&nbsp;createCar() &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;Car(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;IAuto&nbsp;createTruck() &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;Truck(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="comment">//--------------example2------------------------- </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;CAR&nbsp;=&nbsp;</span><span class="number">0</span><span>; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;TRUCK&nbsp;=&nbsp;</span><span class="number">1</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;IAuto&nbsp;createAuto(</span><span class="keyword">int</span><span>&nbsp;type) &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">switch</span><span>&nbsp;(type) &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">case</span><span>&nbsp;CAR: &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;Car(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">case</span><span>&nbsp;TRUCK: &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;Truck(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>StaticFactoryClient.java</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;designpattern.factorymethod; &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;StaticFactoryClient&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;</span><span class="comment">/** </span>&nbsp; </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;*&nbsp;@param&nbsp;args </span>&nbsp;</span> </li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;*&nbsp;we&nbsp;needn't&nbsp;care&nbsp;the&nbsp;subclass&nbsp;of&nbsp;IAuto,&nbsp;and&nbsp;how&nbsp;to&nbsp;new&nbsp;them&nbsp;by&nbsp;using&nbsp;static&nbsp;factory. </span>&nbsp;</span> </li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;IAuto&nbsp;auto1&nbsp;=&nbsp;StaticAutoFactory.createCar(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;auto1.run(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;IAuto&nbsp;auto2&nbsp;=&nbsp;StaticAutoFactory.createAuto(StaticAutoFactory.TRUCK); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;auto2.run(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
</font>&nbsp;</font></font>
          <br/>
          <span style="color:red;">
            <a href="http://huihua.javaeye.com/blog/130199#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 09 Oct 2007 17:29:31 +0800</pubDate>
        <link>http://huihua.javaeye.com/blog/130199</link>
        <guid>http://huihua.javaeye.com/blog/130199</guid>
      </item>
      <item>
        <title>Apache2 Mongrel-Cluster Configuration</title>
        <author>huihua</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://huihua.javaeye.com">huihua</a>&nbsp;
          链接：<a href="http://huihua.javaeye.com/blog/79077" style="color:red;">http://huihua.javaeye.com/blog/79077</a>&nbsp;
          发表时间: 2007年05月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>$ wget http://apache.justdn.org/httpd/httpd-2.2.4.tar.gz<br />
($ sudo apt-get install apache2 is NOT recommended)</p>
<p>$ sudo gem install mongrel &ndash;include-dependencies<br />
$ sudo gem install mongrel_cluster &ndash;include-dependencies<br />
$ sudo /usr/sbin/adduser -r mongrel (creating a user for mongrel running)</p>
<p>cd httpd-2.2.4<br />
./configure &ndash;prefix=/etc/apache2 &ndash;enable-cache &ndash;enable-mem-cache \<br />
&ndash;enable-deflate &ndash;enable-proxy &ndash;enable-proxy-html &ndash;enable-proxy-balancer \<br />
&ndash;enable-rewrite &ndash;enable-headers &ndash;enable-filecache &ndash;enable-ssl \</p>
<p>make<br />
make install</p>
<p>&ndash;Note<br />
# Apache and mongrel could work together in two ways, single instance and cluster<br />
# We will describe both of them as follows:</p>
<p>1 &mdash; single mongrel instance<br />
&ndash;enter your application&rsquo;s path<br />
$ mongrel_rails start -d -p 8000</p>
<p>&ndash;enter your apache2 httpd.conf, usually /etc/apache2 , and add these scripts</p>
<p><virtualhost></virtualhost><br />
ServerName localhost<br />
ServerAlias http://localhost</p>
<p>ProxyPass / http://localhost:8000/<br />
ProxyPass /images !<br />
ProxyPass /stylesheets !<br />
#continue with other static files that should be served by apache</p>
<p>#continue with aliases for static content</p>
<p>ProxyPassReverse / http://localhost:8000/<br />
ProxyPreserveHost on<br />
2 &mdash; mongrel cluster<br />
$ sudo gem install daemons gem_plugin mongrel mongrel_cluster &ndash;include-dependencies<br />
$ sudo /usr/sbin/adduser -r mongrel</p>
<p>$ cd /path/to/yourapps<br />
$ sudo mongrel_rails cluster::configure -e production \<br />
-p 8000 -N 3</p>
<p>[NOTE! please make sure there&rsquo;re only one mongrel_cluster.yml file in your system.]</p>
<p>You could test now:<br />
&mdash;&mdash;&mdash;&mdash;&mdash;<br />
$ sudo mongrel_rails cluster::start<br />
$ sudo mongrel_rails cluster::stop<br />
&mdash;&mdash;&mdash;&mdash;&mdash;</p>
<p>$ sudo mkdir /etc/mongrel_cluster<br />
$ sudo ln -s /path/to/yourapp/config/mongrel_cluster.yml \<br />
/etc/mongrel_cluster/yourapp.yml<br />
$ cd /etc/init.d/<br />
$ sudo cp /usr/local/lib/ruby/gems/1.8/gems/mongrel_cluster-0.2.1/resources/mongrel_cluster mongrel_cluster<br />
$ sudo chmod +x /etc/init.d/mongrel_cluster</p>
<p>make sure these configuration is uncommented in httpd.conf<br />
NOTE, if you have these modules buit-in, you may ignore it.<br />
LoadModule proxy_module modules/mod_proxy.so<br />
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so<br />
LoadModule proxy_http_module modules/mod_proxy_http.so</p>
<p>DocumentRoot /path/to/yourapp/public</p>
<p>Edit httpd.conf:</p>
<proxy></proxy>
BalancerMember http://localhost:8000<br />
BalancerMember http://localhost:8001<br />
BalancerMember http://localhost:8002<virtualhost></virtualhost><br />
ServerName yourapp.com<br />
ServerAlias http://yourapp.com<br />
ServerAdmin yourapp@yourapp.com
<p>&nbsp;</p>
<p>DocumentRoot &ldquo;/path/to/yourapp/public&rdquo;<br />
RewriteEngine On</p>
<p>ProxyPass /images balancer://yourCluster/images</p>
<p>ProxyPass /stylesheets balancer://yourCluster/stysheets<br />
ProxyPass /javascripts balancer://yourCluster/javascripts</p>
<p>ProxyPass / balancer://yourCluster/</p>
<p>ProxyPassReverse / balancer://yourCluster/<br />
ProxyPreserveHost on</p>
          <br/>
          <span style="color:red;">
            <a href="http://huihua.javaeye.com/blog/79077#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 12 May 2007 12:49:20 +0800</pubDate>
        <link>http://huihua.javaeye.com/blog/79077</link>
        <guid>http://huihua.javaeye.com/blog/79077</guid>
      </item>
      <item>
        <title>配置Apache，利用压缩网页来提升网站浏览速度及效果对比</title>
        <author>huihua</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://huihua.javaeye.com">huihua</a>&nbsp;
          链接：<a href="http://huihua.javaeye.com/blog/79068" style="color:red;">http://huihua.javaeye.com/blog/79068</a>&nbsp;
          发表时间: 2007年05月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp;<font style="BACKGROUND-COLOR: #ccffcc">本文主要介绍如何通过配置Apache对页面进行压缩从而节省网站的带宽以及提升用户的访问速度。与PHP中<font color="#ff0000"><strong>ob_start(&quot;ob_gzhandler&quot;)</strong></font>功能一样！</font>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 网站的访问速度是由多个因素所共同决定的，这些因素例如应用程序的响应速度、网络带宽、服务器性能、与客户端之间的网络传输速度等等。其中最重要的一个因素是应用程序本身的响应速度，因此当你为网站性能所苦恼时，你第一个需要着手进行处理的便是尽可能的提升应用程序的执行速度，你可以使用缓存或者是优化代码的执行效率来提升应用程序的速度。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但是，本文并不是介绍如何来提升应用程序的执行效率，前面提到的只不过是为了防止您病急乱投医。在确保您的应用程序的性能已经达到足够好，同时服务器的性能也完全满足的情况下，不妨来试试网页压缩来进一步提升网页的浏览速度，而且非常重要的是，它完全不需要任何的成本，只不过是会让您的服务器CPU占用率稍微提升一两个百分点而已或者更少。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 网页压缩是一项由 WEB 服务器和浏览器之间共同遵守的协议，也就是说 WEB 服务器和浏览器都必须支持该技术，所幸的是现在流行的浏览器都是支持的，包括 IE、FireFox、Opera 等；服务器有 Apache 和 IIS 等。双方的协商过程如下：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、首先浏览器请求某个 URL 地址，并在请求的头 (head) 中设置属性 accept-encoding 值为 gzip, deflate，表明浏览器支持 gzip 和 deflate 这两种压缩方式（事实上 deflate 也是使用 gzip 压缩协议，下面我们会介绍二者之间的区别）； <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、WEB 服务器接收到请求后判断浏览器是否支持压缩，如果支持就传送压缩后的响应内容，否则传送不经过压缩的内容； <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、浏览器获取响应内容后，判断内容是否被压缩，如果是则解压缩，然后显示响应页面的内容。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在实际的应用中我们发现压缩的比率往往在 3 到 10 倍，也就是本来 50k 大小的页面，采用压缩后实际传输的内容大小只有 5 至 15k&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大小，这可以大大节省服务器的网络带宽，同时如果应用程序的响应足够快时，网站的速度瓶颈就转到了网络的传输速度上，因此内容压缩后就可以大大的提升页面的浏览速度。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接下来我们介绍几种常用的环境下如何启用网页压缩功能。</p>
<p><strong><font size="4" color="#0000ff" style="BACKGROUND-COLOR: #ffcc99">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 配置方法</font></strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<strong>纯 Tomcat 服务器</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果您的 WEB 应用程序是跑在 Tomcat 服务器下的，而且直接使用 Tomcat 所提供的 HTTP 服务，那建议你马上动手，因为实在是太简单了，你只需要在 server.xml 配置文件中给 HTTP Connector 增加一个 compression 的参数值为 on 并重启 Tomcat 服务器就立刻生效，配置如下：</p>
<div style="BORDER-RIGHT: #d7d7d7 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #d7d7d7 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #d7d7d7 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #d7d7d7 1px solid; BACKGROUND-COLOR: #f7f7f7">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Connector port=&quot;8080&quot; protocol=&quot;HTTP/1.1&quot; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxThreads=&quot;150&quot; connectionTimeout=&quot;20000&quot; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; redirectPort=&quot;8443&quot; compression=&quot;on&quot;/&gt;</div>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Tomcat 采用的是 HTTP/1.1 的 GZIP 压缩协议，它会根据浏览器送过来的请求中的 accept-encoding 值是否包含 gzip 来判断浏览器是否支持 gzip 压缩协议，如果浏览器支持就启用 gzip 压缩，否则就不进行任何压缩处理。Tomcat 中还有另外一个参数 compressableMimeType，这个参数可以用来指定压缩哪种类型的内容，例如可以指定该配置值为：text/html,text/plain ，则只压缩 contentType 为 text/html 和 text/plain 的页面，不过您最好也将 css 和 javascript 文件也算在压缩的文件类型中，因为这两者的压缩效果也十分的明显。</p>
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Apache 服务器</strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 apache 1.3 版本，大家常用 mod_gzip 对输出内容进行压缩，现在主流的浏览器都支持 gzip 解压缩。在 apache2 下，这个模块换名为 mod_deflate，对应的模块文件名是 mod_deflate.so。mod_gzip 本文不做介绍，下面描述一下在 Apache 2 下如何启用并配置 mod_deflate 模块。默认安装的 Apache 不管是 Windows 还是 Linux/Unix，都是不启用该模块的， Linux/Unix 下甚至不带该模块，你需要手工编译这个模块。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面我们分别介绍在 Windows 和 Linux 操作系统下如何启用并配置 mod_deflate 模块。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 Windows 下采用安装程序安装的 Apache 服务器已经带有 deflate 所需要的模块 mod_deflate.so 和 mod_headers.so，我们只需要在 httpd.conf 配置文件中启用并进行相关的配置即可，配置如下：</p>
<div style="BORDER-RIGHT: #d7d7d7 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #d7d7d7 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #d7d7d7 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #d7d7d7 1px solid; BACKGROUND-COLOR: #f7f7f7">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LoadModule deflate_module modules/mod_deflate.so<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LoadModule headers_module modules/mod_headers.so<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Location /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Insert filter<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetOutputFilter DEFLATE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Netscape 4.x has some problems...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BrowserMatch ^Mozilla/4 gzip-only-text/html<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Netscape 4.06-4.08 have some more problems<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BrowserMatch ^Mozilla/4\.0[678] no-gzip<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # MSIE masquerades as Netscape, but it is fine<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # BrowserMatch \bMSIE !no-gzip !gzip-only-text/html<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # the above regex won't work. You can use the following<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # workaround to get the desired effect:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Don't compress images<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Make sure proxies don't deliver the wrong content<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Header append Vary User-Agent env=!dont-vary<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Location&gt;</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而如果是 Linux/Unix 操作系统，如果你没有在编译安装的过程中将所需要的两个模块 mod_deflate 和 mod_headers 编译进去的话，那就稍微有点麻烦，首先我们先看如何在编译安装 Apache 过程中也同时编译这两个模块，请在执行 configure 程序时增加两个参数分别是：<br />
</p>
<div style="BORDER-RIGHT: #d7d7d7 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #d7d7d7 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #d7d7d7 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #d7d7d7 1px solid; BACKGROUND-COLOR: #f7f7f7">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # ./configure --enable-deflate --enable-headers</div>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样在编译完 Apache 后就可以直接在 httpd.conf 中启用并配置 deflate 模块了，配置的方法跟 Windows 平台下是相同的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果说您的 Apache 已经在运行了，不想再重新编译一次，那也可以选择只编译 deflate 模块所需的文件 mod_deflate.c 和 mod_headers.c。这两个文件位于 {apache-src}/modules/filters/ 目录下（其中 {apache-src} 为 apache 源文件所在的目录）。使用如下命令来单独编译这两个源文件。</p>
<div style="BORDER-RIGHT: #d7d7d7 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #d7d7d7 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #d7d7d7 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #d7d7d7 1px solid; BACKGROUND-COLOR: #f7f7f7">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # {apache-bin}/apxs -i -a -c {apache-src}/modules/filters/mod_deflate.c<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # {apache-bin}/apxs &ndash;i &ndash;a &ndash;c {apache-src}/modules/filters/mod_headers.c</div>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其中 {apache-bin} 为 Apache 安装目录下的 bin 目录，接下来在 httpd.conf 直接配置该模块即可。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 很多时候你在单独编译 deflate 模块的时候可能会碰到编译错误，提示是：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cannot load /opt/apache/modules/mod_deflate.so into server: /opt/apache/modules/mod_deflate.so: undefined symbol: deflate</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解决的方法如下：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 编辑 /usr/local/apache2/bin/apr-config 文件修改其中的 LDFLAGS 值为 &quot;-lz&quot;，然后再重新编译 mod_deflate 模块，apxs -ica mod_deflate.c 即可。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了省却不必要的麻烦，请尽量在编译安装时直接加上 --enable-deflate --enable-headers 参数。</p>
<p>&nbsp;</p>
<p><font style="BACKGROUND-COLOR: #ccffcc"></font></p>
<p><strong><font size="4" color="#0000ff" style="BACKGROUND-COLOR: #ffcc99">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 请看看我做的效果对比：</font></strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Request Headers：</p>
<div style="BORDER-RIGHT: #d7d7d7 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #d7d7d7 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #d7d7d7 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #d7d7d7 1px solid; BACKGROUND-COLOR: #f7f7f7"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Host&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User-Agent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Accept&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Accept-Language en-us,en;q=0.5<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Accept-Encoding gzip,deflate<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Keep-Alive&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 300<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; keep-alive<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cookie&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lastvisit=17%091170301156%09%2Ftest%2Fphpwindblog%2Fupload%2Flogin.php%3F<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Cache-Control max-age=0</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response Headers：</p>
<p><font style="BACKGROUND-COLOR: #99ccff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 压缩前：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 request&nbsp;&nbsp;<font color="#ff0000"> <strong>9 KB</strong></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (0 b from cache)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 31ms</font></p>
<div style="BORDER-RIGHT: #d7d7d7 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #d7d7d7 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #d7d7d7 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #d7d7d7 1px solid; BACKGROUND-COLOR: #f7f7f7"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Tue, 13 Mar 2007 07:19:33 GMT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Apache/2.0.55 (Win32) PHP/5.2.0 mod_python/3.2.8 Python/2.4.3 DAV/2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X-Powered-By&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PHP/5.2.0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Keep-Alive&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeout=15, max=100<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Keep-Alive<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Transfer-Encoding chunked<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Content-Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text/html</div>
<p>&nbsp;</p>
<p><font style="BACKGROUND-COLOR: #99ccff">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 压缩后：1 request&nbsp;&nbsp;<strong><font color="#ff0000"> 2 KB</font></strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (0 b from cache)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 31ms</font></p>
<div style="BORDER-RIGHT: #d7d7d7 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #d7d7d7 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #d7d7d7 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #d7d7d7 1px solid; BACKGROUND-COLOR: #f7f7f7">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Tue, 13 Mar 2007 06:52:44 GMT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Server&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Apache/2.0.55 (Win32) PHP/5.2.0 mod_python/3.2.8 Python/2.4.3 DAV/2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; X-Powered-By&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PHP/5.2.0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Vary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Accept-Encoding,User-Agent<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Content-Encoding gzip<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Content-Length&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1289<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Keep-Alive&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeout=15, max=99<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connection&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Keep-Alive<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Content-Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text/html</div>
<p>&nbsp;</p>
<p><font color="#ff0000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由上面的对比可以看出，原先大小为9KB的文件，经过压缩后，大小仅为2KB。</font></p>
<p><br />
</p>
<p><a name="major2"><span class="atitle"><font color="#000000"><strong>结论</strong></font></span></a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以上是目前比较流行的两个 WEB 服务器软件以及 Tomcat 服务器对于页面压缩的配置方法；其他的一些 J2EE 应用服务器如果不支持这个功能的话可以考虑利用过滤器（Servlet Filter）来进行处理，具体的代码以及配置方法可以参考 Resin 服务器所提供的文档。但是有一点需要提醒各位读者的是，本文介绍的访问只是在服务器本身的响应速度已经足够优化的情况下进行，也就是说在带宽成为系统瓶颈的时候才来考虑该方案。</p>
<p><br />
</p>
          <br/>
          <span style="color:red;">
            <a href="http://huihua.javaeye.com/blog/79068#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 12 May 2007 11:37:52 +0800</pubDate>
        <link>http://huihua.javaeye.com/blog/79068</link>
        <guid>http://huihua.javaeye.com/blog/79068</guid>
      </item>
  </channel>
</rss>