﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-心有多大舞台便有多大</title><link>http://www.blogjava.net/jjwwhmm/</link><description>Embrace changes, pursue excellence, share niceness. 
</description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 19:56:10 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 19:56:10 GMT</pubDate><ttl>60</ttl><item><title>鲜血的教训：美国空军3块钢板的反思</title><link>http://www.blogjava.net/jjwwhmm/articles/323524.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Sun, 13 Jun 2010 08:05:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/articles/323524.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/323524.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/articles/323524.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/323524.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/323524.html</trackback:ping><description><![CDATA[兵器诞生的目的就是为了赢得战争。但是，战争又是极端奇妙而复杂的，无论多么高明的兵器设计师，都无法预想到战争中会发生什么意外。这让兵器的故事
充满了惊险曲折，许多看似不起眼的细节里，都蕴含着让人再三反思的东西。二战期间，在美国空军中曾流传过3块钢板的故事。
<div class="AddTxInfo">http://club.china.com/data/thread/12171906/2713/97/22/1_1.html<br />
</div>
&nbsp;
<p>&nbsp;&nbsp;&nbsp;&nbsp;第一块钢板的故事是运输机飞行员讲的。在飞越驼峰航线支援中国抗战时，美军的运输机队常常遭到日军战斗机的偷袭。C-47运输机只有一层铝
皮，日军的零式战斗机在屁股后面紧追，一通机枪扫射，飞机上就是一串透明窟窿，有时子弹甚至能穿透飞行座椅，夺去飞行员的生命。情急之下，一些美军飞行员
在座椅背后焊上一块钢板。实际上，在与日本飞机激战时，中国空军的飞行员早就用过这个办法。就是靠着这块钢板，他们从日本飞机的火舌下夺回了自己的性命。</p>
&nbsp;
<p>&nbsp;&nbsp;&nbsp;&nbsp;第二块钢板的故事来自一位将军。看过好莱坞大片《拯救大兵瑞恩》的观众也许还记得，片中出现过一个死在滑翔机里的美国将军。这是一段真实的
故事。诺曼底登陆中，美军第101空降师副师长唐.普拉特准将乘坐滑翔机实施空降作战。起飞前，有些人自作聪明，在机头位置副师长的座位下装上厚厚的钢
板，用来防弹。但他们没有想到，由于滑翔机自身没有动力，与牵引的运输机脱钩后，必须保持平衡滑翔降落，而沉重的钢板让滑翔机头重脚轻，一头扎向地面，普
拉特准将也摔断了脖子，成为美军在D日阵亡的唯一将领。</p>
&nbsp;
<p>&nbsp;&nbsp;&nbsp;&nbsp;第三块钢板的故事来自一位数学家。二战后期，美军对德国和日本法西斯展开了大规模战略轰炸，每天都有成千架轰炸机呼啸而去，返回时往往损失
惨重。美国空军对此十分头疼：如果要降低损失，就要往飞机上焊防弹钢板；但如果整个飞机都焊上钢板，速度航程载弹量什么都要受影响。</p>
&nbsp;
<p>&nbsp;&nbsp;&nbsp;&nbsp;怎么办？空军请来数学家亚伯拉罕.沃尔德。沃尔德的方法十分简单。他把统计表发给地勤技师，让他们把飞机上弹洞的位置报上来，然后自己铺开
一张大白纸，画出飞机的轮廓，再把那些小窟窿一个个添上去。画完之后大家一看，飞机浑身上下都是窟窿，只有飞行员座舱和尾翼两个地方几乎是空白。</p>
&nbsp;
<p>&nbsp;&nbsp;&nbsp;&nbsp;沃尔德告诉大家：从数学家的眼光来看，这张图明显不符合概率分布的规律，而明显违反规律的地方往往就是问题的关键。飞行员们一看就明白了：
如果座舱中弹，飞行员就完了；尾翼中弹，飞机失去平衡就要坠落——这两处中弹，轰炸机多半就回不来了，难怪统计数据是一片空白。因此，结论很简单：只需要
给这两个部位焊上钢板就行了。</p>
&nbsp;
<p>&nbsp;&nbsp;&nbsp;&nbsp;第一块钢板是传奇，机智的飞行员用它挽救了自己的生命，战场上曾有过许多这样的传奇故事，但这种传奇往往像火花一闪即逝；第二块钢板则是教
训，是用宝贵的生命换回来的教训，谁都知道焊钢板的人也是好心，但结果却完全相反；而第三块钢板是升华，它用科学的方法，从实战经验中提炼出规律，你可能
想像不到，这块讲科学的钢板挽救了数以万计的飞行员的生命。</p>
&nbsp;
<p>&nbsp;&nbsp;&nbsp;&nbsp;小小的钢板背后，凝聚着多少智慧和鲜血，值得每一位军人去用心体会。一旦战争和你正面相对的时候，你准备把钢板放在哪里？</p>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/323524.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2010-06-13 16:05 <a href="http://www.blogjava.net/jjwwhmm/articles/323524.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>感言</title><link>http://www.blogjava.net/jjwwhmm/archive/2010/05/12/320681.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Wed, 12 May 2010 04:48:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2010/05/12/320681.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/320681.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2010/05/12/320681.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/320681.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/320681.html</trackback:ping><description><![CDATA[一個男人年輕的時候,是一生中最暗淡的時光,要什麽沒什麽,所以一定要珍惜在這段時間裏深愛你的女人,因爲她是用她一生中最美麗的歲月去陪伴你渡過這段最黯淡的時光...<br />
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/320681.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2010-05-12 12:48 <a href="http://www.blogjava.net/jjwwhmm/archive/2010/05/12/320681.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>终于把postfix跟imap搞好了，庆贺下！</title><link>http://www.blogjava.net/jjwwhmm/archive/2010/04/14/318282.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Wed, 14 Apr 2010 09:41:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2010/04/14/318282.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/318282.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2010/04/14/318282.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/318282.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/318282.html</trackback:ping><description><![CDATA[这段时间看postfix的架构文档，总算对邮件系统有了个皮毛的认识。<br />
在想不知能否在软件开发中借鉴下postfix的架构经验。<br />
现在已经能通过postfix发送邮件，并能通过courier-imap的pop3接收邮件了，<br />
总结经验就是要多去看日志，跟邮件相关的日志可以去看/var/log/maillog，另外配置文件一点点的改，不要一次更改过多的内容。<br />
接下来把认证相关的改成mysql，把webmail配置上。<br />
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/318282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2010-04-14 17:41 <a href="http://www.blogjava.net/jjwwhmm/archive/2010/04/14/318282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从小处看gmail的性能</title><link>http://www.blogjava.net/jjwwhmm/archive/2010/04/12/318067.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Mon, 12 Apr 2010 07:41:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2010/04/12/318067.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/318067.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2010/04/12/318067.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/318067.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/318067.html</trackback:ping><description><![CDATA[今天无聊在看gmail首页的html代码时，看到了关于页头里的&#8220;欢迎使用 Gmail&#8221;这一行字的UI设计代码，由此看到为了性能，真正的好网站是怎么优化的：<br />
<br />
<img alt="" src="file:///C:/DOCUME%7E1/marenpei/LOCALS%7E1/Temp/moz-screenshot.png" /><br />
在上面的这段html页面中，gmail使用了一个table，代码如下：<br />
&lt;tr&gt;<br />
&nbsp;&nbsp;&lt;td nowrap="nowrap"&gt;<br />
&nbsp; &lt;table width="100%" cellspacing="0" cellpadding="0" bgcolor="#c3d9ff" align="center" style="margin-bottom: 5px;"&gt;<br />
&nbsp; &lt;tbody&gt;&lt;tr&gt;<br />
&nbsp; &lt;td valign="top" align="left" class="bubble tl<span style="color: red">"&gt;&lt;div class="SPRITE_corner_tl"&gt;&lt;/</span>div&gt;&lt;/td&gt;<br />
&nbsp; &lt;td style="padding: 5px 0pt; font-family: arial; text-align: left; font-weight: bold;" rowspan="2" class="bubble"&gt;&lt;b&gt;欢迎使用 Gmail&lt;/b&gt;&lt;/td&gt;<br />
&nbsp; &lt;td valign="top" align="right" class="bubble tr<span style="color: red">"&gt;&lt;div class="SPRITE_corner_tr"&gt;&lt;/</span>div&gt;&lt;/td&gt;<br />
&nbsp; &lt;/tr&gt;<br />
&nbsp; &lt;tr&gt;<br />
&nbsp; &lt;td valign="bottom" align="left" class="bubble bl<span style="color: red">"&gt;&lt;div class="SPRITE_corner_bl"&gt;&lt;/</span>div&gt;&lt;/td&gt;<br />
&nbsp; &lt;td valign="bottom" align="right" class="bubble br<span style="color: red">"&gt;&lt;div class="SPRITE_corner_br"&gt;&lt;/</span>div&gt;&lt;/td&gt;<br />
&nbsp; &lt;/tr&gt;<br />
&nbsp; &lt;/tbody&gt;&lt;/table&gt;<br />
&nbsp; &lt;/td&gt;<br />
&nbsp; &lt;/tr&gt;<br />
为了既考虑UI效果，又能避免带来速度上的影响，用了最少的图片来实现弯角效果(图片在div的SPRITE_corner<strong> CSS中</strong>)，从而避免设计成一个大的图片而影响用户浏览器下载资源的速度。<br />
从我这个非UI设计人员的视角来看，不知道GMAIL这样设计的初衷是否是这样的，如果不是的话，请高手赐教。
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/318067.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2010-04-12 15:41 <a href="http://www.blogjava.net/jjwwhmm/archive/2010/04/12/318067.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Postfix架构</title><link>http://www.blogjava.net/jjwwhmm/archive/2010/04/08/317692.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Thu, 08 Apr 2010 01:45:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2010/04/08/317692.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/317692.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2010/04/08/317692.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/317692.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/317692.html</trackback:ping><description><![CDATA[Postfix接收邮件的架构示意图：<br />
<table>
    <tbody>
        <tr>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/trivial-rewrite.8.html">trivial-<br />
            rewrite(8)</a><a href="http://www.postfix.org/trivial-rewrite.8.html"></a> </td>
        </tr>
        <tr>
            <td> Network </td>
            <td> <tt> -&gt; </tt> </td>
            <td align="center" bgcolor="#f0f0ff" valign="middle"> <a href="http://www.postfix.org/smtpd.8.html">smtpd(8)</a>
            </td>
            <td> <br />
            </td>
            <td rowspan="2" align="center">
            <table>
                <tbody>
                    <tr>
                        <td align="center">
                        ^<br />
                        <tt> | </tt> </td>
                        <td align="center"> <tt> |<br />
                        v </tt>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
        <tr>
            <td colspan="3"> <br />
            </td>
            <td> <tt> \ </tt> </td>
        </tr>
        <tr>
            <td> Network </td>
            <td> <tt> -&gt; </tt> </td>
            <td align="center" bgcolor="#f0f0ff" valign="middle"> <a href="http://www.postfix.org/qmqpd.8.html">qmqpd(8)</a>
            </td>
            <td> <tt> -&gt; </tt> </td>
            <td align="center" bgcolor="#f0f0ff" valign="middle"> <a href="http://www.postfix.org/cleanup.8.html">cleanup(8)</a>
            </td>
            <td> <tt> -&gt; </tt> </td>
            <td align="center" bgcolor="#f0f0ff" valign="middle"> <a href="http://www.postfix.org/QSHAPE_README.html#incoming_queue"> incoming </a> </td>
        </tr>
        <tr>
            <td colspan="3"> <br />
            </td>
            <td> <tt> / </tt> </td>
        </tr>
        <tr>
            <td colspan="2"> <br />
            </td>
            <td align="center" bgcolor="#f0f0ff" valign="middle"> <a href="http://www.postfix.org/pickup.8.html">pickup(8)</a>
            </td>
            <td> <tt> &lt;- </tt> </td>
            <td align="center" bgcolor="#f0f0ff" valign="middle"> <a href="http://www.postfix.org/QSHAPE_README.html#maildrop_queue"> maildrop </a> </td>
        </tr>
        <tr>
            <td colspan="4" align="center"> <br />
            </td>
            <td align="center"> ^<br />
            <tt> | </tt> </td>
        </tr>
        <tr>
            <td> Local </td>
            <td> <tt> -&gt; </tt> </td>
            <td align="center" bgcolor="#f0f0ff" valign="middle"> <a href="http://www.postfix.org/sendmail.1.html">sendmail(1)</a>
            </td>
            <td> <tt> -&gt; </tt> </td>
            <td align="center" bgcolor="#f0f0ff" valign="middle"> <a href="http://www.postfix.org/postdrop.1.html">postdrop(1)</a></td>
        </tr>
    </tbody>
</table>
Postfix发送邮件的架构示意图：<br />
<table>
    <tbody>
        <tr>
            <td rowspan="2" align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/trivial-rewrite.8.html">trivial-<br />
            rewrite(8)</a>
            </td>
            <td> <br />
            </td>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/smtp.8.html">smtp(8)</a> </td>
            <td> <tt> -&gt; </tt> </td>
            <td> Network </td>
        </tr>
        <tr>
            <td align="right"> <tt> / </tt> </td>
        </tr>
        <tr>
            <td rowspan="2" colspan="4"> <br />
            </td>
            <td rowspan="2" align="center">
            <table>
                <tbody>
                    <tr>
                        <td align="center">
                        ^<br />
                        <tt> | </tt> </td>
                        <td align="center"> <tt> |<br />
                        v </tt>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
            <td align="right"> <tt> - </tt> </td>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/lmtp.8.html">lmtp(8)</a> </td>
            <td> <tt> -&gt; </tt> </td>
            <td> Network </td>
        </tr>
        <tr>
            <td align="left"> <tt> / </tt> </td>
        </tr>
        <tr>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/QSHAPE_README.html#incoming_queue"> incoming </a> </td>
            <td> <tt> -&gt; </tt> </td>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/QSHAPE_README.html#active_queue"> active </a> </td>
            <td> <tt> -&gt; </tt> </td>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/qmgr.8.html">qmgr(8)</a> </td>
            <td align="right"> <tt> --- </tt> </td>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/local.8.html">local(8)</a> </td>
            <td> <tt> -&gt; </tt> </td>
            <td> File, command </td>
        </tr>
        <tr>
            <td rowspan="2" colspan="2"> <br />
            </td>
            <td rowspan="2" align="center">
            <table>
                <tbody>
                    <tr>
                        <td align="center">
                        ^<br />
                        <tt> | </tt> </td>
                        <td align="center"> <tt> |<br />
                        v </tt>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
            <td rowspan="2" colspan="2"> <br />
            </td>
            <td align="left"> <tt> \ </tt> </td>
        </tr>
        <tr>
            <td align="right"> <tt> - </tt> </td>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/virtual.8.html">virtual(8)</a> </td>
            <td> <tt> -&gt; </tt> </td>
            <td> File </td>
        </tr>
        <tr>
            <td colspan="2"> <br />
            </td>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/QSHAPE_README.html#deferred_queue"> deferred </a> </td>
            <td colspan="2"> <br />
            </td>
            <td align="right"> <tt> \ </tt> </td>
        </tr>
        <tr>
            <td colspan="6">
            <br />
            </td>
            <td align="center" bgcolor="#f0f0ff"> <a href="http://www.postfix.org/pipe.8.html">pipe(8)</a> </td>
            <td> <tt> -&gt; </tt> </td>
            <td> Command</td>
        </tr>
    </tbody>
</table>
<br />
<br />
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/317692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2010-04-08 09:45 <a href="http://www.blogjava.net/jjwwhmm/archive/2010/04/08/317692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习：Thread的setDaemon方法</title><link>http://www.blogjava.net/jjwwhmm/archive/2010/03/31/317061.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Wed, 31 Mar 2010 07:26:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2010/03/31/317061.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/317061.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2010/03/31/317061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/317061.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/317061.html</trackback:ping><description><![CDATA[setDaemon方法把java的线程设置为守护线程，此方法的调用必须在线程启动之前执行。只有在当前jvm中所有的线程都为守护线程时，jvm才会退出。<br />
如果创建的线程没有显示调用此方法，这默认为用户线程。<br />
下面是一个示例代码：<br />
<p>public class TestThreadDaemonMethod {</p>
<p>&nbsp;/**<br />
&nbsp; * @param args<br />
&nbsp; */<br />
&nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestThread t = new TestThread("test thread");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果设置为false,那么在执行完后面的start方法后,jvm不会退出<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.setDaemon(false);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果设置为true,则执行完后面的start方法后,jvm会退出<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.setDaemon(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t.start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//在start之后设置daemon会抛出异常<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//t.setDaemon(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (t.isDaemon()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("test thread&nbsp;is a daemon.");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
}</p>
<p>class TestThread extends Thread {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private String name;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public TestThread(String name) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.name = name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* (non-Javadoc)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * @see java.lang.Thread#run()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public void run() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(true) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("running " + name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (InterruptedException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</p>
 <img src ="http://www.blogjava.net/jjwwhmm/aggbug/317061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2010-03-31 15:26 <a href="http://www.blogjava.net/jjwwhmm/archive/2010/03/31/317061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>插播一条招聘广告：盛大在线招聘Java程序员</title><link>http://www.blogjava.net/jjwwhmm/archive/2010/03/31/317035.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Wed, 31 Mar 2010 05:03:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2010/03/31/317035.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/317035.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2010/03/31/317035.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/317035.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/317035.html</trackback:ping><description><![CDATA[RT，包括高级、资深Java程序员，架构师，有意的请与我联系，有金融相关行业从业经验的优先，要求除了Java知识之外，对分析设计方面有丰富的经验。
 <img src ="http://www.blogjava.net/jjwwhmm/aggbug/317035.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2010-03-31 13:03 <a href="http://www.blogjava.net/jjwwhmm/archive/2010/03/31/317035.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[ZZ]Jetty 源码分析</title><link>http://www.blogjava.net/jjwwhmm/archive/2010/03/26/316653.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Fri, 26 Mar 2010 08:49:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2010/03/26/316653.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/316653.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2010/03/26/316653.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/316653.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/316653.html</trackback:ping><description><![CDATA[<table cellspacing="0" cellpadding="3" width="760" align="center" border="0">
    <tbody>
        <tr width="100%">
            <td width="1%">
            <h3>一、 总括</h3>
            <div align="left">&nbsp; &nbsp;&nbsp;&nbsp;你了解Jetty 吗，就像我们所熟知的Tomcat一样, Jetty是一个免费的开放源码的100%纯Java的Http服务器和Servlet容器。 </div>
            </td>
            <!--开始正文-->
            <td width="98%">
            <center>
            <h4><br />
            </h4>
            </center><br />
            </td>
        </tr>
        <tr>
            <td>
            <p align="justify">&nbsp; &nbsp;&nbsp;&nbsp;Jetty具备以下特点：</p>
            </td>
        </tr>
        <tr>
            <td>
            <div align="left">&nbsp; &nbsp;&nbsp;&nbsp;快速高效 </div>
            </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;。Jetty是最快的Servlet服务器之一</p>
            </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;。Jetty可以处理上千个并发连接 </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;小巧嵌入 </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;。Jetty的jar只有600多K </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;。可动态嵌入到应用程序，适合开发web2.0等应用 </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;应用广泛</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;。开源项目有<a href="http://geronimo.apache.org/">Geronimo</a>, <a href="http://sourceforge.net/projects/jboss/">JBoss</a>, <a href="http://www.objectweb.org/jonas/index.html">JOnAS</a>等</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;。商业项目有IBM Tivoli, Sonic MQ and Cisco SESM等</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;可到Jetty网站<a href="http://jetty.mortbay.org/jetty/"> http://jetty.mortbay.org/jetty/</a> 查看最新信息</p>
            </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;本文将通过对Jetty最新稳定版 Jetty5.1.5RC2 源码的研究，向读者展示Jetty在设计方面使用的不同设计理念, 希望对广大开发者在设计自己的系统时有所帮助。 </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;Jetty按照功能可以分为四个主个主要的部分,HttpServer, HttpContext,HttpHandler,HttpListener,详见如下类图:</p>
            </td>
        </tr>
        <tr>
            <td><img height="610" alt="" src="http://docs.huihoo.com/jetty/i/Architecture.jpg" width="726" /></td>
        </tr>
        <tr>
            <td>
            <p align="center">&lt;图 1-1&gt;</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp;</p>
            </td>
        </tr>
        <tr>
            <td>
            <h3>二、HttpServer及配置</h3>
            </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;对于初次接触Jetty的人一定会对上图感到迷惑，其实在Jetty中 HttpServer是一个服务器的核心控制类, 我们可以看到，其它的组件类都是由该类扩展开来，HttpServer的作用就是在一系列的监听器类和处理器类之间搭起了一个桥梁,有效的控制着消息在系统内的传递,如下图: </td>
        </tr>
        <tr>
            <td>
            <div align="center"><img height="55" alt="" src="http://docs.huihoo.com/jetty/i/HttpServer_Sequence.jpg" width="431" /></div>
            </td>
        </tr>
        <tr>
            <td>
            <div align="center">&lt;图 1-2 &gt; </div>
            </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;HttpServer职责是接受从HttpListener传递过来的request(请求),HttpServer通过对request的Host(主机)或Path(路径)进行匹配,然后分发给相应的HttpContext(可以理解为一个web application)。</td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;这里举个例子，假设我们现在要建立一个提供静态页面web服务,页面内容在c:\root \下,可以通过如此配置HttpServer: </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;HttpServer server = new HttpServer(); // 创建一个新的HttpServer </td>
        </tr>
        <tr>
            <td height="25">&nbsp; &nbsp;&nbsp;&nbsp;SocketListener listener = new SocketListener(); // 创建一个新监听器 </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;listener.setPort(8080);// 设置监听端口为8080 </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;server.addListener(listener);// 将监听类注册到server中 </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;HttpContext context = new HttpContext(); // 创建一个新HttpContext </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;context.setContextPath("/app/*"); // 设置访问路径 </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;context.setResourceBase("c:/root/"); // 设置静态资源路径 </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;context.addHandler(new ResourceHandler()); // 为这个HttpContext添加一个静态资源处理器 </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;server.addContext(context); // 将这个HttpContext注册到server中 </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;server.start();// 最后启动这个server </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;当我们要建立一个提供动态页面web服务时, 假设我们自己的 web 应用放在Jetty目录下的webapps下并打好包文件名为myapp.war, 可以通过如此配置HttpServer: </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;Server server = new Server(); // 创建一个新的HttpServer </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;SocketListener listener = new SocketListener();// 创建一个新监听器 </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;listener.setPort(8080); // 设置监听端口为8080 </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;server.addListener(listener ); // 将监听类注册到server中 </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;server.addWebApplication("myapp","./webapps/myapp/"); // 将这个web应用注册到这个Server中 </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;server.start(); // 最后启动这个server </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;短短数行代码就可创建一个web服务器并启动它,这有点类似于我们windows中的即插即用的概念,需要什么就添加什么,把这些类以HttpServer为核心组合在一起，就可以完成强大的功能。</td>
        </tr>
        <tr>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>
            <h3>三、Jetty Server</h3>
            </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;1.上面我们探讨了HttpServer的启动,读者一定还存在这样疑问,整个Jetty 服务器是怎样启动的？ </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;首先我们可以在图 1-1 看到左下角有一个Server类,这个类实际上继承了HttpServer,当启动Jetty服务器时，具体来说，在Jetty根目录下命令行下如输入 java&nbsp;-jar&nbsp;start.jar&nbsp;etc/demo.xml，注意这里有一个配置文件 demo.xml做为运行参数,这个参数也可以是其它的配置文件,也可是多个xml配置文件，其实这个配置文件好比我们使用struts时的struts -config.xml文件，将运行Server需要用到的组件写在里面，比如上一节中HttpServer的配置需要的组件类都可以写在这个配置文件中。 </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;2.我们自己部署到Jetty的webapps目录下的web application,Jetty如何运行我们自己的web application? </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;首先当我们按上述方法启动Jetty Server时,就会调用Server类里面的main方法,这个入口方法首先会构造一个Server类实例(其实也就构造了一个 HttpServer),创建实例过程中就会构造XmlConfiguration类的对象来读取参数配置文件，之后再由这个配置文件产生的 XmlConfiguration对象来配置这个Server,配置过程其实是运用Java的反射机制调用Server的方法并传入配置文件中所写的参数来向这个Server添加HttpListener,HttpContext,HttpHandler,web application(对应我们自己部署的web应用)。 </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;添加我们自己的web application过程中相应的就会读取我们所熟知的/WEB-INF/web.xml来创建一个WebApplicationContext(这个类继承了HttpContext)的实例,同时也会创建WebApplicationContext自身的ServletHandler(实现了 HttpHandler接口),注意到ServletHandler中包含一组ServletHolder指向实际的Servlet,譬如说我们在 web.xml文件中配置了两个Filter和一个Servlet,这里就会有三个ServletHolder,实际处理请求时 ServeletHandler就会依次调用这三个ServletHolder传入request,response处理(实际最后交给这两个 Filter和Servlet处理),这样我们自己做好的一个 web应用就挂载到这个Server上了,可以接受客户端相应的request(请求)。 </td>
        </tr>
        <tr>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>
            <h3>四、运行原理(请参考如下时序图)</h3>
            </td>
        </tr>
        <tr>
            <td><img height="587" alt="" src="http://docs.huihoo.com/jetty/i/work_sequence.jpg" width="720" /></td>
        </tr>
        <tr>
            <td>
            <p align="center">&lt;图 1-7 &gt;</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;上图展示了一个request的处理过程,首先HttpListener监听到客户端发来的请求创建一个HttpConnection实例(封装了连接细节,比如从Socket连接中获取的输入流和输出流), HttpConnection对象构建过程中会创建Jetty内部自定义的HttpRequest和HttpResponse对象,接着 HttpListener会调用这个HttpConnection实例的handle方法, HttpConnection实例就调用HttpRequest对象的read()方法读取信息,调用HttpServer的service方法以 HttpRequest,HttpResponse为参数传给HttpServer,HttpServer又将HttpRequest和 HttpResponse分发给相应的HttpCotext,HttpContext最后将HttpRequest和HttpResponse交给自身的 HttpHandler 处理,在这里HttpRequest,HttpResponse被再次封装为ServletHttpRequest和 ServletHttpResponse,其实这两个类实现了我们所熟知的HttpServletRequest和 HttpServletResponse接口。</p>
            </td>
        </tr>
        <tr>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>
            <h3>五、高级性能</h3>
            </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;1.HttpHandler:</p>
            </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;该接口的实现类用于处理HttpContext分发过来的reqeust,不同的实现类的有不同的处理功能,这里介绍几常用的HttpHandler实现类: </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;ReourceHandler:用于处理静态内容,如以扩展名为.html的文件 </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;SecurityHandler:提供基本的安全验证</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;ForwardHandler:转发一个request到另一个url</p>
            </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;ServletHandler:用于将request交由具体的Servlet类进行处理 </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;2.当你在看图 1-2 时候会注意到HttpServer和HttpListener,HttpServer与HttpContext，HttpContext与 HttpHandler存在一对多的关系,下面就介绍一下它们之间的这种关系如何通过程序来配置. </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;HttpListener &amp; HttpServer:</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;HttpListener是所有监听器类的接口,如图中的SocketListener (基于传统的Socket技术)就实现了该接口,Jetty还有其它的实现该接口类,如SocketChannelListener(基于NIO技术)类等,HttpListener职责主要是在服务器启动后监听相应端口的来自客户端请求并建立连接(图 1-1 中所示用HttpConnection封装连接细节),监听器可在同个IP上开启多个端口为同一个HttpServer 进行监听,所以HttpListener和HttpServer是多对一的关系,如下图:</p>
            </td>
        </tr>
        <tr>
            <td>
            <div align="center"><img height="174" alt="" src="http://docs.huihoo.com/jetty/i/multi_listener.jpg" width="524" /></div>
            </td>
        </tr>
        <tr>
            <td>
            <p align="center">&lt;图 1-3 &gt;</p>
            </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;配置代码：</td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;HttpServer server = new HttpServer(); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;HttpListenrer listener1 = new SocketChanneListener(); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;Listener1.setPort(8080); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp; HttpListenrer listener1 = new SocketListener(); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;Listener1.setPort(8443); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;server.addListener(listener1); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;server.addListener(listener2); </td>
        </tr>
        <tr>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;HttpContext &amp; HttpHandler:</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;HttpContext相当于对应客户端请求的URL或某个虚拟机, 其子类中包含若干个HttpHandler, 当接受到request(请求)时,HttpContext会依次(按某个预定的次序)把request交给这些HttpHandler处理,直到这个 request被标示处理过为止, 需要注意的是这个request可能被多个HttpHandler处理，但只能有一个HttpHandler能标示这个request已被处理过.</p>
            </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;一个典型的HttpContext有用于安全处理、静态资源处理及Servlet类的 HttpHandler,如下图: </td>
        </tr>
        <tr>
            <td>
            <div align="center"><img height="195" alt="" src="http://docs.huihoo.com/jetty/i/Typical_HttpContext.jpg" width="447" /></div>
            </td>
        </tr>
        <tr>
            <td>
            <div align="center">&lt;图 1-4&gt; </div>
            </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;配置代码：</td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;HttpContext context = new HttpContext(); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;context.setContextPath(&#8220;/myapp/*&#8221;); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;HttpHandler securitHandler = new SecurityHandler(); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;HttpHandler resourceHandler = new ResourceHandler(); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;HttpHandler servletHandler = new ServletHandler(); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;context.addHandler(securitHandler); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;context.addHandler(resourceHandler); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;context.addHandler(servletHandler); </td>
        </tr>
        <tr>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;HttpServer &amp; HttpContext: </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;一般的HTTP服务器软件可以同时处理多个web application,同样一个HttpServer可以包含多个HttpContext,如下图可以通过同一个端口的监听类来映射多个 HttpContext: </td>
        </tr>
        <tr>
            <td>
            <div align="center"><img height="170" alt="" src="http://docs.huihoo.com/jetty/i/one_port_multi_HttpContext.jpg" width="450" /></div>
            </td>
        </tr>
        <tr>
            <td>
            <p align="center">&lt;图 1-5 &gt;</p>
            </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;配置代码：</td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;HttpServer server = new HttpServer(); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;HttpContext context1 = new HttpContext(); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;context1.setContextPath(&#8220;/app1/*&#8221;); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;HttpContext context2 = new HttpContext(); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;context2.setContextPath(&#8220;/app2/*&#8221;); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;server.addContext(context1); </td>
        </tr>
        <tr>
            <td>&nbsp; </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;HttpServer &amp; HttpLister &amp; HttpContext: </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;另外Jetty对多网卡（多个IP地址,不同的主机名）的服务器也提供了很好的支持,每个 HttpContext都有自身的HttpServer:</p>
            </td>
        </tr>
        <tr>
            <td>
            <div align="center"><img alt="" src="http://docs.huihoo.com/jetty/i/multi_hosts_multi_context.jpg" /></div>
            </td>
        </tr>
        <tr>
            <td>
            <p align="center">&lt;图 1-6 &gt;</p>
            </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;配置代码：</td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;HttpServer server1 = new HttpServer(); </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;SocketListener listener1 = new SocketListener(); </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;listener1.setHost(&#8220;www.app1.com&#8221;);//orListener1.setHost(&#8220;www.app2.com&#8221;)</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;listener2.setPort(80);</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;HttpContext context1 = new HttpContext();</p>
            </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;context1.setContextPath(&#8220;/&#8221;);</p>
            </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;server1.addListener(listener1); </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;server1.addContext(context1);</p>
            </td>
        </tr>
        <tr>
            <td>&nbsp; </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;3.Jetty对高并发的支持 </td>
        </tr>
        <tr>
            <td>
            <div align="center"><img height="168" alt="" src="http://docs.huihoo.com/jetty/i/jetty_ThreadPool.jpg" width="378" /></div>
            </td>
        </tr>
        <tr>
            <td>
            <div align="center">&lt;图 1-8&gt; </div>
            </td>
        </tr>
        <tr>
            <td>&nbsp; &nbsp;&nbsp;&nbsp;如果多用户请求服务就会涉及到多线程的管理，如图 1-8,Jetty中主要由ThreadPool负责管理多线程，注意其中Pool.PondLife是Pool的一个内部接口, ThreadPool.PoolThread是ThreadPool的一个内部线程类,我们看到Pool.PondLife和Pool存在一个聚集的关系，实际上Pool对象中存放在是一个个ThreadPool.PoolThread线程对象，当有新用户连接上Server时，ThreadPool就从Pool中取一个空闲的线程为当前用户连接服务。 </td>
        </tr>
        <tr>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>
            <h3>六、小结</h3>
            </td>
        </tr>
        <tr>
            <td>
            <p>&nbsp; &nbsp;&nbsp;&nbsp;本文通过图示简要介绍了Jetty整个体系架构和主要的组件类及服务器的启动执行过程,其实Jetty 通常被用来做为内嵌的Web Server来使用，一些常见的服务器软件，如Apache Cocoon、JBoss ,JOnAs等都会采用Jetty作为Web解決方案；另外由于Jetty在性能及稳定性要优于同类HTTP Server的原因，Jetty已在国外已很流行,鉴于这一点,本文作者可以预测在不久的将来Jetty同样也会在国内流行开来。</p>
            </td>
        </tr>
        <tr>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>附：</td>
        </tr>
        <tr>
            <td>来源：http://blog.leiling.com/CALM/archive/2005/12/23/106662.aspx <br />
            作者联系方式：陈应刚 <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#100;&#121;&#99;&#121;&#103;&#64;&#121;&#97;&#104;&#111;&#111;&#46;&#99;&#111;&#109;">dycyg@yahoo.com</a> 熊红阳 <a =""><br />
            </a></td>
        </tr>
    </tbody>
</table>
 <img src ="http://www.blogjava.net/jjwwhmm/aggbug/316653.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2010-03-26 16:49 <a href="http://www.blogjava.net/jjwwhmm/archive/2010/03/26/316653.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>读书有感：不要试图精确的定义一个论题，而应该把一类问题组合成一个体系</title><link>http://www.blogjava.net/jjwwhmm/archive/2010/03/23/316234.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Tue, 23 Mar 2010 01:26:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2010/03/23/316234.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/316234.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2010/03/23/316234.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/316234.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/316234.html</trackback:ping><description><![CDATA[<p>这几天在看德鲁克的&#8220;最后的完美世界&#8221;一书，看到亨顿从他老师黎曼那得到的教诲：不要试图精确的定义一个论题，而应该把一类问题组合成一个体系。这句话想了好几天，但始终没有在心中有个非常清晰的概念，不知道这句话是不是真的是数学大师黎曼的话。</p>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/316234.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2010-03-23 09:26 <a href="http://www.blogjava.net/jjwwhmm/archive/2010/03/23/316234.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>每日感言：没有的总想有，得到的还盼望！</title><link>http://www.blogjava.net/jjwwhmm/archive/2010/03/23/316232.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Tue, 23 Mar 2010 01:22:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2010/03/23/316232.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/316232.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2010/03/23/316232.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/316232.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/316232.html</trackback:ping><description><![CDATA[RT
 <img src ="http://www.blogjava.net/jjwwhmm/aggbug/316232.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2010-03-23 09:22 <a href="http://www.blogjava.net/jjwwhmm/archive/2010/03/23/316232.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>读书有感：成功的关键是为了保持竞争性而以最低的成本提供这些服务</title><link>http://www.blogjava.net/jjwwhmm/archive/2010/03/16/315583.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Tue, 16 Mar 2010 05:49:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2010/03/16/315583.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/315583.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2010/03/16/315583.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/315583.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/315583.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天在重新复习《数据模型资源手册》时，看到作者关于金融服务产品中描述的：金融服务产品需要一个高度可定制的特征集和可以用于满足客户需要的功能设置。在任何服务行业中，主要的营业重心是确定客户需要并实现它们。在金融服务中，重点在于资金管理。并提出，对于任何金融服务公司来说，成功的关键是为了保持竞争性而以最低的成本提供这些服务。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于最后这句话，回顾我在支付行业这几年的工作经验，真是深有感触。目前国内排名靠前的各第三方支付公司，所提供的支付服务可以说大同小异，即便是在行业解决方案上，可以说也是一窝蜂的挤入某几个利润较高的机票，彩票，游戏，购物几个行业。可以说，大家都看到了客户想要的东西，知道客户需要的是什么。并且都推出了类似的服务。但是，各家支付公司推出这些服务的时间是有长有短，细节上更是千差万别。可以说，在服务行业中，更能体现细节决定成败这句话。可能我的清算周期比你的早一天，我就能抢占你的客户。我的定价策略能灵活的适应客户的定制化需求，就能领先对手拿下客户。在这里，大家体现的竞争性就是看谁能在最短的时间里提供这些服务。时间正是最重要的一个成本因素。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那么，单从时间上来考虑，支付公司如何此才能以最短的时间来实现并推出服务呢？一方面，很重要的是支付系统的可定制性，可扩展性。在我以前曾任职的某支付公司里，其收单系统(网关)，几乎在任一个步骤都可实现对商户的定制化，只要客户有需要，大部分定制需求都可以在系统运行期间完成定制。可惜后面的设计者并没有去继续这方面的工作。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另一方面，更重要的是公司对于产品研发运营的机制。这可能也是各大支付公司之间最大的差别了。有的公司是有单独的产品负责人，他由一而终，全权负责一个产品从创意，策划，设计，研发，运营，市场等涉及产品整个生命周期的事情。这种方式风险比较大，产品是否成功取决于产品负责人对市场的把握。所以这中机制下的产品负责人往往是一个小的团队，三个人左右，不能多于三人。有的公司则分别由不同的部分负责产品在生命周期上的不同阶段，全权负责的就只能是大老板了。这种方式下，公司的整个产品研发运营机制比较固定，产品都是按照固有的流程一步步走下去。如果公司遇到非常紧急的项目需求，那么只能由大老板出面，走特殊流程，以期迅速完成产品的研发。这种机制有个弱点，就是各个部门之间会互相推诿责任。
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/315583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2010-03-16 13:49 <a href="http://www.blogjava.net/jjwwhmm/archive/2010/03/16/315583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zz]L7-filter Kernel Version HOWTO</title><link>http://www.blogjava.net/jjwwhmm/archive/2010/03/16/315578.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Tue, 16 Mar 2010 05:09:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2010/03/16/315578.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/315578.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2010/03/16/315578.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/315578.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/315578.html</trackback:ping><description><![CDATA[<p>【转载自<a href="http://l7-filter.sourceforge.net/HOWTO">http://l7-filter.sourceforge.net/HOWTO</a>】<small><br />
Last update 23 Aug 2008</small></p>
<div class="section intro">
<p>If you have not already, please read the <a href="http://l7-filter.sourceforge.net/README">README</a>.</p>
</div>
<h2>Table of Contents</h2>
<ul>
    <li><a href="http://l7-filter.sourceforge.net/HOWTO#Get">What You Need To Get</a>
    <li><a href="http://l7-filter.sourceforge.net/HOWTO#Kernel">Kernel Patch</a>
    <li><a href="http://l7-filter.sourceforge.net/HOWTO#iptables">Iptables Patch</a>
    <li><a href="http://l7-filter.sourceforge.net/HOWTO#Patterns">Protocol Definitions</a>
    <li><a href="http://l7-filter.sourceforge.net/HOWTO#Doing">Actually Doing Stuff</a>
    <li><a href="http://l7-filter.sourceforge.net/HOWTO#More">More Information</a> </li>
</ul>
<p>Important links on this page:</p>
<ul>
    <li><a href="http://sourceforge.net/project/showfiles.php?group_id=80085">Download page</a>
    <li><a href="http://l7-filter.sourceforge.net/PacketFlow.png">Packet flow diagram</a>
    <li><a href="http://l7-filter.sourceforge.net/Pattern-HOWTO">Pattern Writing HOWTO</a>
    <li><a href="http://l7-filter.sourceforge.net/L7-Netfilter-example">Shaping script for bridges</a>
    <li><a href="http://l7-filter.sourceforge.net/L7-Netfilter-example-nonbridge">Shaping script for non-bridges</a>
    <li><a href="http://protocolinfo.org/">Protocolinfo.org</a> </li>
</ul>
<div class="section">
<h2><a name="Get"></a>What You Need To Get</h2>
<ul>
    <li>The 2.4 or 2.6 Linux kernel source (2.6 strongly preferred) from <a href="http://kernel.org/">kernel.org</a>
    <li>The iptables source from <a href="http://netfilter.org/">netfilter.org</a>
    <li>Our "<a href="http://sourceforge.net/project/showfiles.php?group_id=80085">l7-filter kernel version</a>" package (netfilter-layer7-vX.Y.tar.gz)
    <li>Our "<a href="http://sourceforge.net/project/showfiles.php?group_id=80085">Protocol definitions</a>" package (l7-protocols-YYYY-MM-DD.tar.gz) </li>
</ul>
</div>
<div class="section">
<h2><a name="Kernel"></a>Kernel Patch</h2>
<p><strong>Short version for experts: Apply our kernel patch. Enable the new match option in Netfilter.</strong></p>
<p>Check <a href="http://l7-filter.sourceforge.net/kernelcompat">our kernel compatibility list</a> to see if the Linux version you want to use has been tested.</p>
<p>Use the appropriate kernel patch from the "Layer 7 patches" package to patch<sup><a href="http://l7-filter.sourceforge.net/HOWTO#patching">[1]</a></sup> the kernel (read the README in the package to determine which patch to use). Set up your kernel as you would otherwise. Now enable the following options (these are correct for Linux 2.6.21.1, but they tend to move around a lot, so you may have to go hunting if you have a different kernel version):</p>
<ul>
    <li>"Prompt for development and/or incomplete code/drivers" (under "Code maturity level options")
    <li>"Network packet filtering framework" (Networking &#8594; Networking support &#8594; Networking Options)
    <li>"Netfilter Xtables support" (on the same screen)
    <li>"Netfilter connection tracking support" (... &#8594; Network packet filtering framework &#8594; Core Netfilter Configuration), select "Layer 3 Independent Connection tracking"
    <li>"Connection tracking flow accounting" (on the same screen)
    <li>And finally, "Layer 7 match support"
    <li>Optional but highly recommended: Lots of other Netfilter options, notably "<abbr title="File Transfer Protocol">FTP</abbr> support" and other matches. If you don't know what you're doing, go ahead and enable all of them. </li>
</ul>
<p><strong>Warning:</strong> Some users have reported kernel crashes when they using <abbr title="Symmetric Multi Processing">SMP</abbr> with l7-filter. (Some have also reported that their SMP systems run fine.) If you have a multi-CPU machine, test carefully before putting it into production with l7-filter.</p>
<p>Compile and install the kernel as usual. (Our code may generate warnings about "initialization from incompatible pointer type", ignore them.) Reboot.</p>
<div class="notes">
<h3><a name="patching"></a><sup>1</sup>How to patch a source tree</h3>
<p>Suppose you have a patch called <code>happy.patch</code>. To apply it, go into the root directory of the source tree you want to patch and run "<code>patch -p1 &lt; happy.patch</code>"</p>
</div>
</div>
<div class="section">
<h2><a name="iptables"></a>Iptables Setup</h2>
<p>First read the README in the package "Layer 7 patches". Depending on your version of iptables, the instructions are different.</p>
<h3>iptables 1.4.0 and older</h3>
<p>Use the appropriate iptables patch to to patch<sup><a href="http://l7-filter.sourceforge.net/HOWTO#patching">[1]</a></sup> iptables. Compile iptables, pointing it at your patched kernel source:</p>
<ul class="happy">
    <li>Run "<code>chmod +x extensions/.layer7-test</code>" (information about file permissions can't be contained in the patch)
    <li>Then "<code>make KERNEL_DIR=/path/to/patched/kernel_source</code>" (you must have configured your kernel source before this step)
    <li>And install (as root): "<code>make install KERNEL_DIR=/path/to/patched/kernel_source</code>" </li>
</ul>
<h3>iptables 1.4.1</h3>
<p>Don't use this version. There's no reason to and it's difficult to compile.</p>
<h3>iptables 1.4.1.1 and newer</h3>
<p>Copy <code>libxt_layer7.c</code> and <code>libxt_layer7.man</code> (from the subdirectory of the "Layer 7 patches" package that the README points you to) to the <code>extensions/</code> directory of your iptables source. Then:</p>
<ul>
    <li>"<code>./configure --with-ksource=/path/to/patched/kernel_source</code>" (use the <strong>full</strong> path)
    <li>"<code>make</code>"
    <li>(as root) "<code>make install</code>" </li>
</ul>
</div>
<div class="section">
<h2><a name="Patterns"></a>Protocol Definitions (Pattern Files)</h2>
<p>These files tell iptables and the kernel how protocol names correspond to regular expressions, e.g. "ftp" means "<code>^220[\x09-\x0d -~]*ftp</code>".</p>
<p>Uncompress the "Protocol Definitions" package and make the resulting directory <code>/etc/l7-protocols</code>.<sup><a href="http://l7-filter.sourceforge.net/HOWTO#conform">[2]</a></sup>
<p>You should now be ready to actually do stuff.</p>
<div class="notes">
<h3><a name="conform"></a><sup>2</sup>Notes for non-conformists</h3>
<p>You can also install the patterns in a custom location. If you do this, you need to specify <code>--l7dir</code> before <code>--l7proto</code> when you use l7-filter:<br />
<br />
<code>iptables [...] -m layer7 --l7dir /home/bob/patterns --l7proto http [...]</code> </p>
</div>
</div>
<div class="section">
<h2><a name="Doing"></a>Actually doing stuff</h2>
<p>There are three things you may be interested in doing: (1) blocking certain protocols (2) controlling bandwidth use (3) accounting. We cover each of these cases below.</p>
<p>First, a reminder: Just because you're using l7-filter, you don't need to do <strong>all</strong> of your packet classification using it. It's likely that what you want to accomplish can be at least partially done with less demanding classifiers, such as port matching. For instance, you can probably assume that traffic on <abbr title="Transport&#10;Control Protocol">TCP</abbr> port 80 that isn't matched by any <abbr title="Peer to Peer">P2P</abbr> patterns is <abbr title="HyperText&#10;Transfer Protocol">HTTP</abbr>; you don't need to actually use the HTTP pattern.</p>
<p>l7-filter uses the standard iptables extension syntax. (If you are not familiar with this, it's time to read the documentation at <a href="http://netfilter.org/">netfilter.org</a> or at least "man iptables".)</p>
<p><code>iptables</code> [specify table &amp; chain] <code>-m layer7 --l7proto</code> [protocol name] <code>-j</code> [action]</p>
<p>(Or, if you're just interested in accounting, omit "<code>-j</code> [action]".)</p>
<p>For a list of valid protocol names, see <a href="http://l7-filter.sourceforge.net/protocols">the protocols page</a>. You can also <a href="http://l7-filter.sourceforge.net/Pattern-HOWTO">add your own protocols</a>.</p>
<p>The only trick is that, in order to do its classification, l7-filter must be able to see all of the relevant traffic. It <strong>only</strong> sees packets if they go through an l7-filter rule. One way of ensuring this is to use the <code>POSTROUTING</code> chain of the <code>mangle</code> table:</p>
<p><code>iptables -t mangle -A POSTROUTING -m layer7 --l7proto</code> [etc.]</p>
<p>See <a href="http://l7-filter.sourceforge.net/PacketFlow.png">this packet flow diagram</a> for details. In some cases, l7-filter can sucessfully match even if it can only see one side of the connection, but in general, this won't work.</p>
<p>If you are using a version of l7-filter earlier than 2.7, you must manually load the ip_conntrack module kernel for l7-filter to work. Newer versions do this automatically.</p>
<h3><a name="blocking"></a>1. Blocking</h3>
<p>Don't. Here's why:</p>
<ul class="happy">
    <li>l7-filter matching isn't foolproof: there may be both false positives (one protocol can look like another) and false negatives (applications can do obscure things that we didn't count on). Patterns that are known to regularly generate false positives are marked "overmatching" on <a href="http://l7-filter.sourceforge.net/protocols">the protocols page</a>, but others may also do so occasionally.
    <li>Almost every type of Internet traffic has legitimate uses. For instance, P2P protocols, while widely used to violate copyright, are also an efficient way to distribute open source software and legally free music.
    <li>Programs can respond to being blocked by port-hopping, switching between TCP and UDP, opening a new connection for every trivial operation, using encryption, or employing other evasion tactics. Trying to block such protocols has consequences on two levels:
    <ol>
        <li>In the case of port/protocol-hopping, you make it harder for yourself to identify protocols that already act this way.
        <li>You encourage programmers to include these "features" in new programs, making it harder for everyone in the future. For example: In early 2006, Bittorrent started moving towards end-to-end encryption because many networks were either blocking it or severely restricting its bandwidth. </li>
    </ol>
    <li>l7-filter patterns are not generally designed with blocking in mind. We consider a protocol to be well identified if the identification is useful for controlling its bandwidth. This means, for instance, that for P2P applications, we do not focus on catching connections that are not downloads.
    <li>Blocking with l7-filter provides <strong>no</strong> security, since any reasonably determined person can easily circumvent it. </li>
</ul>
<p>Instead of dropping packets you don't like, we recommend using Linux <abbr title="Quality of Service">QoS</abbr> to restrict their bandwidth usage. If you insist on using l7-filter to drop packets, make sure you have investigated other options first, such as the features of your HTTP proxy (useful for worms).</p>
<h3><a name="qos"></a>2. Bandwidth Restriction</h3>
<p>To control the bandwidth that a protocol uses, you can use Netfilter to "mark" the packets and QoS to filter on that mark. To mark:</p>
<p><code>iptables -t mangle -A POSTROUTING -m layer7 --l7proto imap -j MARK --set-mark 3</code></p>
<p>The number "3" is arbitrary. It can be any integer. Then use <code>tc</code> to filter on that mark (<code>tc</code> is "traffic control", the userspace tool for Linux QoS, part of the <a href="http://freshmeat.net/projects/iproute2">iproute2 package</a>):</p>
<p><code>tc filter add dev eth0 protocol ip parent 1:0 prio 1 handle 3 fw flowid 1:3</code></p>
<p>Did you understand that last command? You can try reading <a href="http://lartc.org/">The Linux Advanced Routing and Traffic Control HOWTO</a> for enlightenment. You should do this so that you have some idea what you're doing, but unfortunately, <code>tc</code> is incredibly obtuse and you're likely to wish you just had a canned script. Well, we can help:</p>
<ul>
    <li><a href="http://l7-filter.sourceforge.net/L7-Netfilter-example">Shaping script for bridges</a>
    <li><a href="http://l7-filter.sourceforge.net/L7-Netfilter-example-nonbridge">Shaping script for non-bridges</a> </li>
</ul>
<p>These may need to be modified if your setup is significantly different than mine, but it should provide a much better starting point than most other things you are likely to find.</p>
<p>Be prudent when choosing the amount of bandwidth you allow each protocol. Restricting a protocol to an unusably low bandwidth can have similar consequences to <a href="http://l7-filter.sourceforge.net/HOWTO#blocking">blocking</a> it.</p>
<h3><a name="account"></a>3. Accouting</h3>
<p>If you just want to keep track of what's in use on your network, simply use the above command without any <code>-j</code> option. For example:<br />
<br />
<code>iptables -t mangle -A POSTROUTING -m layer7 --l7proto imap</code><br />
<br />
You can then get statistics by using <code>iptables -L</code>. (See "man iptables" for details.)</p>
</div>
<div class="section">
<h2><a name="More"></a>More Information</h2>
<h3>Dealing with FTP, <abbr title="Internet Relay Chat">IRC</abbr>, etc.</h3>
<p>Some protocols open child connections to transfer data. FTP is the most familiar example. If you have loaded the <code>ip_conntrack_ftp</code> or <code>nf_conntrack_ftp</code> kernel module, l7-filter will classify FTP and all its child connections as FTP. The same goes for IRC/IRC-DCC, etc.</p>
<p>If you wish to classify the children differently, use the standard iptables "helper" match. You can use "<code>-m --helper ftp</code>" to match ftp child connections. Of course, once you've done this, it's silly to involve l7-filter, at least for the children.</p>
<h3>The "unset" and "unknown" matches</h3>
<p>l7-filter marks unmatched connections that it is still trying to match as "unset". The first few packets of all TCP connections as well as those of some UDP connections will match this. Similarly, l7-filter marks connections that it has given up trying to match as "unknown". These are matched just like normal protocols:</p>
<p><code>iptables -A FORWARD -m layer7 --l7proto unset<br />
iptables -A FORWARD -m layer7 --l7proto unknown</code></p>
<p>The "unset" match is only supported by l7-filter 2.9 and up.</p>
<h3>Upgrading the protocol definitions</h3>
<p>The protocol definitions are simple text files with a format described in <a href="http://l7-filter.sourceforge.net/Pattern-HOWTO">the Pattern-HOWTO</a>. They can be updated as a package or individually.</p>
<p>If you update the protocol definitions, you need to clear the relevant iptables rules and re-enter them. This is because the pattern files are only read by iptables, not directly by the kernel.</p>
<h3>Other things to know</h3>
<ul class="happy">
    <li>By default, l7-filter looks at the first 10 packets or 2<abbr title="kibibytes">kB</abbr>, whichever is smaller. These limits are somewhat conservative. It is well known that some HTTP connections (those that involve large cookies), for instance, need more packets to be matched.
    <ul>
        <li>You can alter the number of packets at any time through <code>/proc/net/layer7_numpackets</code>. (i.e. "<code>echo 16 &gt; /proc/net/layer7_numpackets</code>".)
        <li>In l7-filter versions 2.0 and forward, you can alter the number of bytes at module load time: "<code>modprobe xt_layer7 maxdatalen=N</code>" (<code>ipt_layer7</code> in old versions), where <code>N</code> is in bytes. This should be used cautiously, since performance may decrease <strong>drastically</strong> with larger data sizes. To prevent you from accidentally bringing down your network, there is an artificial limit of 65536 imposed. If you're sure you know what you're doing, you can remove this limit by editing ipt_layer7.c or xt_layer7.c in the kernel source. </li>
    </ul>
    <li>It's possible (although rare) for a connection to be matchable by more than one pattern. The patterns are tested in the order you specified with iptables. After a match is made, l7-filter does not continue testing that connection, so changing the order of your rules may change what happens.
    <li>Sometimes important messages go only to the system log, not the terminal you are working at. Such messages include notifications that regular expressions failed to compile and various things that <code>tc</code> generates. A useful command is "<code>tail -f /var/log/messages</code>". </li>
</ul>
<p>Please see <a href="http://l7-filter.sourceforge.net/FAQ">the FAQ</a> for more information.</p>
</div>
 <img src ="http://www.blogjava.net/jjwwhmm/aggbug/315578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2010-03-16 13:09 <a href="http://www.blogjava.net/jjwwhmm/archive/2010/03/16/315578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dr. Jeffrey Jaffe Named W3C CEO</title><link>http://www.blogjava.net/jjwwhmm/archive/2010/03/15/315494.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Mon, 15 Mar 2010 08:29:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2010/03/15/315494.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/315494.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2010/03/15/315494.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/315494.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/315494.html</trackback:ping><description><![CDATA[<p style="clear: none">Dr. Jeff Jaffe is Chief Executive Officer of the World Wide Web Consortium. In this role he works with Director Tim Berners-Lee, staff, and membership, and the public to evolve and communicate the W3C's organizational vision. He is responsible for all of W3C's global operations, for maintaining the interests of all of W3C's stakeholders, and for sustaining a culture of cooperation and transparency, so that W3C continues to be the leading forum for the technical development and stewardship of the Web.<br />
<br />
<br />
</p>
<p>After receiving a Ph.D. in computer science from MIT in 1979, Jeff joined IBM's Thomas J. Watson Research Center. During his tenure at IBM, he held a wide variety of technical and management positions, including vice president, Systems and Software Research, corporate vice president of technology, and general manager of IBM's SecureWay business unit, where he was responsible for IBM's security, directory, and networking software business.</p>
<p>Jeff then served as president of Bell Labs Research and Advanced Technologies, where he established new facilities in Ireland and India, and served as chairman of the board of the New Jersey Nanotechnology Consortium.</p>
<p>Most recently, Jeff served as the Executive Vice President and Chief Technology Officer for Novell. He was responsible for Novell's technology direction, as well as leading Novell's product business units.</p>
<p>Jeff was appointed by President Bill Clinton to serve on the Advisory Committee for the Presidential Commission for Critical Infrastructure Protection. He has also chaired the Chief Technology Officer group of the Computer Systems Policy Project, and has served on the National Research Council's Computer Science and Telecommunications Board. He is a Fellow of ACM and the IEEE.</p>
<p>Dr. Jaffe holds a BS in Mathematics and an MS in Electrical Engineering and Computer Science in addition to his Doctorate from the Massachusetts Institute of Technology.</p>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/315494.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2010-03-15 16:29 <a href="http://www.blogjava.net/jjwwhmm/archive/2010/03/15/315494.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[ZZ]理解form的get和post </title><link>http://www.blogjava.net/jjwwhmm/archive/2010/03/15/315449.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Mon, 15 Mar 2010 03:20:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2010/03/15/315449.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/315449.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2010/03/15/315449.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/315449.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/315449.html</trackback:ping><description><![CDATA[<p>(转载自<a href="http://askjava.blog.sohu.com/76540166.html">http://askjava.blog.sohu.com/76540166.html</a>)<br />
</p>
<div>
<p>在<a href="http://www.w3.org/TR/REC-html40/">HTML</a>中，<a href="http://www.w3.org/TR/REC-html40/interact/forms.html">form元素</a>用<a href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.1">method属性</a>来指定有两种不同的提交方法，即"get"（默认值）和"post"。</p>
<h1>1. get和post的定义</h1>
<p><a href="http://www.w3.org/">W3C</a>的<a href="http://www.w3.org/TR/REC-html40/">HTML 4.01 specification</a>说，<a href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13">form元素的method属性</a>用来指定发送form的HTTP方法。</p>
<ul>
    <li>使用get时，form的<a href="http://www.w3.org/TR/REC-html40/interact/forms.html#form-data-set">数据集</a>（形如control-name=current-value的键值对）被附加到form元素的action属性所指定的URI后面；
    <li>使用post时，form的数据集（形如control-name=current-value的键值对）被包装在请求的body中并被发送。 </li>
</ul>
<p>这可以简单地理解为，get仅仅是拼接一个URI，然后直接向服务器请求数据（需要提交给服务器的数据集包含在URI中）。比如：</p>
<div><span style="color: #0000ff">&lt;</span><span style="color: #800000">form&nbsp;</span><span style="color: #ff0000">method</span><span style="color: #0000ff">="get"</span><span style="color: #ff0000">&nbsp;action</span><span style="color: #0000ff">="FormGet.aspx"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="ProductID"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="1"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="submit"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="Get"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span></div>
<br />
<p>这个form在提交的时候，会产生这样能够一个get请求：FormGet.aspx?ProductID=1。</p>
<p>而post会把form的数据集，即ProductID=1这个键值对包装在请求的body中，发送给服务器，然后向服务器请求数据。对于：</p>
<div><span style="color: #0000ff">&lt;</span><span style="color: #800000">form&nbsp;</span><span style="color: #ff0000">method</span><span style="color: #0000ff">="post"</span><span style="color: #ff0000">&nbsp;action</span><span style="color: #0000ff">="FormPost.aspx"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="ProductID"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="1"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="submit"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="Get"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span></div>
<br />
<p>这样一个form在提交时，我们将看到一个干净的URI：FormPost.aspx。因为数据不是拼接在URI中。</p>
<h1>2. get和post的区别</h1>
<h2>2.1 安全性</h2>
<p>如果用get提交一个验证用户名和密码的form，一般认为是不安全的。因为用户名和密码将出现在URL上，进而出现在浏览器的历史记录中。显然，在对安全性有要求的情况下，应该使用post。</p>
<h2>2.2 编码</h2>
<p><a href="http://www.w3.org/TR/REC-html40/">HTML 4.01 specification</a>指出，get只能向服务器发送ASCII字符，而post则可以发送整个<a href="http://www.w3.org/TR/REC-html40/references.html#ref-ISO10646">ISO10646</a>中的字符（如果同时指定<a href="http://www.w3.org/TR/REC-html40/interact/forms.html#adef-enctype">enctype</a>="multipart/form-data"的话）。</p>
<p>注意get和post对应的enctype属性有区别。enctype有两个值，默认值为application/x-www-form-urlencoded，而另一个值multipart/form-data只能用于post。</p>
<h2>2.3 提交的数据的长度</h2>
<p>HTTP specification并没有对URL长度进行限制，但是IE将请求的<a href="http://support.microsoft.com/kb/208427/en-us">URL长度限制为2083个字符</a>，从而限制了get提交的数据长度。测试表明如果URL超出这个限制，提交form时IE不会有任何响应。其它浏览器则没有URL的长度限制，因此其它浏览器能通过get提交的数据长度仅受限于服务器的设置。</p>
<p>而对于post，因为提交的数据不在url中，所以通常可以简单地认为数据长度限制仅受限于服务器的设置。</p>
<h2>2.4 缓存</h2>
<p>由于一个get得到的结果直接对应到一个URI，所以get的结果页面有可能被浏览器缓存。而post一般则不能，参考5。</p>
<h2>2.5 引用和SEO</h2>
<p>出于和上面相同的原因，我们可以用一个URI引用一个get的结果页面，而post的结果则不能，所以必然不能被搜索引擎搜到。</p>
<h1>3. 服务端的处理</h1>
<p>在服务端的ASP.NET程序中，对于get，我们用Request.QueryString[control-name]来取得对应的=current-value；对于post，我们用Request.Form[control-name]。</p>
<p>我们也可以笼统地使用Request[control-name]。但这样做的效率不如前者。我们可以用下面的程序比较Request.QueryString和Request的效率：</p>
<div><span style="color: #000000; background-color: #ffff00">&lt;%</span><span style="color: #000000; background-color: #f5f5f5">@&nbsp;Page&nbsp;Language</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">C#</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;XHTML&nbsp;1.0&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script&nbsp;</span><span style="color: #ff0000">runat</span><span style="color: #0000ff">="server"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000; background-color: #f5f5f5"><br />
&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">void</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;Page_PreInit(object&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">if</span><span style="color: #000000; background-color: #f5f5f5">(Request[</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">InputString</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">]&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">!=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">null</span><span style="color: #000000; background-color: #f5f5f5">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">int</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;count&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">1000000</span><span style="color: #000000; background-color: #f5f5f5">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;start;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;end;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;value&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">""</span><span style="color: #000000; background-color: #f5f5f5">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;DateTime.Now;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">for</span><span style="color: #000000; background-color: #f5f5f5">(</span><span style="color: #0000ff; background-color: #f5f5f5">int</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;i&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">0</span><span style="color: #000000; background-color: #f5f5f5">;i&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;count;i</span><span style="color: #000000; background-color: #f5f5f5">++</span><span style="color: #000000; background-color: #f5f5f5">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;Request.QueryString[</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">InputString</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;DateTime.Now;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">double</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;requestGet&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;(end&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">-</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;start).TotalSeconds;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;DateTime.Now;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">for</span><span style="color: #000000; background-color: #f5f5f5">(</span><span style="color: #0000ff; background-color: #f5f5f5">int</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;i&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">0</span><span style="color: #000000; background-color: #f5f5f5">;i&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;count;i</span><span style="color: #000000; background-color: #f5f5f5">++</span><span style="color: #000000; background-color: #f5f5f5">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;Request[</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">InputString</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;DateTime.Now;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">double</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;request&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;(end&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">-</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;start).TotalSeconds;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;compare.InnerHtml&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;requestGet.ToString()&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;/&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;request.ToString()&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;=&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">+</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;(requestGet&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">/</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;request).ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get.InnerHtml&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.w3.org/1999/xhtml"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">meta&nbsp;</span><span style="color: #ff0000">http-equiv</span><span style="color: #0000ff">="Content-Type"</span><span style="color: #ff0000">&nbsp;content</span><span style="color: #0000ff">="text/html;&nbsp;charset=utf-8"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Request.QueryString&nbsp;/&nbsp;Request</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form&nbsp;</span><span style="color: #ff0000">method</span><span style="color: #0000ff">="get"</span><span style="color: #ff0000">&nbsp;action</span><span style="color: #0000ff">="FormGet.aspx"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="InputString"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="submit"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="Post"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;&lt;</span><span style="color: #800000">br&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get:&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">span&nbsp;</span><span style="color: #ff0000">runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;id</span><span style="color: #0000ff">="get"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">br&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Request.QueryString&nbsp;/&nbsp;Request:&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">span&nbsp;</span><span style="color: #ff0000">runat</span><span style="color: #0000ff">="server"</span><span style="color: #ff0000">&nbsp;id</span><span style="color: #0000ff">="compare"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">span</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></div>
<br />
<p>同样的办法我们可以比较Request.Form和Request。</p>
<p>最后得到的结果（Request.QueryString[control-name] / Request[control-name]和Request.Form[control-name] / Request[control-name]）大多数时候是小于1的。因此，我们因该尽量用Request.QueryString或Request.Form来代替Request。</p>
<h1>4. 正确地使用get和post</h1>
<p><a href="http://www.w3.org/">W3C</a>的官方建议是：当且仅当form是幂等（idempotent）的时候，使用get。幂等是一个数学上的术语，其<a href="http://foldoc.doc.ic.ac.uk/foldoc/foldoc.cgi?query=idempotent&amp;action=Search">定义</a>是：对于一个函数f : D -&gt; D，如果D中的所有x满足f (f x) = f x，那么这个函数是幂等的。<a href="http://www.w3.org/Protocols/">HTTP specification</a>（比如<a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html">RFC 2616</a>）中，将幂等解释为：多次相同请求产生的副作用，和一次请求的副作用相同。 </p>
<p>打个比方，如果你提交一个form会从<a href="http:///www.google.com">Google</a>上查询一个关键词，那么我们可以认为这个form是幂等的，因为1次提交和10次提交的副作用是差不多的（10次查询可能会多消耗一些电能）；如果你提交一个form是订购一个<a href="http://www.amazon.com/Hasbro-Transformers-Ultimate-Bumblebee-Figure/dp/B000OKXRQ0">终极大黄蜂（Utimate bumblebee）</a>，那么这就不是幂等的：要是你不小心多提交了1次form的话，你可能会被老婆乱骂，你不小心又提交了10次的话，你可能就破产了——一次提交和多次提交的副作用明显不同，所以这不是幂等的。</p>
<p>所以，一般来说，如果提交这个请求纯粹只是从服务端获取数据而不进行其他操作，并且多次提交不会有明显的副作用，应该使用get。比如：</p>
<ul>
    <li>搜索引擎的查询：<a href="http://www.google.com/search?q=yandixin">http://www.google.com/search?q=yandixin</a>；
    <li>分页：ArticleList.asp?Page=1。 </li>
</ul>
<p>如果提交这个请求会产生其它操作和影响，就应该使用post。比如：</p>
<ul>
    <li>修改服务器上数据库中的数据；
    <li>发送一封邮件；
    <li>删除一个文件。 </li>
</ul>
<p>另一个要考虑的因素是安全性。见2.1。</p>
<h1>5. 浏览器差异</h1>
<ul>
    <li>IE 6：URL长度限制为2083个字符；post之后，刷新页面不会自动重新post数据，会出现警告；<br />
    &nbsp;<br />
    并且，在后退的过程中有可能出现&#8220;Page has Expired&#8221;（通常是向自己post，然后后退时）：<br />
    &nbsp;<br />
    微软的技术支持人员<a href="http://www.thescripts.com/forum/thread314750.html">号称</a>&#8220;this is not a bug or problem specified to the ASP.NET but a security feature of the IE Browser&#8221;，并且说&#8220;You can also inform your users of this&#8221;，实在是荒唐。另外，<a href="http://support.microsoft.com/kb/183763">一篇KB</a>也提到这个问题，说将Response.CacheControl设为"Public"即可，经测试仅在第一次后退时有效。
    <li>IE 7：和IE 6相同；
    <li>Firefox 2.0.0.11：刷新页面不会自动重新post数据，会出现警告；<br />
    &nbsp;
    <li>Opera 9.24：正常（自动post数据）；
    <li>Safari 3.0.4：post之后，刷新页面、前进、后退都不会自动重新post数据，会出现警告。<br />
    &nbsp; </li>
</ul>
<h1>6. 参考</h1>
<ul>
    <li><a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html">Hypertext Transfer Protocol -- HTTP/1.1</a>，<a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.htm">Chapter 9 Method Definitions</a>
    <li><a href="http://www.cs.tut.fi/~jkorpela/forms/methods.html">Methods GET and POST in HTML forms - what's the difference </a>
    <li><a href="http://www.htmlhelp.com/faq/cgifaq.2.html#8">What is the difference between GET and POST </a>
    <li><a href="http://www.w3.org/TR/REC-html40/">HTML 4.01 Specification</a>（W3C Recommendation 24 December 1999），<a href="http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13">Section 17.13: Form submission</a>
    <li><a href="http://classicasp.aspfaq.com/forms/what-is-the-limit-on-querystring/get/url-parameters.html">What is the limit on QueryString / GET / URL parameters?</a>&nbsp; </li>
</ul>
</div>
 <img src ="http://www.blogjava.net/jjwwhmm/aggbug/315449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2010-03-15 11:20 <a href="http://www.blogjava.net/jjwwhmm/archive/2010/03/15/315449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转发: 闹腾的哥本哈根气候会议－娱乐版</title><link>http://www.blogjava.net/jjwwhmm/archive/2009/12/25/307230.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Fri, 25 Dec 2009 01:09:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2009/12/25/307230.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/307230.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2009/12/25/307230.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/307230.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/307230.html</trackback:ping><description><![CDATA[<p>如果一百多人在漏水的船上讨价还价谁该往外多舀水，那是明摆着的蠢，事实上没人会这么干，连船上那最自私最无耻的人，也会拿出最大公无私的精神拼命舀水的。</p>
<p>但是事情如果再复杂一点，就会有新鲜的现象了。如果船上的人算计一下，在这条船沉没前，他们有足够的时间安全抵达港口，危险属于下一船乘客时，有很多人就会停下来安静地欣赏海景了。</p>
<p>哪怕这条船在抵达港口前的确会沉没一部分，比如灌满一个叫&#8220;马尔代夫&#8221;的船舱，其他舱室的人，基本上都会无动于衷。</p>
<p>更复杂的是，如果这艘船超重，需要乘客们把身上的金银细软抛下船的话，扯蛋就来了。穷人们说，富人钱多经得起糟蹋你先扔，至少得再扔40%；富人则说穷鬼你那堆破烂儿又沉又不值钱你先扔；穷人说我扔也可以但你富人得拿出年收入的0.5%-1%，即3000块补偿给我，还得教会我发财致富的秘诀，富人说你丫做白日梦吧老子已经一年白给你100块了，多了别想，你救的不是我是你自己。</p>
<p>穷人说老子才刚坐这船没两天，你狗日富人坐好几年了，生生把新船坐成了破船，现在多出点血是天经地义的；富人说以前天杀的知道这船是会坐破的，再说如果不是我们富人天天捣鼓这船，你这帮农民今天还在刨地球，能懂航海术、看西洋景？今天这船要沉了也是我们发现的，要不你们这帮賤人淹死了都不知道咋回事。</p>
<p>蛋还没扯完，眼见船越来越漏的厉害。于是船客们聚到&#8220;日本房间&#8221;，穷人们靠着人多强行通过了一份《京都协议书》，要求富人赶紧扔东西，穷人却可以不扔。最富的富人米利坚说，这是明显的仇富嘛，天下哪有这道理，俺不玩了。穷人说你B一家最重，负担就占了全船的近1/5，你不扔谁扔？米利坚说我的东西是最重，但也最值钱。俺以全船1/4的值钱物件才占了1/5的重量，凭啥我扔？你们看看那叫拆哪的穷鬼，以不到3%的价值也占了近1/5的负担，为啥不让他多扔？</p>
<p>黑眼睛黑头发黄皮肤的拆哪一听急了：穷兄弟们别听他的，俺们可都是穷苦人家出身，你们要是把我推出来，以后你们中有人小偷小摸耍流氓谁罩着啊？好歹这船是大家的，你米利坚就是东西最多最重，这船也属你坐的时间最长次数最多，看我干啥？凭啥？你凭啥？这最怕船沉的不是咱穷棒子是富人，他们经不起大规模人员伤亡。</p>
<p>为了尽快把蛋扯完，船客们最近又在一间叫&#8220;丹麦&#8221;的房间开了一个会。据最新消息，把蛋扯完的机会已经很渺茫。最重大的成果将是形成一份《哥本哈根共识》，这份有所有船客签名的共识说：&#8220;我们都发现并且承认，这船在漏水，而且是会沉的。&#8221;</p>
<p>这份共识发表后，船客们纷纷接到恭喜电话，表扬他们表现出了高超的政治智慧，并且坚定地捍卫了国家利益。 </p>
FWD:转发: 闹腾的哥本哈根气候会议－娱乐版
 <img src ="http://www.blogjava.net/jjwwhmm/aggbug/307230.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2009-12-25 09:09 <a href="http://www.blogjava.net/jjwwhmm/archive/2009/12/25/307230.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转载：再谈创业者管哪个重要</title><link>http://www.blogjava.net/jjwwhmm/archive/2009/12/22/306904.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Tue, 22 Dec 2009 06:28:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2009/12/22/306904.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/306904.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2009/12/22/306904.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/306904.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/306904.html</trackback:ping><description><![CDATA[今天看了邵博士的这篇文章，感触颇丰，所以转过来<br />
<br />
http://shaoblog.com/2009/01/22/%e5%86%8d%e8%b0%88%e5%88%9b%e4%b8%9a%e8%80%85%e7%ae%a1%e5%93%aa%e4%b8%aa%e9%87%8d%e8%a6%81/<br />
<br />
<p>昨天QQ的马化腾到我们这边来聊天，谈到了创始人重视产品在企业成功的重要性。即使在QQ已经这么成功，市值近百亿美金的今天，他还花很多时间在产品上。听上去很简单也很自然，但是我看到很多创始人做不到。</p>
<p>创业者要管的太多了，产品，市场，销售，财务，技术，找人，炒人，公关。不可能每件事情都事必躬亲，一定有些需要交给手下领头。哪两件最重要？我觉得是找人和产品。别的事都可能找到好的人代劳，但产品和找人不行。</p>
<p>找到一个好的人太关键了。我从前写了很多：<a href="http://shaoblog.com/2007/05/30/returnee/">海龟还是土鳖？</a>，<a href="http://shaoblog.com/2007/04/04/if-cannot-hire/">招不到称心的人怎么办?</a>，<a href="http://shaoblog.com/2007/04/01/%E6%8B%9B%E6%80%8E%E4%B9%88%E6%A0%B7%E7%9A%84%E4%BA%BA/">招怎么样的人</a>，今天就不多说了。只加一句：找什么样的人，决定公司的文化，所以创业者是一定要自己做的。</p>
<p>找到好的人，可以一手代包市场，销售，财务，技术，公关（找到好的人，能放心的把我的一个部门让他管，知道他会管的比我更好时，感觉太好了！），但产品是一个公司的灵魂。它需要融会贯通：从市场这边了解目标用户是谁和他们的需求，平衡销售那边经常和市场部不同的意见，与技术讨论什么能做，什么不能做。其中有很多取舍，很多推动，不是创始人CEO，很难做好这个工作。另外，创始人应该是最了解用户的需求的人，因为他创业的激情就来自于为用户解决一个问题，增添一个价值。</p>
<p>做易趣时我产品放权太多。虽然我们那时的产品部很不错，但没有创始人每天的介入，他们的任务是不可能完成的。我给我们那时候2002年的产品打75分。2003年走了后，平台迁移到eBay后，分数就惨不忍睹了。网站改个字需要九个礼拜，改个功能需要在总部排队九个月。（这里的故事很长了，产品只是一部分，文化的变化更致命。以后有空和易趣那些老员工们应该一起写本书。）</p>
<p>放眼世界上翘楚的产品，AMAZON，APPLE，NINTENDO，他们的CEO或创始人都是注重产品，不放权的疯子。</p>
<br />
<br />
<br />
<p>上一篇<a href="http://shaoblog.com/2009/01/10/创业，管哪个事情最重要？/">创业，管哪个事情最重要？</a>引起了一些<a href="http://friendfeed.com/e/bcc2d888-c9fb-774c-214e-fe9d17a05586">有趣的争议</a>，关于产品还是市场重要。我觉得这个问题对创业者很关键，所以再来写一篇。ha，这个月写了两篇，为前几个月补过。</p>
<p>首先，问题不是说企业里哪个部门重要。一个企业的成功，是很多因素的乘法。乘法和加法不同：后者如有一个因素是零，对整体不一定有大影响，但前者里如果有个因素是零，结果是零 - 产品，市场做得再好，财务出问题，公司照样死。当企业成功是乘法时，讨论哪个部门重要，没什么意义。比较有意义的问题是：创业者哪个比较可以放权，哪个需要自己抓。（谢谢<a href="http://blog.donews.com/keso/archive/2009/01/18/1461216.aspx">keso</a>帮我澄清too。）这个问题太重要了，因为我坚信一个初创的企业，最重要的资源是创始人的时间和精力。我们现在谈的，是这个资源的分配问题。</p>
<p>第二，做产品，从来不是（或不应该是）空想的。我觉得产品部是公司最难的工作。它需要综合权衡各个部门的要求。</p>
<p>a）市场：我们的现有用户是这么样的人？他们的需求是什么？我们的潜在用户是谁？他们的需求是什么？很多时候，人（尤其是经理人）会太注重现有顾客，忽视潜在客户。人也会太注重用户能表达的需求（市场调查拿得到得），忽略用户不知道怎么表达的需求（需要靠创业的自觉来发掘的）。</p>
<p>b）销售：什么样的产品卖得掉，容易销售？在有些公司，市场和销售的目标用户是一样的。在有些公司，用户（主要用产品的人）和顾客（付钱的人）是不一样的。如何满足和权衡他们不同的需求？在易趣那时，用户是买家，顾客是卖家，他们的需求往往不同，甚至相反。</p>
<p>c）技术：那些产品容易做，那些难做？如何取舍时间vs功能？技术部会经常说：市场部要的功能不可能做，或需要太久。有时技术部有个好点子，能做个眩的新功能，市场部不要。相信谁的判断？</p>
<p>d）客服：用户很多的反馈和问题，需要多重视？什么是1%的不重要的用户提出来的，什么是我们的核心用户的要求，或是潜在的核心用户的问题（解决了这个问题，他就成了核心用户）？</p>
<p>还有很多例子可举。我的感觉是产品最最需要一个创始者以一个公司<strong>总体</strong>和<strong>长远</strong>的发展为目标，权衡各个部门的<strong>利益</strong>和<strong>偏见</strong>（甚至惯性或惰性），最终以创始者的<strong>直觉</strong>做决定。</p>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/306904.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2009-12-22 14:28 <a href="http://www.blogjava.net/jjwwhmm/archive/2009/12/22/306904.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>主业务流程+前中后的控制</title><link>http://www.blogjava.net/jjwwhmm/archive/2009/12/22/306889.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Tue, 22 Dec 2009 03:36:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2009/12/22/306889.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/306889.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2009/12/22/306889.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/306889.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/306889.html</trackback:ping><description><![CDATA[<p>产品设计的时候，往往是一个比较简单的东西，到后面弄的越来越复杂，甚至到最后没有人能够完整的描述这个产品，因为大家都被产品里繁多的细枝末叶搅得头晕眼花，最终迷失在&#8220;钻牛角尖&#8221;里.......<br />
我的体会是，一定要把主业务流程和业务的控制措施分开。主业务流程应该是简洁明了，可以依据输入、会话处理、输出、反馈的系统思想把一个业务比较清楚的描述出来。而控制措施则可以体现在输入端、会话处理中、输出端及反馈阶段上，对每一个阶段，都存在于这个阶段之前的控制，阶段之中的控制、阶段之后的控制。</p>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/306889.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2009-12-22 11:36 <a href="http://www.blogjava.net/jjwwhmm/archive/2009/12/22/306889.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>别太在意别人怎么想</title><link>http://www.blogjava.net/jjwwhmm/archive/2009/12/22/306886.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Tue, 22 Dec 2009 03:22:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2009/12/22/306886.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/306886.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2009/12/22/306886.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/306886.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/306886.html</trackback:ping><description><![CDATA[在意别人的评价，往往会在别人的逢迎夸奖中作出错误的决定，也会在别人的口诛笔伐中溃不成军。
<p>　　人如果太介意别人会怎么想，就会压抑自己的想法和创意。压抑会产生心理病变，会令你失去调适的能力，特别是紧要关头，需要作出决定性的响应时，会像发不动的汽车，令你有行不得也得行的慨叹。</p>
<p>　　我观察人的适应能力发现，越是在意别人的观感，越会对自己没有信心；越在意别人怎么想，越容易使自己的缺点变成严重负担。我知道，人必须了解别人会怎么想，那是人际互动，彼此同理，交流情谊的基本心理过程，缺乏它，人会变得刚愎自用，少一点知人的灵嗅。但如果你太介意别人的想法，就会失去伸展自我的机会，那么这个心结将成为压抑创意和破坏健康的元凶。</p>
<p>　　美国已逝的科学奇才费曼曾经说过一段自己的故事。他的妻子（他昵称她猫咪）一向很开朗，总有玩不完的花招，增添生活中不少情趣，在朋友中传为佳话。费曼在普林斯顿时，有一天接到一盒妻子寄来的铅笔，上面接着金色的字：&#8220;理查亲亲！我爱你。猫咪。&#8221;</p>
<p>　　费曼觉得这礼物是很好，但是按上一句亲昵的话，如果跟教授朋友讨论问题，忘在别人桌子上，别人会怎么想呢？他不好意思用这些笔。可是当时物质缺乏，舍不得浪费，所以刮掉一枝铅笔上的字来用。</p>
<p>　　第二天上午，费曼又收到一封妻子寄来的信，一开头就写着：&#8220;想把铅笔上的名字刮掉吗？这算什么？你难道不以拥有我的爱为荣吗？&#8221;然后是大写字体写着：&#8220;你管别人怎么想。&#8221;这段话大大感动了费曼，后来他写了一本书，记述着他们的感情、生活轶事和他自己在科学上的重大突破，就用&#8220;你管别人怎么想&#8221;当书名。</p>
<p>　　作为一位咨询工作者，我很早就注意到：在意别人的评价，往往会在别人的逢迎夸奖中作出错误的决定，也会在别人的口诛笔伐中溃不成军。这样的人无法坚持自己的卓见和判断。不过，更严重的是，太在意别人怎么想的人，心理压力总是很大。他每天面对着十目所视、十手所指的压力，总觉得别人时时刻刻都在注意自己的缺点或疏失。这使得一个人觉得退缩，失去积极主动的活力，当然连他的创意和主动性都会丧失。</p>
<p>　　这种畏缩是学习得来的，许多师长和父母经常对孩子说：&#8220;羞羞脸！你看别人会怎么想！&#8221;次数多了，就会养成孩子畏首畏尾的习惯。尤其在日常言行上，稍不恰当，就以别人会笑话来压抑孩子、批判孩子，部会造成严重的心理困扰。你只能就事实去告知孩了不当之点，要求他改进，或帮助他建立新行为，但不能拿别人来批判他，而造成屈辱。</p>
<p>　　有一位儿童，他经常张着大嘴巴。父母亲觉得不好看，就常常指责他：&#8220;你这模样，别人都会笑话你的！&#8221;这孩子来作咨询时，不留神还是张着日，但却因为长期被批评压抑而造成交友困难和惧学症来寻求协助。另外有一个孩子，因为父母亲常指责他功课不好，在亲戚朋友面前毫不留情地数落他，以致不敢会见亲友。</p>
<p>　　有一次，一位年轻人来找我咨询：他患有口吃，尤其在众人面前说话，舌头更是打结。他回忆说，&#8220;我在初中时说话稍有口吃，老师要我多练习，所以常要我上台讲话。我越是在意口吃，口吃就越严重。现在我在一家公司担任行销工作，常常为口吃而忧恼。上个星期，我向老板作演示文稿，简直说不出话来，羞死了。&#8221;经过仔细了解，确定他不是生理因素，于是我说：</p>
<p>　　&#8220;你这个毛病我也没办法，除非你各实当位口吃的推销员。&#8221;我接着仔细为他说明：</p>
<p>　　&#8220;要接受自己口吃的现实，毫无畏惧地表现自己是一位口吃的推销员，然后培养一些你在业务工作上的优点，例如热忱、信用、关怀等，把它结合成你的特殊性和个体。让许多人知道你，在商界里反而能引起别人对你的瞩目，化缺点为助力&#8221;我为他仔细解释，目的是要构建一个全新的态度：他不再介意别人对他的看法。</p>
<p>　　他开始学习接纳自己；坦然表现自己是一位有价值的口吃推销员。他不再为口吃而烦心，口吃这件事就再也不构成障碍。经过几个月，口吃的状况真的纾缓下来。</p>
<p>　　人有一种矛盾意向，你越怕的事它就越成为困扰。反之你处之泰然，把它表现出来给别人去看看它有多厉害，却反而减轻对症状。由此可知，越怕阳痿的人，越是勃不起来；越是处之泰然的，也就越不会产生毛病。越想隐藏自己的弱点，就越会构成焦虑和紧张，而强化了症状和困扰。</p>
<p>　　我们要有正确的教育理念：父母和师长当然要指正孩子的过错，但不能因错误而羞辱他。我们应多发现孩子的优点，从而建立他的信心，不要处处挑剔其缺点，令其惧怕畏缩，更而造成心理上的困扰。请注意！了解别人会怎么想是正确的，但如果太在意别人怎么想，就会产生麻烦。</p>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/306886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2009-12-22 11:22 <a href="http://www.blogjava.net/jjwwhmm/archive/2009/12/22/306886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>张亚勤：领导者的3种能力</title><link>http://www.blogjava.net/jjwwhmm/archive/2009/12/22/306885.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Tue, 22 Dec 2009 03:19:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2009/12/22/306885.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/306885.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2009/12/22/306885.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/306885.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/306885.html</trackback:ping><description><![CDATA[<p class="cc-lisence" style="line-height: 180%"><a href="http://creativecommons.org/licenses/by/3.0/deed.zh" target="_blank">版权声明</a>：转载时请以超链接形式标明文章原始出处和作者信息及<a href="http://bangzhuzhongxin.blogbus.com/logs/11205960.html" target="_blank">本声明</a><br />
<a href="http://davyyew.blogbus.com/logs/54473971.html">http://davyyew.blogbus.com/logs/54473971.html</a><br />
<br />
</p>
<p>摘自张亚勤劳的新书《变革中的思索》，P231</p>
<p>1）洞察力 -- 对这个产业的洞察力。</p>
<p>之所以放在首位，我觉得这是方向性的，它决定了生产效率。</p>
<p>&nbsp;</p>
<p>2）简化问题的能力 -- 把一个很难的、大家看起来很复杂的概念，用简单的语言表达出来。</p>
<p>技术出身的人，其实有一定优势，因为他们有着画图的丰富经历；而那些优秀的领导者，我发现了另一个共同的优点：经常使用<font color="#ff0000">生活中的比喻</font>。</p>
<p>我多次接触马云、卫哲、陈天桥等人，他们很少使用晦涩的词语、概念、术语来阐述自己的想法，相反倒是大量使用生活中的比喻，即便在公开演讲中也比比皆是。</p>
<p>随便举几个例子</p>
<p>- 用撒尿到江中来比喻精力分散；</p>
<p>- 用流行病的输入性、原生性来解释新、老员工对企业文化的影响；</p>
<p>- 用菜市场来比喻平台，杀鸡来类比平台上的服务，很好地解释&#8216;产业生态圈&#8217;的种种现象；</p>
<p>PS：我也常用&#8216;将钱存入银行&#8217;来类比&#8216;数据集中存贮&#8217;，从而打消客户对SaaS数据安全性的担忧</p>
<p>&nbsp;</p>
<p>如果说第一种能力还有些天赋的因素的话，那这第二种能力我觉得完全是可以锻炼出来的。</p>
<p>&nbsp;</p>
<p>3）判断能力 -- 大家都有不同的意见，这个能力考察你到底会选择哪个。缺的不是办法，缺的是选哪一个人的办法。</p>
<p>这个能力其实还需要2个前提能力：团队建设能力；勇于承担。</p>
<p>- 选择的前提是有多个办法，由团队/下属来提供；要让团队中的人勇于提好建议、出好方法，自然需要很强的团队建设。至今为止，我依然认为ALIBABA在这方面是最强的。</p>
<p>- 判断的结果并不一定是十拿九稳、一本万利（事实上这种好运很少，大部分情况是模棱两可、让人纠结），这时候挑战领导者的其实是&#8216;责任承担、为结果负责&#8217;的勇气。</p>
<p>&nbsp;</p>
<p>作为领导者，与其说需要&#8216;判断能力&#8217;，不如说需要&#8216;承担与果敢&#8217;。</p>
 <img src ="http://www.blogjava.net/jjwwhmm/aggbug/306885.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2009-12-22 11:19 <a href="http://www.blogjava.net/jjwwhmm/archive/2009/12/22/306885.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ISO8583接口的详细资料</title><link>http://www.blogjava.net/jjwwhmm/archive/2009/03/31/263041.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Tue, 31 Mar 2009 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2009/03/31/263041.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/263041.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2009/03/31/263041.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/263041.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/263041.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ISO8583包（简称8583包）是一个国际标准的包格式，最多由128个字段域组成，每个域都有统一的规定，并有定长与变长之分。8583包前面一段为位图，用来确定包的字段域组成情况。其中位图是8583包的灵魂，它是打包解包确定字段域的关键，而了解每个字段域的属性则是填写数据的基础。　　1、 位图描述如下：&#160;　　位图位置：1&#160;　　格式：定长&#160;　　类型：...&nbsp;&nbsp;<a href='http://www.blogjava.net/jjwwhmm/archive/2009/03/31/263041.html'>阅读全文</a><img src ="http://www.blogjava.net/jjwwhmm/aggbug/263041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2009-03-31 09:41 <a href="http://www.blogjava.net/jjwwhmm/archive/2009/03/31/263041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>时髦口头禅排行榜 </title><link>http://www.blogjava.net/jjwwhmm/archive/2009/03/27/262506.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Fri, 27 Mar 2009 13:22:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2009/03/27/262506.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/262506.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2009/03/27/262506.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/262506.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/262506.html</trackback:ping><description><![CDATA[<pre style="line-height: 1.3; font-size: 14px; background-color: #ffffff;">1. 你让我滚，我滚了。你让我回来，对不起，滚远了。<br />
<br />
2. 流氓不可怕，就怕流氓有文化...<br />
<br />
3. 走牛B的路，让傻 B去说吧！<br />
<br />
4. 开车无难事，只怕有新人！<br />
<br />
5. 穿别人的鞋走自己的路，让别人找鞋去吧 ！<br />
<br />
6. 矿难在检讨中继续，楼价在控制中上升！<br />
<br />
7. XP不发威，你当我是DOS啊！<br />
<br />
8. 英雄不问出路，流氓不看岁数！<br />
<br />
9. 好好活着，因为我们会死很久！！！<br />
<br />
10. 人又不聪明，还学人家秃顶！！！<br />
<br />
11. 没什么事不要找我，有事更不用找我。<br />
<br />
12. 宁和明白人打一架，不跟sb说句话。<br />
<br />
13. 再牛b的肖邦，也弹不出老子的悲伤！<br />
<br />
14. 只要锄头舞的好，那有墙角挖不倒？<br />
<br />
15. 连广告也信，读书读傻了吧！<br />
<br />
16. 要在江湖混，最好是光棍！！！<br />
<br />
17. 不要和我比懒，我懒得和你比。<br />
<br />
18. 早上长睡不起；晚上视睡如归！<br />
<br />
19. 女为悦己者容男为悦己者穷！<br />
<br />
20. 秃驴，敢跟贫道抢师太?<br />
<br />
21. 犯贱是普遍真理，你我只是其中之一。<br />
<br />
22. 唯女人与英语难过也，唯老婆与工作难找也！<br />
<br />
23. 赚别人的钱，让贫穷见鬼去吧！<br />
<br />
24. 就算是believe中间也藏了一个lie。<br />
<br />
25. 钱不是问题，问题是没钱！<br />
<br />
26. 怀才就像怀孕，时间久了才能让人看出来。<br />
<br />
27. 今天心情不好.我只有四句话想说.包括这句和前面的两句.我的话说完了。<br />
<br />
28. 人不能在一棵树上吊死，要在附近几棵树上多死几次试试。<br />
<br />
29. 走别人的路,让别人走投无路。<br />
<br />
30. 思想有多远，你就给我滚多远。<br />
<br />
31. 驴是的念来过倒。<br />
<br />
32. 上Google上百度一下。<br />
<br />
33. 你以为我会眼睁睁地看着你去送死啊！最多我闭上眼睛就是了。<br />
<br />
34. 请你以后不要在我面前说英文了，OK？<br />
<br />
35. 好久没有人把牛皮吹的这么清新脱俗了！<br />
<br />
36. 一觉醒来，天都黑了。<br />
<br />
37. 钱可以解决的问题都不是问题。<br />
<br />
38. 不吃饱哪有力气减肥啊？<br />
<br />
39. 问君能有几多愁，恰似一群太监上青楼。<br />
<br />
40. 钞票不是万能的，有时还需要信用卡。<br />
<br />
41. 我允许你走进我的世界，但决不允许你在我的世界里走来走去。<br />
<br />
42. 人怕出名猪怕壮，男怕没钱女怕胖。<br />
<br />
43. 珍惜生活，上帝还让你活着，就肯定有他的安排。<br />
<br />
44. 工作的最高境界就是看着别人上班，领着别人的工资。<br />
<br />
45. 爱情就像便便，水一冲就再也回不来了~爱情就像便便，来了之后挡也挡不住~爱情就<br />
像便便，每次都一样又不太一样~爱情就像便便，有时努力了很久却只是个屁！<br />
<br />
46、过去流氓在深山，现在流氓在公安！<br />
<br />
47、长着翅膀的不一定是天使，有时候是鸟人。<br />
<br />
48、站的高，尿的远。<br />
<br />
49、你是用这张嘴吃饭的吗？<br />
<br />
50、我一巴掌把你踢出去。<br />
<br />
51、此地禁止小便，违者没收作案工具。<br />
<br />
52、你可以像猪一样的生活，但你永远都不能像猪那样快乐！<br />
<br />
53、此为中华而努力读书！一包中华好多钱啊！<br />
<br />
54、 一炮而红，是形容女艺人的！<br />
</pre>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/262506.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2009-03-27 21:22 <a href="http://www.blogjava.net/jjwwhmm/archive/2009/03/27/262506.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>贫穷，才是真的财富</title><link>http://www.blogjava.net/jjwwhmm/archive/2009/03/23/261552.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Mon, 23 Mar 2009 09:50:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2009/03/23/261552.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/261552.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2009/03/23/261552.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/261552.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/261552.html</trackback:ping><description><![CDATA[现在没车，晚上回去挺晚，到家了发现老婆为了等我回来吃饭，守在饭桌边菜凉了饿了也不动一下筷子，好感动啊。如果有了钱，每天饭来张口，衣来伸手，这样的幸福到哪找去？<br />
如果两个人能好好一起过没钱的日子，这种日子在老的时候就是最好的回忆，成为心里永远最宝贵的财富！
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/261552.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2009-03-23 17:50 <a href="http://www.blogjava.net/jjwwhmm/archive/2009/03/23/261552.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>爆强回帖，雷死人</title><link>http://www.blogjava.net/jjwwhmm/archive/2009/03/18/260480.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Wed, 18 Mar 2009 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2009/03/18/260480.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/260480.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2009/03/18/260480.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/260480.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/260480.html</trackback:ping><description><![CDATA[<table width="562">
    <tbody>
        <tr valign="top">
            <td><font face="仿宋_GB2312" color="#444444" size="4">1、变态楼主：养条狗和养一个男人哪个合算？</font>
            <p><font face="仿宋_GB2312" color="#444444" size="4">暴强回复：大婶，即使你能把男人当狗使，但你敢把狗当男人使不？</font></p>
            </td>
        </tr>
    </tbody>
</table>
&nbsp;<br />
<p><font face="仿宋_GB2312" color="#444444" size="4">2.变态楼主：男人你要李宇春还是章子怡？</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">暴强回复：一个公鸡，一个野鸡，都不选</font>&nbsp;<br />
</p>
<p><font face="仿宋_GB2312" color="#444444" size="4">3.变态楼主：通过海南矿泉水喝死人事件，<wbr>可以看到中国的食品安全堪忧，矿泉水也能喝死人？<wbr>不是有QS标志吗？</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">暴强回复：弱弱的问一下，</font><font face="Courier New" color="#444444" size="4">QS</font><font face="仿宋_GB2312" color="#444444" size="4">是不是去死的意思？</font>&nbsp;<br />
</p>
<p><font face="仿宋_GB2312" color="#444444" size="4">4.变态楼主：一学生，成绩年年倒数第一，常与人打架，<wbr>按领导要求老师想给学生好听一点的期末评语，怎么写啊？</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">　暴强回复：该生成绩稳定，动手能力强。</font>&nbsp;<br />
</p>
<p><font face="仿宋_GB2312" color="#444444" size="4">5.说说中国的30分钟新闻联播。</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">　暴强回复：有什么说的：前十分钟，领导们很忙。中十分钟，<wbr>全国人民都很幸福。后十分钟，<wbr>世界上其它国家人民都生活在水深火热之中。</font>&nbsp;<br />
</p>
<p><font face="仿宋_GB2312" color="#444444" size="4">6.变态楼主：都40多了还有许多事不明白该问谁？</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">　暴强回复：外事问谷歌，内事问百度，房事问天涯！</font>&nbsp;<br />
</p>
<p><font face="仿宋_GB2312" color="#444444" size="4">7.变态楼主：奥运口号&#8220;同一个世界，同一个梦想！&#8221;</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">　暴强回复：乖乖，麻将国粹无处不在，倒过来看居然是&#8220;<wbr>想摸个一筒，就是个一筒！&#8221;</font>&nbsp;<br />
</p>
<p><font face="仿宋_GB2312" color="#444444" size="4">8.天*涯楼主：从来都觉得蝎子精是整部《西游记》<wbr>里最美的女人，当蝎子精把唐僧逼到床上撩拨时，<wbr>我心下不住地为唐僧鼓劲：从了，从了，咱就从了吧！但关键时</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">刻，可恶的悟空出现了&#8230;&#8230;</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">　　天</font><font face="Courier New" color="#444444" size="4">*</font><font face="仿宋_GB2312" color="#444444" size="4">涯回复</font><font face="Courier New" color="#444444" size="4">12</font><font face="仿宋_GB2312" color="#444444" size="4">：唉，要是换好色的八戒出现就好了！</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">　　天</font><font face="Courier New" color="#444444" size="4">*</font><font face="仿宋_GB2312" color="#444444" size="4">涯回复</font><font face="Courier New" color="#444444" size="4">13</font><font face="仿宋_GB2312" color="#444444" size="4">：嗯，八戒出现了，这次改蝎子精不从了&#8230;&#8230;</font>&nbsp;<br />
</p>
<p><font face="仿宋_GB2312" color="#444444" size="4">9.天*涯楼主：怀疑老婆红杏出墙，但苦于没证据&#8230;&#8230;</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">　天</font><font face="Courier New" color="#444444" size="4">*</font><font face="仿宋_GB2312" color="#444444" size="4">涯回复：如果你没本事做陈冠希，那就做谢霆峰吧</font>&nbsp;<br />
</p>
<p><font face="仿宋_GB2312" color="#444444" size="4">10.天*涯楼主：我们的GJ到底是法制还是人治？</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">　　天</font><font face="Courier New" color="#444444" size="4">*</font><font face="仿宋_GB2312" color="#444444" size="4">涯沙发：不是法治，也不是人治，而是治人，<wbr>并且初级阶段一百年不变&#8230;&#8230;</font>&nbsp;<br />
</p>
<p><font face="仿宋_GB2312" color="#444444" size="4">11.论坛楼主：该死的理发店把我头剪坏了！大家出点损招，<wbr>要求破坏性越大越好，动静越小越好，因为是我一个人去。</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">　论坛地下室：半夜三更，月黑风高，静静地、轻轻地，<wbr>一个人吊死在理发店门口&#8230;&#8230;</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">12.论坛楼主：为什么生下的孩子要跟父亲一个姓？</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">　论坛沙发：因为取款机里吐出的钱归插卡人所有。</font>&nbsp;<br />
</p>
<p><font face="仿宋_GB2312" color="#444444" size="4">13.王小丫跟陈章良结婚，请用四个字评论。</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">　</font><font face="Courier New" color="#444444" size="4"> </font><font face="仿宋_GB2312" color="#444444" size="4">论坛回复：丫从良了！</font>&nbsp;<br />
</p>
<p><font face="仿宋_GB2312" color="#444444" size="4">14.论坛楼主：听到一特好听的歌，歌词只记得是&#8220;一个芝麻糕，<wbr>不如一针细&#8221;，求歌名啊！</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">论坛回复：你可知</font><font face="Courier New" color="#444444" size="4">Macau</font><font face="仿宋_GB2312" color="#444444" size="4">，不是我真姓&#8230;&#8230;－</font><font face="Courier New" color="#444444" size="4">_</font><font face="仿宋_GB2312" color="#444444" size="4">－</font>&nbsp;<br />
</p>
<p><font face="仿宋_GB2312" color="#444444" size="4">15.天*涯楼主：请用一句话形容中国国家地震台。</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">　</font><font face="Courier New" color="#444444" size="4"> </font><font face="仿宋_GB2312" color="#444444" size="4">天</font><font face="Courier New" color="#444444" size="4">*</font><font face="仿宋_GB2312" color="#444444" size="4">涯回复：事后诸葛亮，事前猪一样！</font>&nbsp;<br />
</p>
<p><font face="仿宋_GB2312" color="#444444" size="4">16.楼主：我已经一年滴食未进了，还是活的好好的！</font><font face="Courier New" color="#444444" size="4">MOP</font><font face="仿宋_GB2312" color="#444444" size="4">的网<wbr>友，你们落后了，难道你们不觉得每天还要吃三餐很麻烦吗，<wbr>我现在每天只需晒这么</font><font face="Courier New" color="#444444" size="4">10</font><font face="仿宋_GB2312" color="#444444" size="4">几分钟太阳就几天都精力旺盛了。哎，<wbr>你们真是一群凡夫俗子。</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">　　回复：植物都会打字</font><font face="Courier New" color="#444444" size="4">.</font><font face="仿宋_GB2312" color="#444444" size="4">汗</font><font face="Courier New" color="#444444" size="4">!!!</font>&nbsp;<br />
</p>
<p><font face="仿宋_GB2312" color="#444444" size="4">17.天*涯楼主：<wbr>请问北京是如何体现本次奥运会为绿色人文奥运的？</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">　天</font><font face="Courier New" color="#444444" size="4">*</font><font face="仿宋_GB2312" color="#444444" size="4">涯沙发：不是请谢霆锋来唱歌了吗？</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">18.中日韩三国难道非要采取敌视行为对待彼此，<wbr>就不能心平气和地坐下来谈问题吗？</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">　　沙发：不能！因为日</font><font face="Courier New" color="#444444" size="4"> </font><font face="仿宋_GB2312" color="#444444" size="4">本人和中国人谈得投机的时候，只有当话题是关于韩国人时；日</font><font face="Courier New" color="#444444" size="4"> </font><font face="仿宋_GB2312" color="#444444" size="4">本人和韩国人谈得投机的时候，只有当话题是关于中国人时；<wbr>中国人和韩国人能谈得投机的时候，只有当话题是日本人时！</font>&nbsp;<br />
</p>
<p><font face="仿宋_GB2312" color="#444444" size="4">19..LZ：你看我的头像牛B么？</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">沙发：像。</font>&nbsp;<br />
</p>
<p><font face="仿宋_GB2312" color="#444444" size="4">20..楼主：想问问各位姐妹，BF和前女友一起买的东西，<wbr>比如对戒，项链，手环一类的，是留着还是扔掉？扔了实在是&#8230;&#8230;<wbr>挺贵的东西，不扔看着就闹心！</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">沙发：庸人自扰！她的前男友你不也在用吗？</font>&nbsp;<br />
</p>
<p><font face="仿宋_GB2312" color="#444444" size="4">21.天*涯楼主：据我考证，<wbr>古代男人们去青楼并不是要跟女子们发生关系。<wbr>事实上大多数艺妓都是才艺出众、才貌双全的，飞舞唱曲，<wbr>吟诗诵词，极为风雅。男人们不过去坐一坐，喝几杯清茶，<wbr>吃几块点心，听几首小曲，下下棋，吟吟诗，喝点小酒什么</font></p>
<p><font face="仿宋_GB2312" color="#444444" size="4">的，然后就离开了。</font></p>
<p><font face="黑体" size="2">　</font><font face="仿宋_GB2312" color="#444444" size="4">天</font><font face="Courier New" color="#444444" size="4">*</font><font face="仿宋_GB2312" color="#444444" size="4">涯回复：哦，谢谢楼主的解释，<wbr>原来古代的青楼就是今天的北影。</font></p>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/260480.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2009-03-18 14:46 <a href="http://www.blogjava.net/jjwwhmm/archive/2009/03/18/260480.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不要在无聊中老去</title><link>http://www.blogjava.net/jjwwhmm/archive/2009/03/18/260367.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Wed, 18 Mar 2009 00:55:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2009/03/18/260367.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/260367.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2009/03/18/260367.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/260367.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/260367.html</trackback:ping><description><![CDATA[ <img src ="http://www.blogjava.net/jjwwhmm/aggbug/260367.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2009-03-18 08:55 <a href="http://www.blogjava.net/jjwwhmm/archive/2009/03/18/260367.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[ZZ]2008年最龌龊语录50句 </title><link>http://www.blogjava.net/jjwwhmm/archive/2009/03/17/260343.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Tue, 17 Mar 2009 14:21:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2009/03/17/260343.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/260343.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2009/03/17/260343.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/260343.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/260343.html</trackback:ping><description><![CDATA[<pre style="line-height: 1.3; font-size: 14px; background-color: #ffffff;">001◎老鼠一发威，大家都是病猫。 <br />
002◎和一MM争论鲸鱼是不是鱼，最后我说&#8220;曰本人也带个人字&#8221;，她这才同意鲸鱼不<br />
是鱼。 <br />
003◎男人膝下有黄金，我把整个腿都切下来了，连块铜也没找着！ <br />
004◎春天我把玉米埋在土里，到了秋天我就会收获很多玉米。春天我把老婆埋在土里<br />
，到了秋天我就会&#8230;被枪毙！ <br />
005◎如果你看到面前的阴影，别怕，那是因为你的背后有阳光！ <br />
006◎踏遍青楼人未老，请用汇仁肾宝。 <br />
007◎听君一席话，省我十本书！ <br />
008◎0岁出场亮相，10岁天天向上。20岁远大理想，30岁发奋图强。40岁基本定向，<br />
50岁处处吃香。60岁打打麻将，70岁处处闲逛。80岁拉拉家常，90岁挂在墙上！ <br />
009◎脱了衣服我是禽兽，穿上衣服我是衣冠禽兽！ <br />
010◎师太，你就从了老衲吧！&#8230;很久很久以后&#8230;师太，你就饶了老衲吧！ <br />
011◎&#8220;亲爱的，我&#8230;我怀孕了&#8230;三个月了，不过你放心，不是你的，不用你负责&#8230;&#8230;<br />
&#8221; <br />
012◎我们产生一点小分歧：她希望我把粪土变黄金，我希望她视黄金如粪土。 <br />
013◎读10年语文，不如聊半年QQ。 <br />
014◎早晨懒床，遂从口袋里掏出6枚硬币：如果抛出去六个都是正面，我就去上课！<br />
思躇良久，还是算了，别冒这个险了&#8230;&#8230; <br />
015◎我花8万买了个西周陶罐，昨儿到《鉴宝》栏目进行鉴定，专家严肃地说：&#8220;这<br />
哪是西周的？这是上周的！&#8221; <br />
016◎我能容忍身材是假的，脸是假的，胸是假的，臀是假的！！！但就是不容忍钱是<br />
假的！！！！ <br />
017◎士为知己者装死，女为悦己者整容。 <br />
018◎长大了要嫁给唐僧，能玩就玩，不能玩就把他吃掉。 <br />
019◎一山不能容二虎，除非一公和一母。 <br />
020◎千万别等到人人都说你丑时才发现自己真的丑。 <br />
021◎如果朋友可以出卖，每个值五块的话，我也能发笔小财了。 <br />
022◎征婚启事：要求如下，A活的，B女的。 <br />
023◎给点阳光我就腐烂。 <br />
024◎要适当吃一点，才有劲减肥啊。 <br />
025◎摇啊摇，摇到奈何桥。 <br />
026◎命运负责洗牌，但是玩牌的是我们自己！ <br />
027◎问：你喜欢我哪一点？答：我喜欢你离我远一点！ <br />
028◎你快回来，我一人忽悠不来！ <br />
029◎生活就像宋祖德的嘴，你永远都不知道下一个倒霉的会是谁~~~ <br />
030◎跌倒了，爬起来再哭~~~ <br />
031◎世界上难以自拔的，除了牙齿，还有爱情。 <br />
032◎一恐龙路过西安交大时上了趟厕所，出来后她呜咽道：&#8220;555，这辈子终于不愁<br />
嫁不出去了&#8230;&#8230;&#8221; <br />
033◎生，容易。活，容易。生活，不容易。 <br />
034◎吾表兄，年四十余。始从文，连考三年而不中。遂习武，练武场上发一矢，中鼓<br />
吏，逐之出。改学医，自撰一良方，服之，卒。 <br />
035◎问君能有几多愁，恰似一群太监上青楼&#8230;&#8230; <br />
036◎吾生也有涯，而吃也无涯~~~ <br />
037◎想污染一个地方有两种方法：垃圾，或是钞票！ <br />
038◎年轻的时候，我们常常冲着镜子做鬼脸；年老的时候，镜子算是扯平了。 <br />
039◎你瞎了眼啊？这么大的盾牌你看不见，偏偏要把石头朝我脑袋上扔！ <br />
040◎出问题先从自己身上找原因，别一便秘就怪地球没引力。 <br />
041◎拍脑袋决策，拍胸脯保证，拍屁股走人。 <br />
042◎我们走得太快，灵魂都跟不上了&#8230;&#8230; <br />
043◎不要和地球人一般见识~~~ <br />
044◎女孩从处女到女人只要一次并成功，男孩从处男变男人需要反复的磨练！ <br />
045◎出来混，老婆迟早是要换的！ <br />
046◎小时候我以为自己长大后可以拯救整个世界，等长大后才发现整个世界都拯救不<br />
了我&#8230;&#8230; <br />
047◎有钱的都是大爷！但是欠钱不还的更是！ <br />
048◎我就算是一只癞蛤蟆，我也决不娶母癞蛤蟆。 <br />
049◎生前何必久睡，死后自会长眠&#8230;&#8230; <br />
050◎不想当厨子的裁缝，不是好司机。 <br />
</pre>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/260343.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2009-03-17 22:21 <a href="http://www.blogjava.net/jjwwhmm/archive/2009/03/17/260343.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>要挖满足下面条件的一个人，可以吗？</title><link>http://www.blogjava.net/jjwwhmm/archive/2009/03/16/260059.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Mon, 16 Mar 2009 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2009/03/16/260059.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/260059.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2009/03/16/260059.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/260059.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/260059.html</trackback:ping><description><![CDATA[要求:<br />
1.对Unix系统管理,网络,数据库,安全,分布式系统开发等各方面技术都有一定涉猎及经验<br />
2.精通一门编程语言,如Java,C,Php等<br />
3.精通企业系统集成设计模式<br />
3.对互联网有深刻认识，对电子商务,SNS,SAAS,支付,CRM,ERP等行业有过从业经验或有一定理解，熟悉主流电子商务网站的业务模式<br />
4.至少要有一个大型系统的系统分析/设计经验，有过百万级别会员数量以上系统的分析、设计经验者更佳<br />
5.至少有一个产品的完整开发经验，包括需求分析,产品设计,系统设计,程序开发,3人以上的开发团队管理,软件配置管理,质量控制,产品运营等各方面工作都有一定理解及经验<br />
6.优秀的口语及书面沟通表达能力,能熟练使用Word,PowerPoint,Project,UML工具编写各种类型文档,能熟练阅读英文&nbsp;<br />
7.有自己创业经验者优先
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/260059.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2009-03-16 17:36 <a href="http://www.blogjava.net/jjwwhmm/archive/2009/03/16/260059.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[zz]Installing XMMS on Ubuntu 8.04</title><link>http://www.blogjava.net/jjwwhmm/articles/254746.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Sun, 15 Feb 2009 05:35:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/articles/254746.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/254746.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/articles/254746.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/254746.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/254746.html</trackback:ping><description><![CDATA[<h2><a href="http://blog.xanda.org/?p=436" rel="bookmark" title="Permanent Link: Installing XMMS on Ubuntu 8.04">Installing XMMS on Ubuntu 8.04</a></h2>
<p>After
Gentoo and Slackware, now is the time for Ubuntu removing XMMS packages
from their repo. How SAD! And for those who still want XMMS installed
in their Ubuntu, here is the tip.</p>
<p>This this is originally written by <a href="http://blog.sartek.net/2008/04/install-xmms-on-ubuntu-804-hardy-heron.html">Sartek</a> and modified by me</p>
<p>Update your packages list</p>
<div class="wp_syntax">
<div class="code">
<pre class="bash bash" style="font-family: monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> update</pre>
</div>
</div>
<p>Now install <a href="apt:build-essential">build-essential</a></p>
<div class="wp_syntax">
<div class="code">
<pre class="bash bash" style="font-family: monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> build-essential</pre>
</div>
</div>
<p>Alright, now we need to install the XMMS&#8217;s dependencies</p>
<div class="wp_syntax">
<div class="code">
<pre class="bash bash" style="font-family: monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> autotools-dev automake1.9 libtool <span style="color: #c20cb9; font-weight: bold;">gettext</span> libasound2-dev libaudiofile-dev libgl1-mesa-dev libglib1.2-dev libgtk1.2-dev libesd0-dev libice-dev libmikmod2-dev libogg-dev libsm-dev libvorbis-dev libxxf86vm-dev libxml-dev libssl-dev</pre>
</div>
</div>
<p>Now create a working directory and change into that directory</p>
<div class="wp_syntax">
<div class="code">
<pre class="bash bash" style="font-family: monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> ~<span style="color: #000000; font-weight: bold;">/</span>build<br />
<span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>build</pre>
</div>
</div>
<p>Download XMMS sources:</p>
<div class="wp_syntax">
<div class="code">
<pre class="bash bash" style="font-family: monospace;"><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>xmms.org<span style="color: #000000; font-weight: bold;">/</span>files<span style="color: #000000; font-weight: bold;">/</span>1.2.x<span style="color: #000000; font-weight: bold;">/</span>xmms-1.2.11.tar.gz</pre>
</div>
</div>
<p>Extract the file and enter the extracted directory</p>
<div class="wp_syntax">
<div class="code">
<pre class="bash bash" style="font-family: monospace;"><span style="color: #c20cb9; font-weight: bold;">tar</span> xvf xmms-1.2.11.tar.gz<br />
<span style="color: #7a0874; font-weight: bold;">cd</span> xmms-1.2.11<span style="color: #000000; font-weight: bold;">/</span></pre>
</div>
</div>
<p>Run configure with &#8211;prefix=/usr</p>
<div class="wp_syntax">
<div class="code">
<pre class="bash bash" style="font-family: monospace;">.<span style="color: #000000; font-weight: bold;">/</span>configure --<span style="color: #007800;">prefix</span>=<span style="color: #000000; font-weight: bold;">/</span>usr</pre>
</div>
</div>
<p><span style="color: #ff0000;">In my case</span> (Intel Pentium Core Duo), I&#8217;ve enable CFLAGS options for processor optimization</p>
<div class="wp_syntax">
<div class="code">
<pre class="bash bash" style="font-family: monospace;"><span style="color: #007800;">CFLAGS</span>=<span style="color: #ff0000;">"-march=prescott -O2 -pipe -fomit-frame-pointer"</span> .<span style="color: #000000; font-weight: bold;">/</span>configure --<span style="color: #007800;">prefix</span>=<span style="color: #000000; font-weight: bold;">/</span>usr --enable-<span style="color: #007800;">gnutls</span>=<span style="color: #c20cb9; font-weight: bold;">yes</span></pre>
</div>
</div>
<p>You can simply use the command without the CFLAGS above, or if you
want to optimize the pidgin to suit your processor, you can refer to <a href="http://gentoo-wiki.com/Safe_Cflags">Safe_Cflags page</a> (Gentoo.. uhukk..)</p>
<p>Now compile it and install it</p>
<div class="wp_syntax">
<div class="code">
<pre class="bash bash" style="font-family: monospace;"><span style="color: #c20cb9; font-weight: bold;">make</span><br />
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span></pre>
</div>
</div>
<p>Now lets create the shortcut in your Gnome Menu</p>
<p>Right click on your Gnome Menu, and click on Edit Menu and follow these pictures:</p>
<p style="text-align: center;"><img class="aligncenter" src="http://img.xanda.org/galleries/xanda-install-xmms.png" alt="" /></p>
<p style="text-align: center;"><img class="aligncenter" src="http://img.xanda.org/galleries/xanda-install-xmms-2.png" alt="" /></p>
<p>Finish! now just simply remove your build (working) directory</p>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/254746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2009-02-15 13:35 <a href="http://www.blogjava.net/jjwwhmm/articles/254746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>servlet中重定向的错误:IllegalStateException</title><link>http://www.blogjava.net/jjwwhmm/archive/2009/01/22/252364.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Thu, 22 Jan 2009 08:28:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2009/01/22/252364.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/252364.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2009/01/22/252364.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/252364.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/252364.html</trackback:ping><description><![CDATA[今天写了个servlet，在service方法中要重定向到另一个url地址，结果报错：<br />
java.lang.IllegalStateException<br />
&nbsp;org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)<br />
........<br />
&nbsp;javax.servlet.http.HttpServlet.service(HttpServlet.java:803)<br />
&nbsp;org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)<br />
最后检查发现是因为在service方法中第一行调用了super.service(req,rep)方法导致的错误.<br />
这个细节以前没有注意到,特此随笔记录.
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/252364.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2009-01-22 16:28 <a href="http://www.blogjava.net/jjwwhmm/archive/2009/01/22/252364.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>proftpd服务启动的问题 Starting proftpd: execvp: No such file or directory</title><link>http://www.blogjava.net/jjwwhmm/archive/2009/01/22/252302.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Thu, 22 Jan 2009 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/archive/2009/01/22/252302.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/252302.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/archive/2009/01/22/252302.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/252302.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/252302.html</trackback:ping><description><![CDATA[<p>把profpd源代码目录下的proftpd-1.3.1/contrib/dist/rpm/proftpd.init.d拷贝到/etc/rc.d/init.d/proftpd<br />
在/etc/rc.d/rc3.d中建立proftpd的启动停止链接：<br />
&nbsp;&nbsp;&nbsp; ln -s ../init.d/proftpd S86proftpd<br />
&nbsp;&nbsp;&nbsp; ln -s ../init.d/proftpd K18proftpd<br />
然后，/sbin/service proftpd start<br />
报错误：Starting proftpd: execvp: No such file or directory<br />
经检查，是proftpd.init.d脚本中的路径有问题:<br />
&nbsp; PATH="$PATH:/usr/local/sbin"<br />
而我的proftpd安装在/usr/local/proftpd目录下<br />
修改上面的路径为PATH="$PATH:/usr/local/proftpd/sbin",重新启动，问题解决<br />
<br />
</p>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/252302.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2009-01-22 09:41 <a href="http://www.blogjava.net/jjwwhmm/archive/2009/01/22/252302.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转载)使用LVS（Linux Virtual Server）在Linux上搭建负载均衡的集群服务</title><link>http://www.blogjava.net/jjwwhmm/articles/250996.html</link><dc:creator>pony</dc:creator><author>pony</author><pubDate>Mon, 12 Jan 2009 09:38:00 GMT</pubDate><guid>http://www.blogjava.net/jjwwhmm/articles/250996.html</guid><wfw:comment>http://www.blogjava.net/jjwwhmm/comments/250996.html</wfw:comment><comments>http://www.blogjava.net/jjwwhmm/articles/250996.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jjwwhmm/comments/commentRss/250996.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jjwwhmm/services/trackbacks/250996.html</trackback:ping><description><![CDATA[使用LVS（Linux Virtual Server）在Linux上搭建负载均衡的集群服务<br />
<br />
<pre>一、基于于NAT的LVS的安装与配置。
1. 硬件需求和网络拓扑
________
|        |
| 客户端 | (互连网)
|________|
|
(router)
202.99.59.1(director GW)
|
|
(202.99.59.110)Virtual IP
____|_____
|          | (控制器有两块网卡)
| director |
|__________|
(192.168.10.254)DIP
|
-----------------+----------------
|                |               |
RIP1             RIP2            RIPx
____________     ____________     ____________
|192.168.10.1|   |192.168.10.2|   |192.168.10.x|
|realserver1 |   |realserver2 |   |realserverx |
|____________|   |____________|   |____________|
</pre>
<p>2.下载软件：
<p>(1)、内核源代码：需要下载2.4.23以后版本的内核源代码。下载地址为http://www.kerner.org。本文中下载的内核源代为：linux-2.4.30.tar.bz2。
<p>(2)、用户配置工具ipvsadm，下载地址：http://www.linuxvirtualserver.org/software/ipvs.html。本文下载的是：http://www.linuxvirtualserver.org/software/kernel-2.4/ipvsadm-1.21-11.tar.gz
<p>3.安装软件：
<p>在director(控制器，202.99.59.110)上安装支持LVS的内核和配置工具ipvsadm。
<p>(1)、在内核配置时以下选项必须选：<br />
<pre>Networking options  ---&gt;
&lt;*&gt; Packet socket
&lt;*&gt; Netlink device emulation
[*] TCP/IP networking
[*]   IP: advanced router
[*] Network packet filtering (replaces ipchains)
IP: Netfilter Configuration  ---&gt;
&lt;*&gt; Connection tracking (required for masq/NAT)
&lt;*&gt; IP tables support (required for filtering/masq/NAT)
&lt;*&gt;   Full NAT
&lt;*&gt;     MASQUERADE target support
IP: Virtual Server Configuration  ---&gt;
&lt;*&gt; virtual server support (EXPERIMENTAL)
(12)   IPVS connection table size (the Nth power of 2)
--- IPVS scheduler
&lt;M&gt;   round-robin scheduling
&lt;M&gt;   weighted round-robin scheduling
&lt;M&gt;   least-connection scheduling
&lt;M&gt;   weighted least-connection scheduling
&lt;M&gt;   locality-based least-connection scheduling
&lt;M&gt;   locality-based least-connection with replication scheduling
&lt;M&gt;   destination hashing scheduling
&lt;M&gt;   shortest expected delay scheduling
&lt;M&gt;   never queue scheduling
</pre>
<p>(2)、编译和安装内核
<p>分别执行: make bzImage;make modules;make modules_install；然后编辑启动配置文件，重新启动系统，在启动时选择新的内核。
<p>系统启动后要确认内核是否支持ipvs，只需要执行下面的命令即可：grep ip_vs_init /boot/System.map
<p>(3)、编译和安装ipvsadm <br />
ln -s /usr/src/linux-2.4.30 /usr/src/linux tar -zxvf ipvsadm-1.21-11.tar.gz<br />
cd ipvsadm-1.21-11<br />
make all<br />
make install<br />
<p>然后运行：ipvsadm --version命令，应该有下面的内容输出：<br />
ipvsadm v1.21 2004/02/23 (compiled with popt and IPVS v1.0.12)
<p>4. 配置LVS
<p>(1)、在202.99.59.110上：<br />
echo "1" &gt;/proc/sys/net/ipv4/ip_forward<br />
echo "0" &gt;/proc/sys/net/ipv4/conf/all/send_redirects<br />
echo "0" &gt;/proc/sys/net/ipv4/conf/default/send_redirects<br />
echo "0" &gt;/proc/sys/net/ipv4/conf/eth0/send_redirects<br />
echo "0" &gt;/proc/sys/net/ipv4/conf/eth1/send_redirects<br />
<p>清除ipvsadm表：<br />
/sbin/ipvsadm -C <br />
<p>使用ipvsadm安装LVS服务<br />
#add http to VIP with rr sheduling<br />
/sbin/ipvsadm -A -t 202.99.59.110:80 -s rr <br />
<p>增加第一台realserver：<br />
#forward http to realserver 192.168.10.1 using LVS-NAT (-m), with weight=1 <br />
/sbin/ipvsadm -a -t 202.99.59.110:80 -r 192.168.10.1:80 -m -w 1
<p>增加第二台realserver：<br />
#forward http to realserver 192.168.10.2 using LVS-NAT (-m), with weight=1 <br />
/sbin/ipvsadm -a -t 202.99.59.110:80 -r 192.168.10.2:80 -m -w 1
<p>&nbsp;</p>
<p>(2)、realserver配置<br />
在192.168.10.1(realserver1)和192.168.10.2(realserver2)上分别将其网关设置为192.168.10.254，并分别启动apache服务。
<p>在客户端使用浏览器多次访问：http://202.99.59.110/，然后再202.99.59.110上运行ipvsadm命令，应该有类似下面的输出：<br />
<pre>IP Virtual Server version 1.0.12 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-&gt; RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  202.99.59.110:http rr
-&gt; 192.168.10.1:http           Masq    1      0          33
-&gt; 192.168.10.2:http           Masq    1      0          33
</pre>
<p>从上面的结果可以看出，我们的LVS服务器已经成功运行。
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>二、基于直接路由(DR)的LVS的配置
<pre>1.硬件需求和网络拓扑：
________
|        |
| 客户端 | (互连网)
|________|
|
(router)
202.99.59.1(director GW)
|
__________    |
|          |   |   (VIP=202.99.59.110, eth0:110)
| director |---|  (控制器有一块网卡，且与realserver1和realserver2在同一网段)
|__________|   |   DIP=202.99.59.109 (eth0)
|
-----------------------------------
|                                 |
RIP=202.99.59.108(eth0)             RIP=202.99.59.107(eth0)
(VIP=202.99.59.110, lo:0)          (VIP=202.99.59.110, lo:0)
____________                       ____________
|            |                     |            |
|realserver1 |                     |realserver2 |
|____________|                     |____________|
</pre>
<p>2.安装软件：<br />
<p>在director(202.99.59.109)上安装上面的方法安装内核和管理软件。
<p>&nbsp;</p>
<p>3. 配置LVS
<p>(1)、在202.99.59.109上：<br />
<pre>修改内核运行参数，即修改/etc/sysctl.conf文件的内容如下：
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.eth0.send_redirects = 1
然后执行下面的命令是对内核修改的参数立即生效：
sysctl -p
配置VIP地址：
/sbin/ifconfig eth0:0 202.99.59.110 broadcast 202.99.59.110 netmask 255.255.255.255 up
/sbin/route add -host 202.99.59.110 dev eth0:0
清除ipvsadm表:
/sbin/ipvsadm -C
使用ipvsadm安装LVS服务：
/sbin/ipvsadm -A -t 192.168.1.110:http -s rr
增加realserver：
#forward http to realserver using direct routing with weight 1
/sbin/ipvsadm -a -t 192.168.1.110:http -r 192.168.1.12 -g -w 1
/sbin/ipvsadm -a -t 192.168.1.110:http -r 192.168.1.12 -g -w 1
</pre>
<p>(2)在realserver1(202.99.59.108)和realserver2(202.99.59.107)上做下面的设置。<br />
<pre>修改内核运行参数，即修改/etc/sysctl.conf文件的内容如下：
net.ipv4.ip_forward = 0
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
然后执行下面的命令是对内核修改的参数立即生效：
sysctl -p
配置VIP地址：
/sbin/ifconfig lo:0 202.99.59.110 broadcast 202.99.59.110 netmask 255.255.255.255 up
/sbin/route add -host 202.99.59.110 dev lo:0
</pre>
p&gt;在客户端使用浏览器多次访问：http://202.99.59.110/，然后再202.99.59.110上运行ipvsadm命令，应该有类似下面的输出：<br />
<pre>IP Virtual Server version 1.0.12 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-&gt; RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.254:http rr
-&gt; 192.168.100.3:http           Route   1      0          28
-&gt; 192.168.100.2:http           Route   1      0          29
</pre>
<p>从上面的结果可以看出，我们的LVS服务器已经成功运行。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>在面的实例中ipvsadm用到的几个参数含义如下：<br />
<p>-A 增加一个虚拟服务，该服务由协议、IP地址和端口号组成，例如：<br />
-A -t 202.99.59.110:80 (增加一格虚拟服务，其协议(-t表示tcp，-u表示udp)为TCP、IP为202.99.59.110、端口号为80。
<p>-s 指定服务采用的算法，常用的算法参数如下：<br />
<ul>
    <p>
    <li>rr &nbsp;&nbsp;轮叫（Round Robin）<br />
    调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上，它均等地对待每一台服务 器，而不管服务器上实际的连接数和系统负载。
    <p>&nbsp;</p>
    <li>wrr &nbsp;&nbsp;加权轮叫（Weighted Round Robin）<br />
    调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况，并动态地调整其权值。
    <p>&nbsp;</p>
    <li>lc &nbsp;&nbsp;最少链接（Least Connections）<br />
    调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能，采用"最小连接"调度算法可以较好地均衡负载。
    <p>&nbsp;</p>
    <li>wlc &nbsp;&nbsp;加权最少链接（Weighted Least Connections）<br />
    在集群系统中的服务器性能差异较大的情况下，调度器采用"加权最少链接"调度算法优化负载均衡性能，具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况，并动态地调整其权值。
    <p>&nbsp;</p>
    <li>lblc &nbsp;&nbsp;基于局部性的最少链接（Locality-Based Least Connections）<br />
    "基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡，目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器，若该服务器是可用的且没有超载，将请求发送到该服务器；若服务器不存在，或者该服务器超载且有服务器处于一半的工作负载，则用"最少链接"的原则选出一个可用的服务器，将请求发送到该服务器。
    <p>&nbsp;</p>
    <li>lblcr &nbsp;&nbsp;带复制的基于局部性最少链接（Locality-Based Least Connections with Replication）<br />
    "带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡，目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射，而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组，按"最小连接"原则从服务器组中选出一台服务器，若服务器没有超载，将请求发送到该服务器，若服务器超载；则按"最小连接"原则从这个集群中选出一台服务器，将该服务器加入到服务器组中，将请求发送到该服务器。同时，当该服务器组有一段时间没有被修改，将最忙的服务器从服务器组中删除，以降低复制的程度。
    <p>&nbsp;</p>
    <li>dh &nbsp;&nbsp;目标地址散列（Destination Hashing）<br />
    "目标地址散列"调度算法根据请求的目标IP地址，作为散列键（Hash Key）从静态分配的散列表找出对应的服务器，若该服务器是可用的且未超载，将请求发送到该服务器，否则返回空。
    <p>&nbsp;</p>
    <li>sh &nbsp;&nbsp;源地址散列（Source Hashing）<br />
    "源地址散列"调度算法根据请求的源IP地址，作为散列键（Hash Key）从静态分配的散列表找出对应的服务器，若该服务器是可用的且未超载，将请求发送到该服务器，否则返回空。 </li>
</ul>
<p>/sbin/ipvsadm -a -t 192.168.1.110:http -r 192.168.1.12 -g -w 1
<p>-a 表示往一个服务内增加一个real server
<p>-r 指定real server的IP地址
<p>-w 表示权重
<p>-g 表示使用DR方式，-m表示NAT方式，-i表示tunneling方式。 </p>
<img src ="http://www.blogjava.net/jjwwhmm/aggbug/250996.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jjwwhmm/" target="_blank">pony</a> 2009-01-12 17:38 <a href="http://www.blogjava.net/jjwwhmm/articles/250996.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>