﻿<?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/fidodido/</link><description>子夜 编程 代码与我同在</description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 18:58:42 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 18:58:42 GMT</pubDate><ttl>60</ttl><item><title>搬家</title><link>http://www.blogjava.net/fidodido/archive/2008/09/04/227089.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Thu, 04 Sep 2008 15:18:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2008/09/04/227089.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/227089.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2008/09/04/227089.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/227089.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/227089.html</trackback:ping><description><![CDATA[最后一篇博竟然是2年前！心中不免有些愧疚，其实很早就把博客搬到了<a title="这里" target="_blank" href="http://www.ijay.net.cn">这里</a>，各位朋友可以去这里看看<br />

<img src ="http://www.blogjava.net/fidodido/aggbug/227089.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2008-09-04 23:18 <a href="http://www.blogjava.net/fidodido/archive/2008/09/04/227089.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我回来了</title><link>http://www.blogjava.net/fidodido/archive/2006/06/21/54361.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Wed, 21 Jun 2006 13:32:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2006/06/21/54361.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/54361.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2006/06/21/54361.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/54361.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/54361.html</trackback:ping><description><![CDATA[前几天小秦羊告诉我两件事：<br /><br />1、他看了我的blog<br /><br />2、他发现我的blog的最后更新是在今年3月份<br /><br />好吧，的确开学以后就没怎么写blog了，又是毕设，又是考试院的项目，虽然对Java不断有新的发现，有新的积累，但是都没有时间写下来。好在马上就能over了。考试院的项目会在今天晚些时候上线（<a href="http://zd.bjkaoshi.com.cn/hermes_portal/index.jsp">http://zd.bjkaoshi.com.cn/hermes_portal/index.jsp</a>，不知道看我blog的有没有北京市的自考生，有的话应该会知道我们的项目，有任何建议或发现任何bug可以直接与我联系，呵呵），毕设下个星期也要答辩，但愿一切顺利。<br /><br />马上就能回来写技术blog了，呵呵，会给大家不少有用的经验：）<img src ="http://www.blogjava.net/fidodido/aggbug/54361.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2006-06-21 21:32 <a href="http://www.blogjava.net/fidodido/archive/2006/06/21/54361.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>“软件工业奥斯卡”SYS-CON读者选择奖： Java开发（转载自CSDN）</title><link>http://www.blogjava.net/fidodido/archive/2006/03/13/35027.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Mon, 13 Mar 2006 06:24:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2006/03/13/35027.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/35027.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2006/03/13/35027.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/35027.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/35027.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: SYS-CON 媒体（www.sys-con.com）在近日揭晓了一年一度的“读者选择奖”，这个奖项有“软件工业奥斯卡”之称。今年是第10届，有超过1.7万的SYS-CON读者参与了投票，分别评选出了在SOA、Web Services、Java和XML技术等领域的最佳产品、工具以及最佳提名。&nbsp;I 最佳Java应用服务器获胜者：BEA WebLogic Server (BEA ...&nbsp;&nbsp;<a href='http://www.blogjava.net/fidodido/archive/2006/03/13/35027.html'>阅读全文</a><img src ="http://www.blogjava.net/fidodido/aggbug/35027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2006-03-13 14:24 <a href="http://www.blogjava.net/fidodido/archive/2006/03/13/35027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Struts中使用Validator实现可配置的信息校验（二）</title><link>http://www.blogjava.net/fidodido/archive/2006/03/07/34130.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Tue, 07 Mar 2006 10:38:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2006/03/07/34130.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/34130.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2006/03/07/34130.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/34130.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/34130.html</trackback:ping><description><![CDATA[<H3>三、自定义校验逻辑</H3>
<P>毕竟Struts提供的校验逻辑有限，不可能满足所有的开发需要，因此有时必须对其进行扩展。这里举一个实际项目中的例子：校验码检查。现在很多网站为了防止恶意的页面刷新攻击，都使用了图片形式的校验码，如：</P>
<P align=center><IMG alt="" hspace=0 src="http://www.blogjava.net/images/blogjava_net/fidodido/code.jpg" align=baseline border=0></P>
<P>表单提交后需要检查校验码（存在request或session里）和用户输入是否一致，代码如下：</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">&nbsp;1</SPAN><IMG id=Codehighlighter1_24_647_Open_Image onclick="this.style.display='none'; Codehighlighter1_24_647_Open_Text.style.display='none'; Codehighlighter1_24_647_Closed_Image.style.display='inline'; Codehighlighter1_24_647_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_24_647_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_24_647_Closed_Text.style.display='none'; Codehighlighter1_24_647_Open_Image.style.display='inline'; Codehighlighter1_24_647_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;MyValidator</SPAN><SPAN id=Codehighlighter1_24_647_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_24_647_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;2</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;Logger&nbsp;logger&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;Logger.getLogger(Constants.CON_LOGGER_NAME);<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;3</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;4</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">boolean</SPAN><SPAN style="COLOR: #000000">&nbsp;validateCodeInput(Object&nbsp;obj,ValidatorAction&nbsp;action,Field&nbsp;field,<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;5</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_245_645_Open_Image onclick="this.style.display='none'; Codehighlighter1_245_645_Open_Text.style.display='none'; Codehighlighter1_245_645_Closed_Image.style.display='inline'; Codehighlighter1_245_645_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_245_645_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_245_645_Closed_Text.style.display='none'; Codehighlighter1_245_645_Open_Image.style.display='inline'; Codehighlighter1_245_645_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActionMessages&nbsp;errors,HttpServletRequest&nbsp;req)</SPAN><SPAN id=Codehighlighter1_245_645_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_245_645_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;6</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;code&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;(String)req.getSession().getAttribute(Constants.SESSION_CHECKSUM_CODE);<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;7</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;input&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;ValidatorUtils.getValueAsString(obj,field.getProperty());<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;8</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;9</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;logger.debug(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Code:&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;code&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;input:&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">&nbsp;input);<BR></SPAN><SPAN style="COLOR: #008080">10</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(code.equalsIgnoreCase(input))<BR></SPAN><SPAN style="COLOR: #008080">11</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">true</SPAN><SPAN style="COLOR: #000000">;<BR></SPAN><SPAN style="COLOR: #008080">12</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_536_641_Open_Image onclick="this.style.display='none'; Codehighlighter1_536_641_Open_Text.style.display='none'; Codehighlighter1_536_641_Closed_Image.style.display='inline'; Codehighlighter1_536_641_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_536_641_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_536_641_Closed_Text.style.display='none'; Codehighlighter1_536_641_Open_Image.style.display='inline'; Codehighlighter1_536_641_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN id=Codehighlighter1_536_641_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_536_641_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">13</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errors.add(field.getKey(),Resources.getActionMessage(req,action,field));<BR></SPAN><SPAN style="COLOR: #008080">14</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">false</SPAN><SPAN style="COLOR: #000000">;<BR></SPAN><SPAN style="COLOR: #008080">15</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">16</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">17</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV><BR>注释：<BR>1、第1行：MyValidator没有任何父类，运行时Validator通过reflection生成对象<BR>2、第4行：校验方法可随意命名，通过reflection调用，但参数必须按照规范<BR>3、第6行：从session中取出图片中的字符串<BR>4、第7行：得到用户输入的值，Struts在这里用Field类对表单字段进行了封装，而Field具体封装的字段在validation.xml中定义，见<A HREF="/fidodido/archive/2006/03/07/34123.html">上篇</A><BR><BR>validator-rules.xml中的定义：<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">&nbsp;1</SPAN><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">validator&nbsp;</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN style="COLOR: #0000ff">="codeinput"</SPAN><SPAN style="COLOR: #ff0000"><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;2</SPAN><SPAN style="COLOR: #ff0000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;classname</SPAN><SPAN style="COLOR: #0000ff">="consultII.web.utils.MyValidator"</SPAN><SPAN style="COLOR: #ff0000"><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;3</SPAN><SPAN style="COLOR: #ff0000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method</SPAN><SPAN style="COLOR: #0000ff">="validateCodeInput"</SPAN><SPAN style="COLOR: #ff0000"><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;4</SPAN><SPAN style="COLOR: #ff0000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;methodParams</SPAN><SPAN style="COLOR: #0000ff">="java.lang.Object,<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;5</SPAN><SPAN style="COLOR: #0000ff"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.commons.validator.ValidatorAction,<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;6</SPAN><SPAN style="COLOR: #0000ff"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.commons.validator.Field,<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;7</SPAN><SPAN style="COLOR: #0000ff"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts.action.ActionMessages,<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;8</SPAN><SPAN style="COLOR: #0000ff"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;javax.servlet.http.HttpServletRequest"</SPAN><SPAN style="COLOR: #ff0000"><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;9</SPAN><SPAN style="COLOR: #ff0000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg</SPAN><SPAN style="COLOR: #0000ff">="errors.code"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">10</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><BR>validation.xml中的定义：<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">field&nbsp;</SPAN><SPAN style="COLOR: #ff0000">property</SPAN><SPAN style="COLOR: #0000ff">="input"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;depends</SPAN><SPAN style="COLOR: #0000ff">="required,codeinput"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">field&nbsp;</SPAN><SPAN style="COLOR: #ff0000">property</SPAN><SPAN style="COLOR: #0000ff">="input"</SPAN><SPAN style="COLOR: #ff0000">&nbsp;depends</SPAN><SPAN style="COLOR: #0000ff">="required,codeinput"</SPAN><SPAN style="COLOR: #0000ff">/&gt;</SPAN></DIV><BR>在servlet中将校验码存入session传递给Validator：<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">req.getSession().setAttribute(Constants.SESSION_CHECKSUM_CODE,code);</SPAN></DIV>
<P>这样就OK了。</P>
<H3>四、将校验逻辑转译成JavaScript代码</H3>
<P>由于Validator的代码在服务器端被执行，因此如果校验请求频繁的话将会对服务器端造成不小的性能压力。考虑到这个问题，Struts中提供的校验方法可以被转译成JavaScript代码嵌入页面，这样校验将在客户端进行。<BR>使用时，只要在页面中嵌入两条Struts html标签库中的标签：</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">1</SPAN><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">html:javascript&nbsp;formName&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">formName</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">/&gt;</SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">2</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">html:form&nbsp;action&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;onsubmit&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">return&nbsp;validateFormName(this);</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">/&gt;</SPAN></DIV><BR>其中第一行定义了需要转译的FormBean名，这里是“formName”，第二行在该FormBean封装的表单上添加onsubmuit事件，而该事件调用的函数会在JSP请求到客户端时由Validator框架自动生成，命名规则为“validateXXX”，其中“XXX”就是第一行中的formName属性的值，这里是“formName”，因此生成的函数名为“validateFormName”。<BR>关于为自定义的Validator（如上文的MyValidator）创建JS代码，我没有实现过，感兴趣的话可以去Struts官网上找一下相关文档。<img src ="http://www.blogjava.net/fidodido/aggbug/34130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2006-03-07 18:38 <a href="http://www.blogjava.net/fidodido/archive/2006/03/07/34130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Struts中使用Validator实现可配置的信息校验（一）</title><link>http://www.blogjava.net/fidodido/archive/2006/03/07/34123.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Tue, 07 Mar 2006 09:53:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2006/03/07/34123.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/34123.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2006/03/07/34123.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/34123.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/34123.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在Struts中对用户输入信息的校验一般在FromBean中进行（除非需要访问数据库进行诸如登录信息的校验，因为这是Action的工作），本文将阐述如何在Struts中实现可配置的信息校验。一、在FormBean中手工实现最简单的方法是直接在FormBean中重写ActionForm类的validate方法，validate方法签名如下：public&nbsp;ActionErrors...&nbsp;&nbsp;<a href='http://www.blogjava.net/fidodido/archive/2006/03/07/34123.html'>阅读全文</a><img src ="http://www.blogjava.net/fidodido/aggbug/34123.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2006-03-07 17:53 <a href="http://www.blogjava.net/fidodido/archive/2006/03/07/34123.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不要更新：Windows XP 安全更新程序 (KB913446)</title><link>http://www.blogjava.net/fidodido/archive/2006/02/24/32334.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Fri, 24 Feb 2006 11:16:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2006/02/24/32334.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/32334.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2006/02/24/32334.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/32334.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/32334.html</trackback:ping><description><![CDATA[<P><A class=sys-link-normal href="">Windows XP 安全更新程序 (KB913446)</A>补丁会修改tcpip.sys文件，把最大连接数改成<FONT color=#ff0000>10</FONT>，并将tcpip.sys版本升级，这样一来市面上所有的tcpip连接数破解工具都将无能为力（我已经试了5个，都报错），所以建议各位不要运行该升级。</P><img src ="http://www.blogjava.net/fidodido/aggbug/32334.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2006-02-24 19:16 <a href="http://www.blogjava.net/fidodido/archive/2006/02/24/32334.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OO基本概念</title><link>http://www.blogjava.net/fidodido/archive/2005/11/21/20824.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Mon, 21 Nov 2005 12:43:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/11/21/20824.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/20824.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/11/21/20824.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/20824.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/20824.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 术语（en）术语（中）描述Abstract class抽象类不能实例化的类Abstraction抽象一个项目（可能是类或操作）的本质特性Aggregation聚合两个类或组件之间的关系，定义为“is part of”Aggregation hierarchy聚合层次通过聚...&nbsp;&nbsp;<a href='http://www.blogjava.net/fidodido/archive/2005/11/21/20824.html'>阅读全文</a><img src ="http://www.blogjava.net/fidodido/aggbug/20824.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-11-21 20:43 <a href="http://www.blogjava.net/fidodido/archive/2005/11/21/20824.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>群硕笔试题</title><link>http://www.blogjava.net/fidodido/archive/2005/11/18/20493.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Fri, 18 Nov 2005 12:36:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/11/18/20493.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/20493.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/11/18/20493.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/20493.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/20493.html</trackback:ping><description><![CDATA[<DIV>群硕的笔试在语言方面主要是Java和C++，夹了一道C#题，趁记忆犹新的时候记下来<IMG src="http://spaces.msn.com/rte/emoticons/rainbow.gif"></DIV>
<DIV>&nbsp;</DIV>
<DIV>一、给了一棵二叉树的前序遍历和中序遍历，要求写出后序遍历。</DIV>
<DIV>看一下数据结构就行了，很easy。提示：前序遍历的第一个节点为根结点，在中序遍历中根结点的左边节点是左子树，右边节点是右子树，如此递归。</DIV>
<DIV>&nbsp;</DIV>
<DIV>二、什么是物理内存和虚拟内存，OS中为什么要使用虚拟内存？</DIV>
<DIV>看OS的书。</DIV>
<DIV>&nbsp;</DIV>
<DIV>三、解释一下C#中的“delegate”。</DIV>
<DIV>原先不清楚的，然后在技术面试的时候问了一下面试官，原来类似于一个队列，队列中存的是函数指针（托管函数），运行时队列中的函数会在一个线程中被依次执行。</DIV>
<DIV>&nbsp;</DIV>
<DIV>四、与子程序传递参数有哪些方法？</DIV>
<DIV>汇编题，我想起来三个：参数压栈、参数存寄存器、参数存数据段。</DIV>
<DIV>&nbsp;</DIV>
<DIV>五、解释一下Java中的String和StringBuffer，什么时候需要使用StringBuffer？</DIV>
<DIV>核心是String对象是不变对象，连接、取子串等操作会生成新的对象，旧对象可能会被回收。StringBuufer则是可变对象，上述操作将在原对象上进行。</DIV>
<DIV>&nbsp;</DIV>
<DIV>六、Java中哪些容器的默认布局器（layout）是BorderLayout？</DIV>
<DIV>这个不是那得很准，就写了JFrame及其子类，Frame及其子类。</DIV>
<DIV>&nbsp;</DIV>
<DIV>七、一个C++的函数：</DIV>
<DIV>int operation(int numberA,int numberB){</DIV>
<DIV>&nbsp; return numberA + numberB;</DIV>
<DIV>}</DIV>
<DIV>然后声明了三个变量：</DIV>
<DIV>int a = 2;</DIV>
<DIV>int result1&nbsp;= operation(5, a++);</DIV>
<DIV>int result2 = operation(5+a, ++a);</DIV>
<DIV>问result1和result2的值。</DIV>
<DIV>原先以为考得是传值、传引用的问题，结果仔细一看考得是a++和++a的问题，这就简单了。</DIV>
<DIV>result1 = 7, result2 = 12</DIV>
<DIV>&nbsp;</DIV>
<DIV>八、如果父类的析构函数没有声明为虚函数的话在父类的指针上调用析构函数会有什么后果？</DIV>
<DIV>屏蔽多态，子类申请的资源将不被释放。</DIV>
<DIV>&nbsp;</DIV>
<DIV>九、定义了一个类：</DIV>
<DIV>class Something{</DIV>
<DIV>pulic:</DIV>
<DIV>&nbsp; Something();</DIV>
<DIV>&nbsp; void setValue(int val){</DIV>
<DIV>&nbsp;&nbsp;&nbsp; value = val;</DIV>
<DIV>&nbsp; }</DIV>
<DIV>&nbsp;</DIV>
<DIV>private:</DIV>
<DIV>&nbsp; int value;</DIV>
<DIV>}</DIV>
<DIV>以及一个函数：</DIV>
<DIV>void doSomething(int val){</DIV>
<DIV>&nbsp; Something* sth = new Something(); // Line 1</DIV>
<DIV>&nbsp; sth-&gt;setValue(val); // Line 2</DIV>
<DIV>}</DIV>
<DIV>问Line 2如果是doSomething()的最后一行的话会有什问题？</DIV>
<DIV>doSomething执行完后sth没有被销毁，内存泄漏。</DIV>
<DIV>&nbsp;</DIV>
<DIV>十、写一个程序将输入的16进制转为10进制。</DIV>
<DIV>基础</DIV>
<DIV>&nbsp;</DIV>
<DIV>十一、设计一个微波炉的控制程序（OO）。</DIV>
<DIV>这道题有点意思，我主要用Observer模式设计了一个定时器，然后把微波炉烹饪的对象抽象为Cookable。</DIV>
<DIV>&nbsp;</DIV>
<DIV>十二、逻辑题，一列火车以15 mph的速度从北京开往上海，另一列火车以20 mph的速度从上海开往北京，一只鸟（比较笨<IMG src="http://spaces.msn.com/rte/emoticons/smile_wink.gif">）速度25 mph，在两列火车之间来回飞，相遇即折回。问到两列火车相遇这只笨鸟一共飞了多远？</DIV>
<DIV>很简单，因为鸟一直在飞，所以一共飞了s/(15 + 20)，s为上海到北京之间的距离，那么它一共飞了s/(15 + 20) * 25&nbsp;mile。</DIV>
<DIV>&nbsp;</DIV>
<DIV>12道题，除了那道C#题，其它觉得没多少地方能扣我分了，当天晚上就没睡好，很兴奋。果然第二天上午就打电话来让我去面试，效率真的很高，然后就果然顺利拿到了offer<IMG src="http://spaces.msn.com/rte/emoticons/smile_shades.gif"></DIV><img src ="http://www.blogjava.net/fidodido/aggbug/20493.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-11-18 20:36 <a href="http://www.blogjava.net/fidodido/archive/2005/11/18/20493.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java API中文版[转载自Sun技术社区]</title><link>http://www.blogjava.net/fidodido/archive/2005/11/08/18806.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Tue, 08 Nov 2005 09:00:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/11/08/18806.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/18806.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/11/08/18806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/18806.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/18806.html</trackback:ping><description><![CDATA[<TABLE style="WIDTH: 100%" cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD class=bai01 style="VERTICAL-ALIGN: bottom; HEIGHT: 16px; BACKGROUND-COLOR: rgb(204,204,204); TEXT-ALIGN: center"><STRONG><SPAN style="COLOR: rgb(51,51,255)">Java API 文档中文版</SPAN></STRONG></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=5 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=a01 vAlign=top><SPAN style="FONT-FAMILY: 宋体"><SPAN style="FONT-WEIGHT: bold"></SPAN></SPAN>
<P class=MsoNormal><B><SPAN lang=EN-US style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"><?XML:NAMESPACE PREFIX = O /><O:P></O:P></SPAN></B></P><BR>Sun 公司提供的Java API Docs是学习和使用Java语言中最经常使用的参考资料之一。但是长期以来此文档只有英文版，对于中国地区的Java开发者来说相当的不便。目前Sun 公司正在组织多方力量将此文档翻译成中文，并于近日在Sun 中国技术社区（http://gceclub.sun.com.cn/）正式发布java.lang和java.util类库API 文档的中文版，其他类库API文档的中文版也将于今后一段时间内陆续向中国地区的开发人员提供。在J2SE API文档（5.0版本）的汉化工作完成之后，Sun 中国技术社区还将开通Java API 文档中文版的打包下载服务。<BR><BR><SPAN style="FONT-WEIGHT: bold; COLOR: rgb(51,51,255)">Java API　文档中文版发布计划</SPAN><BR><BR>
<TABLE style="WIDTH: 100%; TEXT-ALIGN: left" cellSpacing=2 cellPadding=2 border=0>
<TBODY>
<TR>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(255,204,255)">发布时间</TD>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(255,204,255)">相关类库</TD>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(255,204,255)">阅读/下载</TD></TR>
<TR>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(204,255,255)">2005/10/31</TD>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(204,255,255)">java.lang<BR>java.util<BR></TD>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(204,255,255)"><A href="http://gceclub.sun.com.cn/download/Java_Docs/html/zh_CN/api/index.html">在线阅读</A></TD></TR>
<TR>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(255,255,153)">2005/12/31</TD>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(255,255,153)">java.awt<BR>java.io<BR>java.text<BR></TD>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(255,255,153)"><BR></TD></TR>
<TR>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(204,255,255)">2006/02/28</TD>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(204,255,255)">java.swing<BR></TD>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(204,255,255)"></TD></TR>
<TR>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(255,255,153)">2006/03/31</TD>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(255,255,153)"><PRE>java.applet<BR>java.beans<BR>java.maths<BR>java.net<BR>java.nio<BR>java.rmi<BR>java.security<BR>java.sql <BR>javax.accessibility <BR>javax.activity<BR>javax.crypto</PRE></TD>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(255,255,153)"></TD></TR>
<TR>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(204,255,255)">2006/04/30</TD>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(204,255,255)"><PRE>javax.imageio<BR>javax.management<BR>javax.net<BR>javax.naming<BR>javax.print<BR>javax.rmi<BR>javax.security<BR>javax.sound</PRE></TD>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(204,255,255)"></TD></TR>
<TR>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(255,255,153)">2006/05/31</TD>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(255,255,153)"><PRE>javax.sql<BR>javax.transaction<BR>javax.xml<BR>org.ietf<BR>org.xml<BR>org.w3c<BR>org.omg</PRE></TD>
<TD style="VERTICAL-ALIGN: top; BACKGROUND-COLOR: rgb(255,255,153)"><BR></TD></TR></TBODY></TABLE><BR></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/fidodido/aggbug/18806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-11-08 17:00 <a href="http://www.blogjava.net/fidodido/archive/2005/11/08/18806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IDEA cracker下载</title><link>http://www.blogjava.net/fidodido/archive/2005/11/05/18269.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Sat, 05 Nov 2005 03:25:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/11/05/18269.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/18269.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/11/05/18269.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/18269.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/18269.html</trackback:ping><description><![CDATA[<A href="http://fidodido.blogjava.net/Files/fidodido/idea_crack.rar">http://fidodido.blogjava.net/Files/fidodido/idea_crack.rar</A><BR><BR>使用说明：将其中的class文件按路径放到/lib/idea.jar中的相应目录下覆盖原文件，重新生成idea.jar<img src ="http://www.blogjava.net/fidodido/aggbug/18269.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-11-05 11:25 <a href="http://www.blogjava.net/fidodido/archive/2005/11/05/18269.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Alloy Look and Feel下载</title><link>http://www.blogjava.net/fidodido/archive/2005/11/05/18268.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Sat, 05 Nov 2005 03:24:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/11/05/18268.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/18268.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/11/05/18268.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/18268.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/18268.html</trackback:ping><description><![CDATA[<A class=titlelink id=Results_rprSelectionList__ctl4_Hyperlink1 href="http://fidodido.blogjava.net/Files/fidodido/alloylnf-1_4_4.rar"><FONT color=#000000>http://fidodido.blogjava.net/Files/fidodido/alloylnf-1_4_4.rar</FONT></A> <img src ="http://www.blogjava.net/fidodido/aggbug/18268.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-11-05 11:24 <a href="http://www.blogjava.net/fidodido/archive/2005/11/05/18268.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Borland Look and Feel下载</title><link>http://www.blogjava.net/fidodido/archive/2005/11/05/18267.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Sat, 05 Nov 2005 03:20:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/11/05/18267.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/18267.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/11/05/18267.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/18267.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/18267.html</trackback:ping><description><![CDATA[<A HREF="/Files/fidodido/Borland%20Look%20and%20Feel.rar">http://www.blogjava.net/Files/fidodido/Borland%20Look%20and%20Feel.rar</A><img src ="http://www.blogjava.net/fidodido/aggbug/18267.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-11-05 11:20 <a href="http://www.blogjava.net/fidodido/archive/2005/11/05/18267.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用FilterServlet对页面进行转码</title><link>http://www.blogjava.net/fidodido/archive/2005/11/04/18185.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Fri, 04 Nov 2005 11:42:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/11/04/18185.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/18185.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/11/04/18185.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/18185.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/18185.html</trackback:ping><description><![CDATA[相信很多朋友在使用JSP/Servlet等技术进行页面编程的时候都会或多或少地遇到乱码问题。解决的方法有很多，比较常见的是手动对所有可能包含中文的字符串进行转码：<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">String&nbsp;latin&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;<IMG src="http://www.blogjava.net/images/dot.gif">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>String&nbsp;gbk&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;String(latin.getBytes(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">iso-8859-1</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">),</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">gbk</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);</SPAN></DIV><BR>这个方法过去我也比较常用，的确有效，但很累赘耶，丝毫没有模式之美，有没有更优雅的方法呢？如果你和我一样有疑虑的话，可以考虑使用FilterServlet：<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #008080">&nbsp;1</SPAN><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;java.io.</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">;<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;2</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;javax.servlet.</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">;<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;3</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;javax.servlet.http.</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">;<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;4</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;5</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">&nbsp;org.apache.log4j.</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">;<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;6</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">&nbsp;7</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;CharsetFilter<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;8</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_168_917_Open_Image onclick="this.style.display='none'; Codehighlighter1_168_917_Open_Text.style.display='none'; Codehighlighter1_168_917_Closed_Image.style.display='inline'; Codehighlighter1_168_917_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_168_917_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_168_917_Closed_Text.style.display='none'; Codehighlighter1_168_917_Open_Image.style.display='inline'; Codehighlighter1_168_917_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">extends</SPAN><SPAN style="COLOR: #000000">&nbsp;HttpServlet&nbsp;</SPAN><SPAN style="COLOR: #0000ff">implements</SPAN><SPAN style="COLOR: #000000">&nbsp;Filter</SPAN><SPAN id=Codehighlighter1_168_917_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_168_917_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">&nbsp;9</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000">&nbsp;Logger&nbsp;logger&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;Logger.getLogger(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Filter&nbsp;servlet</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR></SPAN><SPAN style="COLOR: #008080">10</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">11</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;init(FilterConfig&nbsp;filterConfig)<BR></SPAN><SPAN style="COLOR: #008080">12</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_315_319_Open_Image onclick="this.style.display='none'; Codehighlighter1_315_319_Open_Text.style.display='none'; Codehighlighter1_315_319_Closed_Image.style.display='inline'; Codehighlighter1_315_319_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_315_319_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_315_319_Closed_Text.style.display='none'; Codehighlighter1_315_319_Open_Image.style.display='inline'; Codehighlighter1_315_319_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">throws</SPAN><SPAN style="COLOR: #000000">&nbsp;ServletException</SPAN><SPAN id=Codehighlighter1_315_319_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_315_319_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">13</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">14</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">15</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;doFilter(ServletRequest&nbsp;request,ServletResponse&nbsp;response,<BR></SPAN><SPAN style="COLOR: #008080">16</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_424_885_Open_Image onclick="this.style.display='none'; Codehighlighter1_424_885_Open_Text.style.display='none'; Codehighlighter1_424_885_Closed_Image.style.display='inline'; Codehighlighter1_424_885_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_424_885_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_424_885_Closed_Text.style.display='none'; Codehighlighter1_424_885_Open_Image.style.display='inline'; Codehighlighter1_424_885_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FilterChain&nbsp;filterChain)</SPAN><SPAN id=Codehighlighter1_424_885_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_424_885_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">17</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_449_740_Open_Image onclick="this.style.display='none'; Codehighlighter1_449_740_Open_Text.style.display='none'; Codehighlighter1_449_740_Closed_Image.style.display='inline'; Codehighlighter1_449_740_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_449_740_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_449_740_Closed_Text.style.display='none'; Codehighlighter1_449_740_Open_Image.style.display='inline'; Codehighlighter1_449_740_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(request&nbsp;</SPAN><SPAN style="COLOR: #000000">!=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">)</SPAN><SPAN id=Codehighlighter1_449_740_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_449_740_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">18</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;charset&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;request.getCharacterEncoding();<BR></SPAN><SPAN style="COLOR: #008080">19</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(charset&nbsp;</SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">||</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #000000">charset.equalsIgnoreCase(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">gbk</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">))<BR></SPAN><SPAN style="COLOR: #008080">20</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_579_636_Open_Image onclick="this.style.display='none'; Codehighlighter1_579_636_Open_Text.style.display='none'; Codehighlighter1_579_636_Closed_Image.style.display='inline'; Codehighlighter1_579_636_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_579_636_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_579_636_Closed_Text.style.display='none'; Codehighlighter1_579_636_Open_Image.style.display='inline'; Codehighlighter1_579_636_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN id=Codehighlighter1_579_636_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_579_636_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">21</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setCharacterEncoding(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">GBK</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR></SPAN><SPAN style="COLOR: #008080">22</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">23</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_684_734_Open_Image onclick="this.style.display='none'; Codehighlighter1_684_734_Open_Text.style.display='none'; Codehighlighter1_684_734_Closed_Image.style.display='inline'; Codehighlighter1_684_734_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_684_734_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_684_734_Closed_Text.style.display='none'; Codehighlighter1_684_734_Open_Image.style.display='inline'; Codehighlighter1_684_734_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">(UnsupportedEncodingException&nbsp;ex)</SPAN><SPAN id=Codehighlighter1_684_734_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_684_734_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">24</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.warn(ex.getMessage());<BR></SPAN><SPAN style="COLOR: #008080">25</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">26</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">27</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_749_813_Open_Image onclick="this.style.display='none'; Codehighlighter1_749_813_Open_Text.style.display='none'; Codehighlighter1_749_813_Closed_Image.style.display='inline'; Codehighlighter1_749_813_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_749_813_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_749_813_Closed_Text.style.display='none'; Codehighlighter1_749_813_Open_Image.style.display='inline'; Codehighlighter1_749_813_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">try</SPAN><SPAN id=Codehighlighter1_749_813_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_749_813_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">28</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filterChain.doFilter(request,response);&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;递交责任链下一环</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #008080">29</SPAN><SPAN style="COLOR: #008000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">30</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_838_881_Open_Image onclick="this.style.display='none'; Codehighlighter1_838_881_Open_Text.style.display='none'; Codehighlighter1_838_881_Closed_Image.style.display='inline'; Codehighlighter1_838_881_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_838_881_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_838_881_Closed_Text.style.display='none'; Codehighlighter1_838_881_Open_Image.style.display='inline'; Codehighlighter1_838_881_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">catch</SPAN><SPAN style="COLOR: #000000">(Exception&nbsp;ex)</SPAN><SPAN id=Codehighlighter1_838_881_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_838_881_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">31</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(ex.getMessage());<BR></SPAN><SPAN style="COLOR: #008080">32</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">33</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">34</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top><BR></SPAN><SPAN style="COLOR: #008080">35</SPAN><SPAN style="COLOR: #000000"><IMG id=Codehighlighter1_911_915_Open_Image onclick="this.style.display='none'; Codehighlighter1_911_915_Open_Text.style.display='none'; Codehighlighter1_911_915_Closed_Image.style.display='inline'; Codehighlighter1_911_915_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_911_915_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_911_915_Closed_Text.style.display='none'; Codehighlighter1_911_915_Open_Image.style.display='inline'; Codehighlighter1_911_915_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">&nbsp;destroy()</SPAN><SPAN id=Codehighlighter1_911_915_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_911_915_Open_Text><SPAN style="COLOR: #000000">{<BR></SPAN><SPAN style="COLOR: #008080">36</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">37</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #008080">38</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><BR>FilterServlet内部应该使用责任链（Chain of Responsibility）实现，在这里我们把对字符串的转码做为责任链中的一环，从上一环拿到request，处理后交给链的下一环。另外需要在web.xml里做些配置：<BR><BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">filter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">filter-name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">charsetfilter</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">filter-name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">filter-class</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">pqp.servlet.CharsetFilter</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">filter-class</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">filter</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">filter-mapping</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">filter-name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">charsetfilter</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">filter-name</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">url-pattern</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">/*</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">url-pattern</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">&lt;</SPAN><SPAN style="COLOR: #800000">dispatcher</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000">REQUEST</SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">dispatcher</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">&lt;/</SPAN><SPAN style="COLOR: #800000">filter-mapping</SPAN><SPAN style="COLOR: #0000ff">&gt;</SPAN></DIV><BR>其中“REQUEST”指定了filter拦截的类型，有REQUEST、FORWARD、ERROR和INCLUDE，可组合选择，一般选REQUEST。全部设置好后重新打包、部署，这样Servlet就可以自动把所有的request转换为GBK的字符集了，是不是很方便？<IMG height=19 src="http://www.blogjava.net/Emoticons/teeth_smile.gif" width=19 border=0>但在这里加了filter后对性能方面的影响未知，大家可以讨论一下。<img src ="http://www.blogjava.net/fidodido/aggbug/18185.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-11-04 19:42 <a href="http://www.blogjava.net/fidodido/archive/2005/11/04/18185.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.util.Calendar中的陷阱</title><link>http://www.blogjava.net/fidodido/archive/2005/10/24/16604.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Mon, 24 Oct 2005 09:23:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/10/24/16604.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/16604.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/10/24/16604.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/16604.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/16604.html</trackback:ping><description><![CDATA[<P>需求：<BR>从输入框得到用户分开输入的年、月、日，将信息做为Date类型插入数据库</P>
<P>解决一：</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">InputBean&nbsp;bean&nbsp;=&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;InputBean();&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;封装用户输入<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;获取用户输入，封装于bean对象中</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>Calendar&nbsp;cal&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;Calendar.getInstance();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>cal.set(cal.YEAR,bean.getYear());&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;Year</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">cal.set(cal.MONTH,bean.getMonth());&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;Month</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">cal.set(cal.DAY_OF_MONTH,bean.getDay());&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;Day<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;数据库操作</SPAN></DIV>
<P>陷阱：<BR>Calendar中的MONTH字段和数组下标一样，<FONT color=#ffa500>从0开始，</FONT><FONT color=#ffa500>0代表Calendar.JANUARY，1代表Calendar.FEBUARY……12代表次年Calendar.JANUARY</FONT>。因此用户输入的月份在置入Calendar对象之前必须进行处理，即减一。<BR><BR>解决二：</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">InputBean&nbsp;bean&nbsp;=&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;InputBean();&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;封装用户输入<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;获取用户输入，封装于bean对象中</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>Calendar&nbsp;cal&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;Calendar.getInstance();<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>cal.set(cal.YEAR,bean.getYear());&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;Year</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">cal.set(cal.MONTH,bean.getMonth()&nbsp;</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">);&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;Month</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">cal.set(cal.DAY_OF_MONTH,bean.getDay());&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;Day<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;数据库操作</SPAN></DIV><img src ="http://www.blogjava.net/fidodido/aggbug/16604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-10-24 17:23 <a href="http://www.blogjava.net/fidodido/archive/2005/10/24/16604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JBuilder 2006 BT种子</title><link>http://www.blogjava.net/fidodido/archive/2005/10/20/16182.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Thu, 20 Oct 2005 13:02:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/10/20/16182.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/16182.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/10/20/16182.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/16182.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/16182.html</trackback:ping><description><![CDATA[<U><FONT color=#800080><A HREF="/Files/fidodido/JBuilder%202006.rar">http://www.blogjava.net/Files/fidodido/JBuilder%202006.rar</A></FONT></U><A href="http://Kademlia/af33c758ad0ffffcfdd9fbae2be565ae30466989/"></A><img src ="http://www.blogjava.net/fidodido/aggbug/16182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-10-20 21:02 <a href="http://www.blogjava.net/fidodido/archive/2005/10/20/16182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>奇怪的范型定义</title><link>http://www.blogjava.net/fidodido/archive/2005/10/19/15971.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Wed, 19 Oct 2005 10:14:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/10/19/15971.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/15971.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/10/19/15971.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/15971.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/15971.html</trackback:ping><description><![CDATA[java.util.Collections 类中两个sort方法的定义很奇怪，哪位能给解释一下：<BR><BR>public static &lt;T&gt; void <B>sort</B>(<A title="interface in java.util" href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html">List</A>&lt;T&gt;&nbsp;list,&nbsp; <A title="interface in java.util" href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/Comparator.html">Comparator</A>&lt;? super T&gt;&nbsp;c)<BR>1、既然该方法无返回值（void），第一个“&lt;T&gt;”有什么作用？<BR>2、“?”代表什么含义？<BR>3、“super”起什么作用？<BR>4、基于2、3：“&lt;? super T&gt;”如何理解？<BR><BR>public static &lt;T extends <A title="interface in java.lang" href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Comparable.html">Comparable</A>&lt;? super T&gt;&gt; void <B>sort</B>(<A title="interface in java.util" href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html">List</A>&lt;T&gt;&nbsp;list)<BR>1、“extends”如何理解？<BR>2、其余同上<img src ="http://www.blogjava.net/fidodido/aggbug/15971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-10-19 18:14 <a href="http://www.blogjava.net/fidodido/archive/2005/10/19/15971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Concurrent框架之阻塞队列（Blocking queue）</title><link>http://www.blogjava.net/fidodido/archive/2005/10/11/15269.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Tue, 11 Oct 2005 08:56:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/10/11/15269.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/15269.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/10/11/15269.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/15269.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/15269.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 引子：大家上过操作系统的都知道“生产者－消费者（Producer-Consumer）”模型，主要讨论的是进程（线程）间的互斥和同步问题，关键是对锁（lock）的申请、独占和释放，在这里我就不罗嗦了。原先我写的Java代码如下：public&nbsp;class&nbsp;Producer&nbsp;extends&nbsp;Thread{&nbsp;&nbsp;private&nbsp;Pro...&nbsp;&nbsp;<a href='http://www.blogjava.net/fidodido/archive/2005/10/11/15269.html'>阅读全文</a><img src ="http://www.blogjava.net/fidodido/aggbug/15269.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-10-11 16:56 <a href="http://www.blogjava.net/fidodido/archive/2005/10/11/15269.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Object Modeling Strategies (IV) </title><link>http://www.blogjava.net/fidodido/archive/2005/10/11/15268.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Tue, 11 Oct 2005 08:51:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/10/11/15268.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/15268.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/10/11/15268.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/15268.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/15268.html</trackback:ping><description><![CDATA[<P><I><STRONG>Str#6. "Four Kinds of Features" Strategy // identifying purpose and features</STRONG> </P>
<P></I>- Be certain to include features that cover the following: </P>
<P>1. Log important information. </P>
<P>2. Conduct business. </P>
<P>3. Analyze business results. </P>
<P>4. Interact with other systems. <BR></P>
<P><I><BR><STRONG>Str#6a. "Add Features, Inspired by Patterns" Strategy // identifying purpose and features</STRONG> </P>
<P></I>- Add features inspired by the stereotypical responsibilities of a participant (in Patt#3, Participant-Transaction), transaction (in Patt#6, Transaction - Transaction Line Item), and place (in Patt#4, Place-Transaction). </P>
<P>- Examples: assess the performance of a participant (how many, how much), calculate the total of a transaction, assess the performance of a place (how many, how much). <BR></P>
<P><I><BR><STRONG>Str#6b. "Organize and Prioritize Features" Strategy // identifying purpose and features </STRONG></P>
<P></I>- Organize the features into &amp;quotfeature categories" (also known as &amp;quotuse cases"). </P>
<P>. Example: maintaining employee info; assigning employees; assessing employee performance </P>
<P>- Prioritize the features. </P>
<P>. Identify the prioritization criteria. For example: normal sequence of business usage; greatest risk; customer interest; management interest; ease of implementation. <BR></P>
<P><I><BR><STRONG>Str#7. "Calculation Results and Decision Points" Strategy // identifying purpose and features </STRONG></P>
<P></I>- Add features that deliver calculation results. </P>
<P>- Add features that support decision points. <BR></P>
<P><I><BR><STRONG>Str#8. "Best and Worst Features" Strategy // identifying purpose and features </STRONG></P>
<P></I>- Ask users: </P>
<P>- What are the best features of the current system? Of competitive systems? </P>
<P>- What are the worst problems of the current system? Of competitive systems? </P>
<P>- What are the unneeded features of the current system? Of competitive systems? <BR></P>
<P><I><BR><STRONG>Str#9. "Top 10" Strategy // identifying purpose and features </STRONG></P>
<P></I>- Build a list of features. </P>
<P>- When you face an abundance of features (or classes, attributes, services), go after the top 10. </P>
<P>- Why: avoid being overwhelmed by a sea of low-level details. <BR></P>
<P><I><BR><STRONG>Str#10. "Now and Later" Strategy // identifying purpose and features </STRONG></P>
<P></I>- Consider current capabilities--and anticipated future capabilities. </P>
<P>- Ask, "How is it done now? How will it be done later, with the new system?" </P>
<P>- Look at things that people do to objects now, and consider features you can add (your automated objects might be able to do those actions to themselves). <BR></P>
<P><I><BR><STRONG>Str#11. "Reengineer on the Boundaries" Strategy // identifying purpose and features </STRONG></P>
<P></I>- Look at each organization or automated system boundary. </P>
<P>- Look for duplicate efforts on each side of such a boundary. </P>
<P>- Model the capability one time--and encourage some reengineering improvements for the organization. <BR></P>
<P><I><BR><STRONG>Str#12. The "Smarter Devices" Strategy // identifying purpose and features </STRONG></P>
<P></I>- Look for opportunities to use smarter devices, simplifying your object model and reducing software development schedule and costs. </P>
<P>- When building an object model in a field with rapidly changing data acquisition and control technology, be sure to take a systems perspective, spanning both hardware and software. </P><img src ="http://www.blogjava.net/fidodido/aggbug/15268.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-10-11 16:51 <a href="http://www.blogjava.net/fidodido/archive/2005/10/11/15268.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java code name</title><link>http://www.blogjava.net/fidodido/archive/2005/10/10/15181.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Mon, 10 Oct 2005 14:54:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/10/10/15181.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/15181.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/10/10/15181.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/15181.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/15181.html</trackback:ping><description><![CDATA[<TABLE style="MARGIN-LEFT: 4em" cellSpacing=0 cellPadding=5 border=0>
<TBODY>
<TR>
<TH style="FONT-SIZE: 95%; BORDER-BOTTOM: 1px solid" align=left><B>VERSION</B> </TH>
<TH style="FONT-SIZE: 95%; BORDER-BOTTOM: 1px solid" align=left><B>CODE NAME</B></TH>
<TH style="FONT-SIZE: 95%; BORDER-BOTTOM: 1px solid" align=middle>&nbsp;&nbsp;<B>RELEASE DATE</B></TH></TR>
<TR>
<TD>JDK 1.1.4</TD>
<TD>Sparkler</TD>
<TD align=right>Sept 12, 1997</TD></TR>
<TR>
<TD>JDK 1.1.5</TD>
<TD>Pumpkin</TD>
<TD align=right>Dec 3, 1997</TD></TR>
<TR>
<TD>JDK 1.1.6</TD>
<TD>Abigail</TD>
<TD align=right>April 24, 1998</TD></TR>
<TR>
<TD>JDK 1.1.7</TD>
<TD>Brutus</TD>
<TD align=right>Sept 28, 1998</TD></TR>
<TR>
<TD>JDK 1.1.8</TD>
<TD>Chelsea</TD>
<TD align=right>April 8, 1999</TD></TR>
<TR>
<TD><B>J2SE 1.2</B></TD>
<TD><B>Playground</B></TD>
<TD align=right><B>Dec 4, 1998</B></TD></TR>
<TR>
<TD>J2SE 1.2.1</TD>
<TD>(none)</TD>
<TD align=right>March 30, 1999</TD></TR>
<TR>
<TD>J2SE 1.2.2</TD>
<TD>Cricket</TD>
<TD align=right>July 8, 1999</TD></TR>
<TR>
<TD><B>J2SE 1.3</B></TD>
<TD><B>Kestrel</B></TD>
<TD align=right><B>May 8, 2000</B></TD></TR>
<TR>
<TD>J2SE 1.3.1</TD>
<TD>Ladybird</TD>
<TD align=right>May 17, 2001</TD></TR>
<TR>
<TD><B>J2SE 1.4.0</B></TD>
<TD><B>Merlin</B></TD>
<TD align=right><B>Feb 13, 2002</B></TD></TR>
<TR>
<TD>J2SE 1.4.1</TD>
<TD>Hopper</TD>
<TD align=right>Sept 16, 2002</TD></TR>
<TR>
<TD>J2SE 1.4.2</TD>
<TD>Mantis</TD>
<TD align=right>June 26, 2003</TD></TR>
<TR>
<TD><B>J2SE 5.0 (1.5.0)</B></TD>
<TD><B>Tiger</B></TD>
<TD align=right><B>Sept 29, 2004</B></TD></TR>
<TR>
<TD colSpan=2><BR><B>Future Releases</B> </TD>
<TR>
<TD><B>J2SE 6.0 (1.6.0)</B></TD>
<TD><B>Mustang</B></TD>
<TD align=right><I>Not yet released</I></TD></TR>
<TR>
<TD><B>J2SE 7.0 (1.7.0)</B></TD>
<TD><B>Dolphin</B></TD>
<TD align=right><I>Not yet released</I></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/fidodido/aggbug/15181.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-10-10 22:54 <a href="http://www.blogjava.net/fidodido/archive/2005/10/10/15181.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>“软件危机”时总结的坏的编程习惯——我们是否依旧守着古风？</title><link>http://www.blogjava.net/fidodido/archive/2005/10/09/15050.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Sun, 09 Oct 2005 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/10/09/15050.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/15050.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/10/09/15050.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/15050.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/15050.html</trackback:ping><description><![CDATA[<P>1、乱用GOTO语句（上下跳转看起来非常方便） </P>
<P>2、大量使用全局变量（无法控制它们值的变化，例如在非预期的子程序的执行中） </P>
<P>3、不声明变量类型就使用（隐含类型可以在Fortran中使用，例如，一个实数可以截短为一个整数而没有引起程序员的注意） </P>
<P>4、非结构化的、组织混乱的大块代码用于多个任务（一块可能有上千行代码） </P>
<P>5、注释行太少（由于它们并不被执行！）</P><img src ="http://www.blogjava.net/fidodido/aggbug/15050.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-10-09 14:23 <a href="http://www.blogjava.net/fidodido/archive/2005/10/09/15050.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat 5.5.9 不支持switch(&amp;lt;enum&amp;gt;)？</title><link>http://www.blogjava.net/fidodido/archive/2005/09/19/13439.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Mon, 19 Sep 2005 10:51:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/09/19/13439.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/13439.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/09/19/13439.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/13439.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/13439.html</trackback:ping><description><![CDATA[ServiceExceptionType：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">package</SPAN><SPAN style="COLOR: #000000">&nbsp;pqp.service;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG id=Codehighlighter1_54_125_Open_Image onclick="this.style.display='none'; Codehighlighter1_54_125_Open_Text.style.display='none'; Codehighlighter1_54_125_Closed_Image.style.display='inline'; Codehighlighter1_54_125_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_54_125_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_54_125_Closed_Text.style.display='none'; Codehighlighter1_54_125_Open_Image.style.display='inline'; Codehighlighter1_54_125_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">enum</SPAN><SPAN style="COLOR: #000000">&nbsp;ServiceExceptionType</SPAN><SPAN id=Codehighlighter1_54_125_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_54_125_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;DB_FAILURE<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,USER_EXISTED<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,INVALID_USERNAME_OR_PASSWORD<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV><BR>在新用户注册的逻辑方法中会检查用户名是否已存在，存在的话抛出ServiceException，并将ServiceExceptionType封装进去。action的excute不处理ServiceException，接着往外扔，最后由error.jsp处理：<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&lt;%</SPAN><SPAN style="COLOR: #000000">@&nbsp;page&nbsp;contentType</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">text/html;&nbsp;charset=GBK</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">%&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&lt;%</SPAN><SPAN style="COLOR: #000000">@&nbsp;page&nbsp;isErrorPage</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">true</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">%&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&lt;%</SPAN><SPAN style="COLOR: #000000">@&nbsp;page&nbsp;</SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">pqp.service.*</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">%&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">&lt;%</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>ServiceException&nbsp;ex</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">(ServiceException)exception;<BR><IMG id=Codehighlighter1_188_270_Open_Image onclick="this.style.display='none'; Codehighlighter1_188_270_Open_Text.style.display='none'; Codehighlighter1_188_270_Closed_Image.style.display='inline'; Codehighlighter1_188_270_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_188_270_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_188_270_Closed_Text.style.display='none'; Codehighlighter1_188_270_Open_Image.style.display='inline'; Codehighlighter1_188_270_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">switch</SPAN><SPAN style="COLOR: #000000">(ex.getType())</SPAN><SPAN id=Codehighlighter1_188_270_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.blogjava.net/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_188_270_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</SPAN><SPAN style="COLOR: #0000ff">case</SPAN><SPAN style="COLOR: #000000">&nbsp;USER_EXISTED:<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;out.println(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">无法注册：用户名“</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">ex.getMessage()</SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">”已存在</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">break</SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000">%&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV><BR>结果编译的时候报错：<BR><IMG height=610 alt=tomcat.png src="http://www.blogjava.net/images/blogjava_net/fidodido/2598/tomcat.png" width=761 border=0><BR><BR>难道Tomcat 5.5.9不支持对enumeration进行switch操作？<img src ="http://www.blogjava.net/fidodido/aggbug/13439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-09-19 18:51 <a href="http://www.blogjava.net/fidodido/archive/2005/09/19/13439.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Object Modeling Strategies (III)</title><link>http://www.blogjava.net/fidodido/archive/2005/09/19/13404.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Mon, 19 Sep 2005 07:26:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/09/19/13404.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/13404.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/09/19/13404.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/13404.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/13404.html</trackback:ping><description><![CDATA[<STRONG>&nbsp;Identifying system purpose and features</STRONG> 
<P>A purpose is an overall desired result, the aim of one's actions. Features are specific capabilities for the system under consideration. </P>
<P>This section presents &amp;quotpurpose and features" strategies. <BR></P>
<P><I><STRONG><BR>Str#2. "System Purpose" Strategy // identifying purpose and features</STRONG> </P>
<P></I>- Develop an overall purpose statement in 25 words or less. Why this system? Why now? </P>
<P>- Keep the overall goal, the critical success factor, always before you. </P>
<P>- "To support, to help, to facilitate, . . ." <BR></P>
<P><I><STRONG><BR>Str#3. "Field Trips, Pictures, and Examples" Strategy // identifying purpose and features</STRONG> </P>
<P></I>- Work with domain experts, ones well-versed in the business. </P>
<P>- Ask for a guided tour; ask for a picture; ask for lots of examples. <BR></P>
<P><I><STRONG><BR>Str#3a. "Multiple Learning Sources" Strategy // identifying purpose and features </STRONG></P>
<P></I>- Read about it; try out software for it; listen to domain experts! <BR></P>
<P><I><STRONG><BR>Str#3b. "Build A Glossary" Strategy // identifying purpose and features </STRONG></P>
<P></I>- Are you finding that people terms differently? Perhaps using different words to convey the same meaning? Or giving different meanings to the same word? Not a surprise! </P>
<P>- Recommendation: build a glossary using a three-column spreadsheet (term, dictionary definition, project definition). <BR></P>
<P><I><STRONG><BR>Str#4. "Identify Major Sources of Stress" Strategy // identifying purpose and features</STRONG> </P>
<P></I>- Ask people about the most pressing problems that they face each day. "What stresses you out the most? What frightens you the most? What's the worst thing that could happen to you while your boss is watching?" </P>
<P>- Look for ways to eliminate or reduce the impact of those problems. <BR></P>
<P><I><BR><STRONG>Str#5. "Develop a Features List" Strategy // identifying purpose and features </STRONG></P>
<P></I>- Build a list of features. </P>
<P>- Think through each feature: the feature, who it's for, and why it's important. </P>
<P>- Use qualifiers to narrow the scope of the purpose and features statements. </P>
<P>- Prioritize your features list. </P>
<P>- Use the features list for planning and building frequent, tangible, working results. </P><img src ="http://www.blogjava.net/fidodido/aggbug/13404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-09-19 15:26 <a href="http://www.blogjava.net/fidodido/archive/2005/09/19/13404.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Object Modeling Strategies (II)</title><link>http://www.blogjava.net/fidodido/archive/2005/09/19/13403.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Mon, 19 Sep 2005 07:23:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/09/19/13403.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/13403.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/09/19/13403.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/13403.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/13403.html</trackback:ping><description><![CDATA[<P><I><STRONG>Str#1d. "Invest an Hour" Strategy // activities and model components</STRONG> </P>
<P></I>- Rather than philosophize endlessly, invest an hour in each of several different ways of modeling a particularly challenging area. Compare your results -- and decide which way to go (based upon actual results, rather than the outcome of a multiweek debate). <BR></P>
<P><I><STRONG><BR>Str#1e. "Consider the Domain First, Artifacts After That" Strategy // activities and model components</STRONG> </P>
<P></I>- Build an object model with a domain expert first. Then add-in content that you can extract from artifacts (existing data models, source code, whatever). </P>
<P>- Reason why: you need the benefit of the former (fresh insights, new ideas) to help you grapple with the latter (what to include, what to exclude). <BR></P>
<P><I><STRONG><BR>Str#1f. "Extract Useful Content From An Existing Data Model" Strategy // activities and model components</STRONG> </P>
<P></I>- Yes, it can be done. </P>
<P>- Best practice: build an initial object model with a domain expert first. Then use that model to help you filter out the classes and attributes (in an previous data model) that are no longer needed. Why: the added domain understanding will help you do a better job leaving unneeded things behind, rather than dragging everything from the past along with you once again. </P>
<P>- For the entities: </P>
<P>. List them. Delete correlation tables. Delete (or revise) names that do not fit the problem domain vocabulary (words that a domain expert uses and understands). Collapse supertypes-subtypes that do not express domain-based generalization-specialization. </P>
<P>- Then, when you work on attributes: </P>
<P>. List them. Delete (or revise) names that do not fit the problem domain vocabulary (words that a domain expert uses and understands). Delete flags, indicators, sequence numbers, and unique keys -- nearly all of which are simply leftover implementation mechanisms from a previous system. </P><img src ="http://www.blogjava.net/fidodido/aggbug/13403.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-09-19 15:23 <a href="http://www.blogjava.net/fidodido/archive/2005/09/19/13403.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>James Gosling</title><link>http://www.blogjava.net/fidodido/archive/2005/09/14/13035.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Wed, 14 Sep 2005 14:01:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/09/14/13035.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/13035.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/09/14/13035.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/13035.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/13035.html</trackback:ping><description><![CDATA[<DIV>今天是Java China 2005的最后一天，下午没有去各个分会场，而是去了长富宫饭店的“Java认证群英欢庆会”，目的只有一个：和Java之父James Gosling合影。</DIV>
<DIV>……</DIV>
<DIV>由于明天要交实习手册，拍照过程当中使用的个中手段先按下不表，总之合影是成功的，效果是令人满意的<IMG src="http://spaces.msn.com/rte/emoticons/smile_shades.gif"><BR><BR><IMG height=480 alt=r_james_i.jpg src="http://www.blogjava.net/images/blogjava_net/fidodido/2598/r_james_i.jpg" width=640 border=0></DIV><img src ="http://www.blogjava.net/fidodido/aggbug/13035.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-09-14 22:01 <a href="http://www.blogjava.net/fidodido/archive/2005/09/14/13035.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Joshua Bloch咏Tiger诗八首</title><link>http://www.blogjava.net/fidodido/archive/2005/09/08/12445.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Thu, 08 Sep 2005 08:59:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/09/08/12445.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/12445.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/09/08/12445.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/12445.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/12445.html</trackback:ping><description><![CDATA[<P>“Ease of Development”是J2SE 1.5的主要卖点。为此，这一版本加入了七种新的语言特性——Enhanced for Loop、Autoboxing/Auto-Unboxing、Varargs、Static Import、Enumeration、Metadata和Generics。使用这些特性，可以让编写出来的程序更简练、更清晰、更不容易出错，从而简化开发的过程。</P>
<P>Joshua Bloch（《Effective Java》的作者，J2SE 1.5的主要开发人员之一）效仿William Blake（1757-1827，英国诗人）的《<A href="http://www.daypoems.net/poems/441.html">Tiger</A>》一诗，为这些特性撰写了这样一组诗篇：</P>
<H4 class=major>咏Tiger</H4>
<BLOCKQUOTE>Tiger, Tiger burning bright<BR>Like a geek who works all night<BR>What new-fangled bit or byte<BR>Could ease the hacker"s weary plight?<BR></BLOCKQUOTE>
<P>这一首是总说Tiger中的能使开发变得简单的各种新语言特性。</P>
<H4 class=major>咏Enhanced for Loop</H4>
<BLOCKQUOTE>While Iterators have their uses<BR>They sometimes strangle us like nooses<BR>With enhanced-for"s deadly ray<BR>Iterator"s kept at bay<BR></BLOCKQUOTE>
<P>这一首单表Enhanced for Loop机制提供了一种更简单的遍历数组、Collection和其它实现了java.lang.Iterable接口的对象的方法。</P>
<H4 class=major>咏Autoboxing/Auto-Unboxing</H4>
<BLOCKQUOTE>When from the collections ints are drawn<BR>Wrapper classes make us mourn<BR>When Tiger comes, we"ll shed no tears<BR>We"ll autobox them in the ears<BR></BLOCKQUOTE>
<P>这一首单表Autoboxing机制/Auto-Unboxing提供了一种更简单的整合两套不同的类型系统（基本类型和引用类型）的机制。</P>
<H4 class=major>咏Varargs</H4>
<BLOCKQUOTE>O joyless nights, o joyless days<BR>Our programs cluttered with arrays<BR>With varargs here, we needn"t whine;<BR>We"ll simply put the args inline<BR></BLOCKQUOTE>
<P>这一首单表Varargs机制提供了一种更简单的传递个数可变的实参的方法。</P>
<H4 class=major>咏Static Import</H4>
<BLOCKQUOTE>And from the constant interface<BR>We shall inherit no disgrace<BR>With static import at our side<BR>Our joy will be unqualified<BR></BLOCKQUOTE>
<P>这一首单表Static Import机制提供了一种更简单的访问静态成员的机制。</P>
<H4 class=major>咏Enumeration</H4>
<BLOCKQUOTE>The int-enum will soon be gone<BR>Like a foe we"ve known too long.<BR>With type safe-enum"s mighty power<BR>Our foe will bother us no more<BR></BLOCKQUOTE>
<P>这一首单表Enumeration机制提供了一种更简单的定义“类型安全的枚举类”的方法。</P>
<H4 class=major>咏Metadata</H4>
<BLOCKQUOTE>As for noble metadata<BR>I"ll have to sing its praises later<BR>Its uses are so numerous<BR>To give their due, I"d miss the bus<BR></BLOCKQUOTE>
<P>这一首单表Metadata机制提供了一种更简单的定义“机器可读的说明信息”的机制。</P>
<H4 class=major>咏Generics</H4>
<BLOCKQUOTE>To the most despised collections" cast<BR>We"ll bid a fond farewell at last<BR>With generics" burning spear<BR>The need for cast will disappear<BR></BLOCKQUOTE>
<P>这一首是说用Generics机制，可以免去很多强制类型转化的步骤的事情。Generics机制还有些其它用法，在这里没有提到。</P><img src ="http://www.blogjava.net/fidodido/aggbug/12445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-09-08 16:59 <a href="http://www.blogjava.net/fidodido/archive/2005/09/08/12445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Object Modeling Strategies (I)</title><link>http://www.blogjava.net/fidodido/archive/2005/09/08/12401.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Thu, 08 Sep 2005 02:12:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/09/08/12401.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/12401.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/09/08/12401.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/12401.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/12401.html</trackback:ping><description><![CDATA[<STRONG>Activities and model components </STRONG>
<P><I><STRONG>Str#1. "Four Major Activities, Four Major Components" Strategy // activities and model components </STRONG></P>
<P></I>- Organize your work around four major activities, within four major components: </P>
<P>- Four major activities: </P>
<P>. Standard: Identify purpose and features, select objects, establish responsibilities, work out dynamics with scenarios. </P>
<P>. Variation 1: You may find it helpful to focus on working out dynamics with scenarios, establishing responsibilities along the way. This is especially suitable for real-time applications. </P>
<P>. Variation 2: You may find it helpful to select transaction, aggregate, and plan objects, then use the corresponding patterns to guide you through selecting additional objects, establishing responsibilities, and working out dynamics with scenarios. </P>
<P>- Four major components: </P>
<P>. Standard: Problem domain, human interaction, data management, system interaction. </P>
<P>. Variation 1: You may find it helpful to begin with human interaction, followed by problem domain, data management, and system interaction. This is especially suitable when your domain experts want to talk in terms of human interaction from the very start. </P>
<P>. Variation 2: You may find it helpful to begin with problem domain and system interaction, followed by human interaction and data management. This is especially suitable for real-time applications, when your domain experts are keenly interested in the data acquisition and control aspects of the system under consideration. <BR></P>
<P><I><BR><STRONG>Str#1a. "Build an Initial Object Model, then Proceed Feature-by-Feature" Strategy // activities and model components </STRONG></P>
<P></I>- Here is a very helpful path for building object models. </P>
<P>- Identify purpose and features. </P>
<P>. Purpose statement. Prioritized list of features. </P>
<P>- Build an initial object model, working with domain experts. </P>
<P>. Select initial objects (using strategies; include participants, transactions, places, items, specific items). </P>
<P>. Establish initial responsibilities (using strategy #86 and the stereotypical responsibilities expressed by object-model patterns). </P>
<P>- Work out dynamics with scenarios, feature-by-feature. </P>
<P>a. Develop a scenario view for the feature. </P>
<P>b. Add objects and responsibilities that you need for the scenario. </P>
<P><I><BR><STRONG>Str#1b. "Use Feature Milestones" Strategy // activities and model components </STRONG></P>
<P></I>- Use your prioritized features list to plan, build, and measure. </P>
<P>- Early in the development effort, use your prioritized features list day-by-day, while developing an initial object model and scenario views (one scenario view for each feature). </P>
<P>- For the rest of the development effort, use your prioritized features list to plan, build, and measure what you produce -- namely, the frequent, tangible, working results. </P>
<P>- Some notes: </P>
<P>. How frequent is "frequent"? </P>
<P>. . Each week, each month, or each quarter -- depends upon the size of the project and the amount of added effort required to make working results available to others. </P>
<P>- Why use features milestones -- and measure features completed, using frequent, tangible, working results? </P>
<P>. In two words: risk reduction. </P>
<P>- How do you estimate percent completion? </P>
<P>. Take the features list, assign a weight to each feature (based upon level of difficulty, relative number of lines of code, and level of skill of the person who will do the work), and then make your estimates. </P>
<P>. Your estimates will improve over time, as you deliver more and more tangible results along the way. </P>
<P><I><BR><STRONG>Str#1c. "Take Multiple Paths" Strategy // activities and model components </STRONG></P>
<P></I>- For each outcome, consider multiple paths for reaching that goal. Travel down one of those paths. When your progress slows somewhat, move to another path, for awhile. </P>
<P>- "All features, all classes, then the top ten classes" </P>
<P>. features -> classes -> top 10 classes -> responsibilities, scenarios for the top 10 </P>
<P>- "One feature at a time" </P>
<P>. feature -> small object model -> scenario view </P>
<P>- "Key players first" </P>
<P>. 1-2 participants + 1-2 transactions + line items, items -> responsibilities, scenarios </P>
<P>- "Key transactions first" </P>
<P>. transaction - subsequent transaction - subsequent transaction -> participants, line items, items -> attributes, services </P><img src ="http://www.blogjava.net/fidodido/aggbug/12401.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-09-08 10:12 <a href="http://www.blogjava.net/fidodido/archive/2005/09/08/12401.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>缺省适配器模式（Default Adapter）</title><link>http://www.blogjava.net/fidodido/archive/2005/09/06/12197.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Tue, 06 Sep 2005 04:01:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/09/06/12197.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/12197.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/09/06/12197.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/12197.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/12197.html</trackback:ping><description><![CDATA[<H4>一、概述</H4>
<P>当不需要全部实现适配器接口提供的方法时，可先设计一个抽象类实现适配器接口，并为接口中每个方法提供一个默认实现（空方法）。那么该抽象类的子类可有选择地覆盖父类的某些方法来实现需求。</P>
<H4>二、结构</H4>
<P align=center><IMG height=243 alt=defaultadapter.png src="http://www.blogjava.net/images/blogjava_net/fidodido/2507/defaultadapter.png" width=138 border=0></P>
<H4>&nbsp;</H4>
<H4>三、动机</H4>
<P>对于一个接口不想使用其所有的方法时。</P><img src ="http://www.blogjava.net/fidodido/aggbug/12197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-09-06 12:01 <a href="http://www.blogjava.net/fidodido/archive/2005/09/06/12197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>接受程序设计语言的再教育[转载自dearbook书评]</title><link>http://www.blogjava.net/fidodido/archive/2005/08/31/11683.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Wed, 31 Aug 2005 15:09:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/08/31/11683.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/11683.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/08/31/11683.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/11683.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/11683.html</trackback:ping><description><![CDATA[<P>再教育？没错。依个人愚见，大多数中国程序员都需要接受一次有关程序设计语言的再教育，而Michael L.Scott所著的《程序设计语言——实践之路》则可以成为这次再教育中的最好读本之一。<BR><BR>在现代汉语中，没有什么词比“急功近利”更能体现当代程序员对于程序设计语言的期望和要求了——我见过太多太多只学会了“Hello,World ”就打算独立编写企业级应用的速成者，我也见过太多太多刚掌握了一门面向对象语言的语法就宣称自己是OO专家的神仙级人物；在他们眼中，一本名为《某某语言入门》的教科书应足以取代《数据结构》、《编译原理》、《离散数学》等所有“高深”而“无用”的课程，而一名能熟练使用Hibernate或Spring的Java程序员就足以成为一家小型企业的J2EE首席架构师了。<BR><BR>更为有趣的是，这些急功近利的“语言万能论”者一方面会把某种最流行的语言或类库当作克敌制胜的惟一法宝，另一方面却又丝毫不理会那些经过数十年的积淀才成为现代程序设计语言精华的，贯穿于语法、语义和语用等三个层面的基本理念和基本特征；这种做法就像是把一部夏利引擎、麦凯伦外壳的赛车开上了F1赛道，难免会在残酷的现实面前落得个鼻青脸肿的结局。<BR>很显然，如果你对自己在实际工作中总是无法提高编码效率、无法改进软件质量的事实困惑不已，如果你在试用了28种开源框架和69种eclipse插件后仍不清楚自己眼前的垃圾代码该如何“重构”，那么，你也许需要抽出一些时间，补习一下你曾经极度蔑视的、看起来没有任何“用处”的基础知识了。对于那些没时间重温大学课程的上班族来说，这种补习最好从《程序设计语言——实践之路》开始。即便不能把这本八九百页的“大部头”全部读完，你也至少能在阅读过程中明白三个看似浅显、实则微妙的“大道理”： </P>
<P>　　其一，语言必须与环境相结合，才能发挥出最大的功用。这里所说的“环境”通常包括编译环境、运行环境和应用环境三个方面。举例来说，如果你打算仿照着某些开源框架的做法，使用控制反转和依赖注入技术消除代码中某些让人生厌的依赖关系，你一定会认真研习实现类似技术的语法特征，但你未必会主动思考以下几个问题：在编译层面，使用了这些语法特征的代码是否会影响到最终生成的目标代码质量？在运行层面，该如何组织这些语法特征，才能让使用了相关技术的可执行程序在支持废料收集的并发环境下有不俗的表现？在应用层面，这些旨在消除依赖关系的技术会不会破坏新、旧模块间的平衡关系，以至于我们必须花上大量时间改写原有的代码或接口才能保证系统的平滑升级？全面思考这些与环境相关的问题并不一定会改变你的抉择，但它却可以帮助你找到效率、可靠性和可用性之间的最佳平衡点。在此方面，《程序设计语言——实践之路》一书所使用的，将程序设计语言与编译原理、面向对象等知识综合起来、融会贯通的做法不但可以节省我们分类学习的大量时间，还可以训练我们从整体出发、多角度思维的方式与方法，其价值不言而喻。<BR><BR>其二，程序设计语言本身所具有的多样性可以成为我们提高软件开发水平的最佳指南。说到这里，我又想起了那些充斥在各大技术网站的，题为“某某语言比某某语言更强大”或“某某语言已死，某某语言必胜”的帖子。发表这些帖子的帖主也许并不懂得，程序设计语言的世界本来就是一个多样化的、五彩缤纷的世界，每一种成功进入应用、教学或科研领域的程序设计语言都有它值得学习和借鉴的地方。如果仅仅根据个人的喜好或是响应时尚的号召，就盲目地吹捧某一种语言并贬低其他所有语言，这样的帖子和那些频繁出现在Fans网站上的“爱死某某某，恨死某某某”的帖子有什么本质的不同？更为重要的是，如果我们能够在《程序设计语言——实践之路》的指下，真正懂得了函数式语言、数据流语言、逻辑式语言、冯·诺伊曼语言、面向对象语言等不同的语言类型在语法设计、编译器设计和运行环境设计方面的异同，我们就会惊讶地发现：Scheme语言的lambda表达式可以在C 语言中优雅、高效地解决诸如面向契约设计之类的复杂问题；Ada95语言中提供的同步和保护机制可以为那些使用Java编写的多线程应用提供重要的参考；Smalltalk语言与编译和运行环境的紧密结合则可以为我们设计可扩展的JavaScript宿主提供最好的借鉴……从这个意义上说，学习一种语言的意义绝不在于为自己增添一种求职和谋生的手段——真正善于学习的人总能从每种语言的设计和实现中找到许多可用于提高编程水平的关键特征。<BR><BR>其三，使用特定语言编写出来的代码是否优雅、可靠，这主要取决于程序员对各种基本理念和基本原则的认知程度，而不取决于程序员记住了多少复杂的语法特征或学会了多少流行类库的用法。正如《程序设计语言——实践之路》所说的那样，“典型的C 程序员都极少使用联合、多重继承、变动个数的参数，或者. 运算符”，但是，如果你了解了隐藏在这些复杂语法特征背后的东西——如内存空间的分配和寻址方式，复本式继承和共享式继承之间的关系，参数传递和求值顺序，动态方法约束和成员查找，等等——你就可以在需要使用这些语法特征的时候满怀信心地告诉自己：“嘿，这不过是某某原则或某某技术在C 语言中的表现形式罢了，我能搞定它！”反之，如果你不晓得与数据结构和算法相关的代码在编译、运行时必然存在的各种均衡与折中问题，即便你把C 语言的标准文档背得滚瓜烂熟，即便你可以默写出System.Collections命名空间中的所有属性和方法，你也会在体验过自己开发的软件与成熟软件之间的差别后大发感慨：“同样是使用C 语言，为什么我写的程序总会从头到脚散发着‘业余’的气味儿呢？”<BR><BR>关于程序设计语言的本质，Michael L.Scott是这样说的：“就像自然语言限制着人们解释和论述的方式一样，程序设计语言也限定了什么可以表达，什么不能表达，并对程序员能够怎样思考问题有着深刻而微妙的影响。”既然如此，我们还犹豫什么呢？与其后悔在学校中虚度了光阴，还不如马上捧起《程序设计语言——实践之路》这本书，接受一次有关程序设计语言的再教育呢！</P><img src ="http://www.blogjava.net/fidodido/aggbug/11683.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-08-31 23:09 <a href="http://www.blogjava.net/fidodido/archive/2005/08/31/11683.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>接口与Object类的关系？</title><link>http://www.blogjava.net/fidodido/archive/2005/08/19/10506.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Fri, 19 Aug 2005 05:53:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/08/19/10506.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/10506.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/08/19/10506.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/10506.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/10506.html</trackback:ping><description><![CDATA[今天凌晨coding的时候发现一个很有趣的现象。“Object类是Java体系的单根父节点，所有Java类都从Object类继承。”这句话是大部分green hand都知道的Java金句，毋庸置疑。那如果我问你接口和Object类的关系呢？答案是“没有关系”。请看下面的代码：<BR><BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><SPAN style="COLOR: #008080">1</SPAN><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">Map&nbsp;map&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;HashMap();<BR></SPAN><SPAN style="COLOR: #008080">2</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>map.clone();</SPAN></DIV></DIV><BR>Map是一个接口，HashMap是一个类。clone()方法在Object类中定义，因此我下意识认为第二行可以这么写。结果编译器报错：clone()方法未定义。这个错误让我很郁闷，看了半天doc才发祥原来Map是一个接口，而接口和Object类没有任何关系，所以Map也就没有继承clone()。于是把代码改成下面的样子：<BR><BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><SPAN style="COLOR: #008080">1</SPAN><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">HashMap&nbsp;map&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;HashMap();<BR></SPAN><SPAN style="COLOR: #008080">2</SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top>map.clone();</SPAN></DIV></DIV><BR>这样就可以了。<img src ="http://www.blogjava.net/fidodido/aggbug/10506.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-08-19 13:53 <a href="http://www.blogjava.net/fidodido/archive/2005/08/19/10506.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Alloy破解过程</title><link>http://www.blogjava.net/fidodido/archive/2005/08/09/9663.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Tue, 09 Aug 2005 07:42:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/08/09/9663.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/9663.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/08/09/9663.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/9663.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/9663.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;1package&nbsp;com.incors.plaf.alloy;&nbsp;&nbsp;2&nbsp;&nbsp;3import&nbsp;java.io.*;&nbsp;&nbsp;4import&nbsp;java.util.GregorianCalendar;&nbsp;&nbsp;5import&nbsp;java.util.zip.CR...&nbsp;&nbsp;<a href='http://www.blogjava.net/fidodido/archive/2005/08/09/9663.html'>阅读全文</a><img src ="http://www.blogjava.net/fidodido/aggbug/9663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-08-09 15:42 <a href="http://www.blogjava.net/fidodido/archive/2005/08/09/9663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java生日快乐</title><link>http://www.blogjava.net/fidodido/archive/2005/08/09/9660.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Tue, 09 Aug 2005 07:07:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/08/09/9660.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/9660.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/08/09/9660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/9660.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/9660.html</trackback:ping><description><![CDATA[<P>Java今年10岁了，虽然我接触他只有短短的5年，但是这5年我“矢志不渝”地扛着Java的大旗，包括到处鼓吹“Compile once, run anywhere”；包括“怂恿”同学学习Java；包括和.net阵营的fans面红耳赤地争论；包括对CPP的鄙视<IMG height=19 src="http://www.blogjava.net/Emoticons/shades_smile.gif" width=19 border=0>；包括对《Thinking in Java》的作者Bruce Eckel的顶礼膜拜（虽然他先写了《Thinking in C++》，但我“不记前嫌”<IMG height=19 src="http://www.blogjava.net/Emoticons/regular_smile.gif" width=19 border=0>）；包括对GoF的抱怨，只因为他们的《Design Patterns》用CPP写示例（那时还没有Java）；包括床头不下20本Java相关书籍；包括写<A href="http://blog.csdn.net/sandy_xu/archive/2005/03/15/320387.aspx"><FONT color=#4563b9>blog</FONT></A>指责学院一位资深的教授，只因为他教“面向对象技术”时讲授的Java知识错误百出；包括因为Java去看《Java与模式》（16开，1024页）、《Object-Oriented Software Construction》（1254页，E文）；包括这次花250大洋参加Java 10周年大会…………</P>
<P>一直关注Java的成长，一直关注Java技术的发展。10年对人类来说可能很短暂，但对于一门计算机技术来说，10年兴盛的发展本身就是一个奇迹。我是幸运的，因为我亲眼目睹并且亲身经历了Sun创造的这个奇迹。再过20年，我会很自豪地对我儿子说“小子，这就是Java，老爸是看着他长大的”</P><img src ="http://www.blogjava.net/fidodido/aggbug/9660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-08-09 15:07 <a href="http://www.blogjava.net/fidodido/archive/2005/08/09/9660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>A beginners guide to Dependency Injection [转载自TSS]</title><link>http://www.blogjava.net/fidodido/archive/2005/08/08/9610.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Mon, 08 Aug 2005 14:30:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/08/08/9610.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/9610.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/08/08/9610.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/9610.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/9610.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ScopeThis article presents a high level overview of Dependency Injection (DI). It aims to present the overall concept of Dependency Injection to the junior developer within the context of how it cou...&nbsp;&nbsp;<a href='http://www.blogjava.net/fidodido/archive/2005/08/08/9610.html'>阅读全文</a><img src ="http://www.blogjava.net/fidodido/aggbug/9610.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-08-08 22:30 <a href="http://www.blogjava.net/fidodido/archive/2005/08/08/9610.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>适配器模式（Adapter）</title><link>http://www.blogjava.net/fidodido/archive/2005/08/06/9484.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Sat, 06 Aug 2005 11:39:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/08/06/9484.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/9484.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/08/06/9484.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/9484.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/9484.html</trackback:ping><description><![CDATA[<H3>一、概述</H3>
<P>类的适配器模式把被适配的类的API转换成为目标类的API</P>
<P></P>
<H3>二、结构</H3>
<H4>1、类的适配器模式</H4>
<P align=center><IMG height=187 alt=o_adapter1.gif src="http://www.blogjava.net/images/blogjava_net/fidodido/2507/o_adapter1.gif" width=257 border=0></P>
<P>Target：所期待得到的接口</P>
<P>Adaptee：现有需要适配的类</P>
<P>Adapter：把源接口转化成目标接口的核心类</P>
<P></P>
<H4>2、对象的适配器模式</H4>
<P align=center><IMG height=199 alt=o_adapter2.gif src="http://www.blogjava.net/images/blogjava_net/fidodido/2507/o_adapter2.gif" width=257 border=0></P>
<P>i、同一个适配器可以把源和其子类都适配到目标接口</P>
<P>ii、与类的适配器相比，要覆盖源类的方法不很容易，除非做一个源类的子类，然后对子类适配</P>
<P>iii、可以很方便地添加一个方法</P>
<P></P>
<H3>三、动机</H3>
<P>1、系统需要使用现有的类，而该类的接口不符合系统新的需要</P>
<P>2、需要建立一个可复用的类用于使一些彼此之间没有太大关系的类一同工作</P>
<P>3、需要改变多个已有的子类的接口</P><img src ="http://www.blogjava.net/fidodido/aggbug/9484.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-08-06 19:39 <a href="http://www.blogjava.net/fidodido/archive/2005/08/06/9484.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IDEA破解过程</title><link>http://www.blogjava.net/fidodido/archive/2005/08/05/9423.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Fri, 05 Aug 2005 11:11:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/08/05/9423.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/9423.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/08/05/9423.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/9423.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/9423.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 开场白就不说了，直接切入正题吧。本破解的前提是安装了IDEA 5.0并获得了30天的评估序列号，即IDEA可以启动但有30天的时间限制。首先根据bin目录下idea.bat的内容确定入口类：SET&nbsp;CLASS_PATH=%IDEA_HOME%\lib\idea.jarSET&nbsp;CLASS_PATH=%CLASS_PATH%;%IDEA_HOME%\lib\openapi....&nbsp;&nbsp;<a href='http://www.blogjava.net/fidodido/archive/2005/08/05/9423.html'>阅读全文</a><img src ="http://www.blogjava.net/fidodido/aggbug/9423.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-08-05 19:11 <a href="http://www.blogjava.net/fidodido/archive/2005/08/05/9423.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>腾讯七宗罪 [转载自PCHome]</title><link>http://www.blogjava.net/fidodido/archive/2005/08/05/9378.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Fri, 05 Aug 2005 03:15:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/08/05/9378.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/9378.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/08/05/9378.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/9378.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/9378.html</trackback:ping><description><![CDATA[<P class=postTitle></P>
<H2 class=postTitle><A name=_Toc102506875><SPAN style="mso-bookmark: _Toc102506915"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">开篇言</SPAN></SPAN></A></H2>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: center; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0" align=center><SPAN lang=EN-US><FONT size=6><SHAPETYPE id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"></SHAPETYPE><STROKE joinstyle="miter"></STROKE><FORMULAS></FORMULAS><F eqn="if lineDrawn pixelLineWidth 0"></F><F eqn="sum @0 1 0"></F><F eqn="sum 0 0 @1"></F><F eqn="prod @2 1 2"></F><F eqn="prod @3 21600 pixelWidth"></F><F eqn="prod @3 21600 pixelHeight"></F><F eqn="sum @0 0 1"></F><F eqn="prod @6 1 2"></F><F eqn="prod @7 21600 pixelWidth"></F><F eqn="sum @8 21600 0"></F><F eqn="prod @7 21600 pixelHeight"></F><F eqn="sum @10 21600 0"></F><PATH o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></PATH><LOCK aspectratio="t" v:ext="edit"></LOCK><SHAPE id=_x0000_i1026 style="WIDTH: 240pt; HEIGHT: 342pt" type="#_x0000_t75"></SHAPE><IMAGEDATA o:title="biaoti1" src="file:///C:\DOCUME~1\FIDODI~1\LOCALS~1\Temp\msohtml1\03\clip_image001.jpg"></IMAGEDATA></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0"><SPAN lang=EN-US>
<P class=postText><FONT face=Verdana size=3>&nbsp;</FONT></SPAN><FONT face=Verdana size=3>&nbsp;<IMG height=713 alt=zQ.jpg src="http://www.blogjava.net/images/blogjava_net/fidodido/2507/zQ.jpg" width=500 border=0><BR><BR></FONT><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">腾讯，作为中国最大的即时消息软件运营商，拥有同时在线用户高达</SPAN><SPAN lang=EN-US><FONT face=Verdana>3000</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">万，其主力产品腾讯</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">甚至已经影响到了很多年轻一代的生活交流方式。这样一个企业，在业界被千万光环所笼罩，但是它真的值得用户信赖和尊敬吗？在这些年，腾讯到底是如何对待自己的产品，如何对待自己超过</SPAN><SPAN lang=EN-US><FONT face=Verdana>3</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">亿的庞大用户呢？让我们一起来看一个真实的腾讯。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0"><SPAN lang=EN-US>
<H2 class=postText></SPAN><A name=_Toc102506876><SPAN style="mso-bookmark: _Toc102506916"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">抄袭，永无止境</SPAN></SPAN></A></H2>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center><SPAN lang=EN-US><SHAPE id=_x0000_i1027 style="WIDTH: 5in; HEIGHT: 193.5pt" type="#_x0000_t75"></SHAPE><IMAGEDATA o:title="xtc11" src="file:///C:\DOCUME~1\FIDODI~1\LOCALS~1\Temp\msohtml1\03\clip_image003.jpg"></IMAGEDATA><FONT size=6></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0"><SPAN lang=EN-US>
<P class=postText><FONT face=Verdana size=3><IMG height=269 alt=o_xtc11.jpg src="http://www.blogjava.net/images/blogjava_net/fidodido/2507/o_xtc11.jpg" width=500 border=0></FONT></P></SPAN>
<P class=postText></P>
<P class=postText><FONT face=Verdana size=3>&nbsp;</FONT><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">之所以把“抄袭”作为腾讯的第一个关键词，原因很简单，回顾一下自腾讯发布</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ2003</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">到现在的</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ2005</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，我们又能看到多少是腾讯原创的技术或者是功能？恐怕是屈指可数了。作为腾讯的主打产品，</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">理应受到腾讯足够的重视，也凝聚了腾讯最多的心血，可就是这么一个支柱产品，抄袭却伴随着它的每一次更新。<BR><BR></SPAN></FONT><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">一个软件给用户的第一印象就是软件界面，就拿</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ2005</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">中一个重要的界面“改进”——菜单来说吧，被腾讯称为“时尚流畅的界面设计”，难道大家不觉得它很眼熟吗？没错，我们现在最常用的</SPAN><SPAN lang=EN-US><FONT face=Verdana>Windows XP</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的开始菜单不就是这个样子的嘛。而</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的聊天窗口，更是早在</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ2004</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">推出之时就开始模仿</SPAN><SPAN lang=EN-US><FONT face=Verdana>MSN Messenger</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">了。这还仅仅是软件界面上的抄袭，在功能上腾讯</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">对其他竞争对手的抄袭更是举不胜举。比如自定义表情、自定义头像、多人聊天、个性签名、</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">魔法书、</SPAN><SPAN lang=EN-US><FONT face=Verdana>Q-Zone</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">等等都是抄袭自</SPAN><SPAN lang=EN-US><FONT face=Verdana>MSN Messenger</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。其中</SPAN><SPAN lang=EN-US><FONT face=Verdana>Q-Zone</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的抄袭更是拙劣之作，连程序的文件名都抄袭成</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQSpace.dll</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，难道腾讯连</SPAN><SPAN lang=EN-US><FONT face=Verdana>Space</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">和</SPAN><SPAN lang=EN-US><FONT face=Verdana>Spaces</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的区别都分不清楚吗？腾讯不光无休止的抄袭像</SPAN><SPAN lang=EN-US><FONT face=Verdana>MSN Messenger</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">这样的国际大牌，甚至连国内的竞争对手，他们也一样不放过，其中腾讯</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的校友录、文件共享和多人聊天就抄袭自后起之秀</SPAN><SPAN lang=EN-US><FONT face=Verdana>UC</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。<BR></SPAN></FONT><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><BR>现在，腾讯甚至已经到了连抄都懒得抄的地步，直接花钱去买竞争对手的优秀技术。最近腾讯大肆造势的</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">超级语音，就是向国外一家软件技术公司买来的，而使用这个语音技术最早的代表软件，我想很多国内的电脑用户也都知道，那就是</SPAN><SPAN lang=EN-US><FONT face=Verdana>Skype</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。腾讯这样做的目的无非就是大压由</SPAN><SPAN lang=EN-US><FONT face=Verdana>Skype</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">与</SPAN><SPAN lang=EN-US><FONT face=Verdana>TOM</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">在线合作推出的</SPAN><SPAN lang=EN-US><FONT face=Verdana>Tom-Skype</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">简体中文版。<BR></SPAN></FONT><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><BR>我不禁要问，这样一个</SPAN><SPAN lang=EN-US><FONT face=Verdana>IT</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">界的知名企业，如果自己产品的大部分功能都只能抄袭自竞争对手，那他除了抄袭，还会做别的吗？</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0"><SPAN lang=EN-US>
<H2 class=postText></SPAN><A name=_Toc102506877><SPAN style="mso-bookmark: _Toc102506917"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">技术落后，不思进取</SPAN></SPAN></A></H2>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: center; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0" align=center><SPAN lang=EN-US><SHAPE id=_x0000_i1028 style="WIDTH: 5in; HEIGHT: 268.5pt" type="#_x0000_t75"></SHAPE><IMAGEDATA o:title="xtc12" src="file:///C:\DOCUME~1\FIDODI~1\LOCALS~1\Temp\msohtml1\03\clip_image004.jpg"></IMAGEDATA><FONT size=6></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0"><SPAN lang=EN-US>
<P class=postText></SPAN><FONT face=Verdana size=3><IMG height=373 alt=o_xtc12.jpg src="http://www.blogjava.net/images/blogjava_net/fidodido/2507/o_xtc12.jpg" width=500 border=0></FONT></P>
<P class=postText></P>
<P class=postText><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">如果抄袭还可以美化成为“借鉴”，那么软件开发技术上的落后，又能怪谁呢？腾讯自</SPAN><SPAN lang=EN-US><FONT face=Verdana>1998</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">年发布</SPAN><SPAN lang=EN-US><FONT face=Verdana>Oicq</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">至今，已经走过了</SPAN><SPAN lang=EN-US><FONT face=Verdana>6</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个年头，期间软件行业的技术发展突飞猛进。但腾讯的软件开发技术却进步缓慢，甚至可以说是毫无改进。如果你是一个腾讯</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的老用户，那么你一定非常怀念曾经的</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">吧，小巧的体积、出色的性能，当时让多少人从</SPAN><SPAN lang=EN-US><FONT face=Verdana>ICQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">转投腾讯</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的怀抱，而这也奠定了腾讯作为中国最大即时消息软件运营商不可撼动的地位。从</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ2000</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的</SPAN><SPAN lang=EN-US><FONT face=Verdana>7</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">、</SPAN><SPAN lang=EN-US><FONT face=Verdana>8</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">兆，到</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ2003</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的</SPAN><SPAN lang=EN-US><FONT face=Verdana>20</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">多兆，再到</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ2004</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的</SPAN><SPAN lang=EN-US><FONT face=Verdana>40</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">多兆，时</SPAN><FONT face=Verdana> </FONT><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">至今日，</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ2005</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">所占用的硬盘空间已经突破了</SPAN><SPAN lang=EN-US><FONT face=Verdana>70</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">兆，对于一个聊天软件，这样臃肿庞大的软件体积，很显然是太过分了。所以网上才会不断有各种各样为腾讯</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">减肥的“良方”出现，用户也不断希望腾讯可以出一个</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">精简版。真不知道未来会不会为了安装</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">而需要升级硬盘。另外，这还不包括那些被强行安装进用户电脑里面的腾讯浏览器和</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">游戏所占的空间。<BR></SPAN></FONT><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><BR>造成</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">庞大身躯的症结，就在于腾讯软件开发技术上的落后。粗略统计了一下，一个完整安装好的</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，里面所含有的程序文件一共有近</SPAN><SPAN lang=EN-US><FONT face=Verdana>2000</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个。用</SPAN><SPAN lang=EN-US><FONT face=Verdana>2000</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">多个文件来构成一个聊天软件，实在是软件开发技术上的失败和无能了。要知道，其他同类软件都要比腾讯</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">精简的多，</SPAN><SPAN lang=EN-US><FONT face=Verdana>MSN Messenger</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">仅有</SPAN><SPAN lang=EN-US><FONT face=Verdana>19</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个文件，但是功能丝毫不比腾讯的</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">差，甚至更强大。<BR></SPAN></FONT><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><BR>由于软件落后的编程技术和臃肿的体态，腾讯</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">现在对用户计算机的性能要求也越来越高，大有计算机硬件杀手的趋势。正常情况下，一个仅有</SPAN><SPAN lang=EN-US><FONT face=Verdana>10</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">个好友的</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">运行时，它所耗去的计算机内存大致为</SPAN><SPAN lang=EN-US><FONT face=Verdana>30-40</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">兆，而随着好友数量的增加内存的使用还会继续攀升。这对现在电脑标配</SPAN><SPAN lang=EN-US><FONT face=Verdana>256</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">兆的内存来说，实在是太大了，甚至有些用户运行了</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">之后，就不能用电脑做其他的工作了。<BR></SPAN></FONT><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><BR>对于一般用户，如果上面这些弊端还不易察觉的话，那么由于这些弊端所带来的软件运行不稳定，用户可以说是最有发言权的了。腾讯</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">出现非法操作已经不是什么稀罕事，谁没出现过非法操作那才稀罕。在腾讯官方的用户社区里，抱怨腾讯</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">运行不稳定的用户之声更是此起彼伏。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0"><SPAN lang=EN-US>
<H2 class=postText></SPAN><A name=_Toc102506878><SPAN style="mso-bookmark: _Toc102506918"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">安全与我无关</SPAN></SPAN></A></H2>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: center; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0" align=center><SPAN lang=EN-US><SHAPE id=_x0000_i1029 style="WIDTH: 5in; HEIGHT: 225.75pt" type="#_x0000_t75"></SHAPE><IMAGEDATA o:title="xtc13" src="file:///C:\DOCUME~1\FIDODI~1\LOCALS~1\Temp\msohtml1\03\clip_image005.jpg"></IMAGEDATA><FONT size=6></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0"><SPAN lang=EN-US>
<P class=postText><FONT face=Verdana size=3>&nbsp;<IMG height=314 alt=o_xtc13.jpg src="http://www.blogjava.net/images/blogjava_net/fidodido/2507/o_xtc13.jpg" width=500 border=0></FONT></SPAN></P>
<P class=postText></P>
<P class=postText><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT size=3>现在软件开发厂商都非常重视产品的安全性，并不断致力于改善和修补产品存在的安全漏洞及隐患。作为信息沟通和资讯传播的即时消息软件来说，软件的安全可靠就显得更加重要。那腾讯在软件的安全性上，又做得如何呢？<BR><BR></FONT></SPAN><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">用过</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的人，谁没收到过诸如“</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">尾巴”这样的病毒呢？对于这个通过</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">肆虐全国的病毒，腾讯至今也没有拿出任何行之有效的应对措施，腾讯的漠视俨然是病毒传播的工具和帮凶，而这种漠视实际上也是与中华人民共和国公安部在</SPAN><SPAN lang=EN-US><FONT face=Verdana>2000</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">年颁布的《计算机病毒防</SPAN><FONT face=Verdana> </FONT><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">治管理办法》中的精神相违背的。<BR></SPAN></FONT><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><BR>如果病毒的传播不是腾讯所能控制的，那么腾讯产品自身多次爆出的安全漏洞，腾讯总应该重视了吧？可是，在每次安全漏洞被公开后，腾讯总是在推诿自己应该承担的责任，把这些安全漏洞产生的原因全部归咎于微软视窗系统。直到现在，腾讯产品中依然存在着很多众人皆知的安全漏洞，比如著名的“本地消息漏洞”，这些漏洞已经长期存在于腾讯的</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">、</SPAN><SPAN lang=EN-US><FONT face=Verdana>TM</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">软件之中，而没有得到任何的解决。这样无疑是把用户的私人信息暴露在光天化日之下，而用户却丝毫没有办法。不知道是腾讯没有这个技术实力还是根本就不在乎用户是否安全，根本就不愿意去解决这些安全隐患，给用户提供一个安全的交流平台。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0"><SPAN lang=EN-US>
<H2 class=postText></SPAN><A name=_Toc102506879><SPAN style="mso-bookmark: _Toc102506919"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">版本混乱，错误低级</SPAN></SPAN></A></H2>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: center; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0" align=center><SPAN lang=EN-US><SHAPE id=_x0000_i1030 style="WIDTH: 5in; HEIGHT: 253.5pt" type="#_x0000_t75"></SHAPE><IMAGEDATA o:title="xtc14" src="file:///C:\DOCUME~1\FIDODI~1\LOCALS~1\Temp\msohtml1\03\clip_image006.jpg"></IMAGEDATA><FONT size=6></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0"><SPAN lang=EN-US>
<P class=postText><FONT face=Verdana size=3><IMG height=352 alt=o_xtc14.jpg src="http://www.blogjava.net/images/blogjava_net/fidodido/2507/o_xtc14.jpg" width=500 border=0><BR></FONT></SPAN><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><BR>要是现在有一个名为“软件版本号最佳创意奖”的话，那么这个奖项非腾讯莫属了。从</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ2003</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">到最新的</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ2005</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，历经的版本号高达</SPAN><SPAN lang=EN-US><FONT face=Verdana>20</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">多个。从</SPAN><SPAN lang=EN-US><FONT face=Verdana>Preview</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">到</SPAN><SPAN lang=EN-US><FONT face=Verdana>Beta</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，再到什么正式版、稳定版，最后还有奥林匹克版、贺岁版，用户已经在腾讯众多的产品</SPAN><FONT face=Verdana> </FONT><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">版本面前显得茫然无措了。腾讯在拿用户当免费的测试员，让用户来替腾讯测试一些毫不成熟的产品，承担由于软件不稳定所带来的使用风险。<BR></SPAN></FONT><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><BR>不仅仅是软件产品版本的混乱，甚至连软件的发布工作都一样混乱。就拿最近一次</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ2005 Beta1</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的发布来说。原本已经确定并公布的发布日期，因为腾讯自己的原因出现跳票，而到了最后的发布时刻，竟然出现了整个软件行业都极其罕见的低级错误，而导致产品发布又继续延期。到底在发布的那一刻，出现了什么样的低级错误呢？腾讯</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的软件使用许可</SPAN><FONT face=Verdana> </FONT><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">协议里，竟然是</SPAN><SPAN lang=EN-US><FONT face=Verdana>Skype</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的协议内容，要您说，这算不算是天下奇观了？很多人当时还不相信，以为这是愚人节的恶作剧，可是当我们把两次发布的版本安装后一看，我们不得不相信了。也许是因为腾讯已经抄习惯了，所以连人家的软件使用许可协议也都抄了过来吧。看</SPAN><FONT face=Verdana> </FONT><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">来我们不得不佩服腾讯一直吹嘘的专业精神了。<BR></SPAN></FONT><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><FONT size=3><BR>一个企业对于自己的产品是如此一种不专业的态度，那么它还能够凭借什么在这个行业里立足呢？难道用谎言和欺骗？</FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0"><SPAN lang=EN-US>
<H2 class=postText></SPAN><A name=_Toc102506880><SPAN style="mso-bookmark: _Toc102506920"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">藏污纳垢，毒害青少年</SPAN></SPAN></A></H2>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0"><SPAN lang=EN-US><SHAPE id=_x0000_i1031 style="WIDTH: 5in; HEIGHT: 231.75pt" type="#_x0000_t75"></SHAPE><IMAGEDATA o:title="wei1" src="file:///C:\DOCUME~1\FIDODI~1\LOCALS~1\Temp\msohtml1\03\clip_image007.jpg"></IMAGEDATA><FONT size=6></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0"><SPAN lang=EN-US>
<P class=postText></SPAN><FONT face=Verdana size=3><IMG height=322 alt=o_wei1.jpg src="http://www.blogjava.net/images/blogjava_net/fidodido/2507/o_wei1.jpg" width=500 border=0>&nbsp;</FONT></P>
<P class=postText></P>
<P class=postText><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">据腾讯统计，其产品的主要使用用户平均年龄不超过</SPAN><SPAN lang=EN-US><FONT face=Verdana>24</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">岁，而且占绝大部分。对于这些青少年用户，他们通过腾讯产品所能接触的到底是一个什么样的世界呢？<BR></SPAN></FONT><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><BR>由于腾讯的管理不善，青少年所接触到的</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">环境已经充斥了色情、金钱这些严重危害青少年健康的信息。我们随便打开一个腾讯聊天室，都会看到一些人在发布色情交易广告，而这些信息根本没有得到腾讯的有效过滤。而能在腾讯上找到的唯一一个对于青少年上网行为做</SPAN><FONT face=Verdana> </FONT><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">出提示的文章便是安装</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">时名为《青少年上网安全指引》了。难道说，有了这样一个根本就没有人认真看过的提示，腾讯就对青少年的上网行为毫无责任了吗？<BR></SPAN></FONT><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><BR>这还仅仅是冰山一角，有些人更是在发布违法广告信息以及传播危害国家利益的邪教信息，很明显，</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">已经成为一些不法分子的工具。被媒体公开报道的，通过腾讯</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">进行违法犯罪活动的案例已经有过很多了，国家也有关于聊天室的相关管理规定，但是为什么至今腾讯的管理还是如此懈怠呢？难道说，作为这些有害信息传播载体的腾讯，就一点责任都没有吗？腾讯明知道自己的多数用户为青少年，可是却疏于对其提供的网络交流环境的管理，这实在是难逃其咎。<BR></SPAN></FONT><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><BR>情况不止如此。在腾讯</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">门户网站上，更是充斥着暗藏挑逗的有害信息。如果说有些有害信息是一些不法分子利用</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">进行传播的话，那么这些为了吸引眼球，而故意设置的具有暗示、挑逗的有害信息，又怪谁呢？作为一个负责任的企业，理应为用户提供一个安全、洁净</SPAN><FONT face=Verdana> </FONT><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的沟通环境，而不是这种到处藏污纳垢的环境。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0"><SPAN lang=EN-US>
<H2 class=postText></SPAN><A name=_Toc102506881><SPAN style="mso-bookmark: _Toc102506921"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">低质量的客户服务</SPAN></SPAN></A></H2>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: center; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0" align=center><SPAN lang=EN-US><SHAPE id=_x0000_i1025 style="WIDTH: 5in; HEIGHT: 231pt" type="#_x0000_t75"></SHAPE><IMAGEDATA o:title="xtc17" src="file:///C:\DOCUME~1\FIDODI~1\LOCALS~1\Temp\msohtml1\03\clip_image008.jpg"></IMAGEDATA><FONT size=6></FONT></SPAN></P>
<P class=MsoNormal style="MARGIN: 6pt 0cm 0pt; TEXT-INDENT: 21pt; mso-para-margin-top: .5gd; mso-char-indent-count: 2.0"><SPAN lang=EN-US>
<P class=postText><FONT face=Verdana size=3>&nbsp;<IMG height=321 alt=o_xtc17.jpg src="http://www.blogjava.net/images/blogjava_net/fidodido/2507/o_xtc17.jpg" width=500 border=0><BR></FONT></SPAN><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><BR>作为一个面向全国的服务性企业，竟然连一部</SPAN><SPAN lang=EN-US><FONT face=Verdana>800</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">免费热线电话都没有。如果腾讯是一家普通的公司也情有可原，但是腾讯每年从用户、广告商那里收到的钱，真的让他们连一个免费电话的成本都支付不起吗？按照腾讯</SPAN><SPAN lang=EN-US><FONT face=Verdana>2004</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">年的业绩年报数字，腾讯</SPAN><SPAN lang=EN-US><FONT face=Verdana>2004</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">年全年盈</SPAN><FONT face=Verdana> </FONT><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">利</SPAN><SPAN lang=EN-US><FONT face=Verdana>4.467</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">亿人民币，很显然，腾讯根本就没有从用户的利益出发，本着为更好的客户服务的态度对待这些问题。<BR></SPAN></FONT><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><BR>在腾讯的官方产品社区中，用户关于产品质量的问题几乎很少看到有腾讯的工作人员进行及时地解答。而用户在遇到问题时，更多的是去一些第三方的技术社区寻求帮助。很难想象，腾讯的客户服务人员，对于自己的产品了解程度如此不足，又如何更好的为用户提供技术上</SPAN><FONT face=Verdana> </FONT><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的帮助呢？难道用户需要的仅仅是话务员吗？<BR></SPAN></FONT><FONT size=3><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><BR>而除了无法帮助用户解决问题外，客户服务人员对问题的推托也到了让用户无奈的地步。如果你想知道为什么自己的</SPAN><SPAN lang=EN-US><FONT face=Verdana>QQ</FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">会非法操作，那么腾讯给你的答案就：你的电脑有病毒了。反正，不管怎么样，就是用户的电脑不够好，与腾讯无关。真不知道，这样的态度，如何可以让用户信赖你。<BR></SPAN></FONT><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><BR>总结出腾讯的这些问题，也许也是现在中国</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">IT</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">行业中各个厂商所面临的通病，急功近利、唯利是图、丧失诚信，这些已经成为了中国很多软件厂商的标志，又何止一个腾讯呢？只不过腾讯作为中国</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">IT</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">业一个成功的典型，更加具有代表性。而它所暴露出来的问题，对用户</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体"> </SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">利益的损失也更大、更多。我们真诚的希望，作为中国</SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: Verdana; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体">IT</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">业支柱的厂商们，可以引以为戒，多做有益于产业发展、有益于用户的事情，而不要把欺骗当作能耐，不要把无耻当作光荣。</SPAN></P><img src ="http://www.blogjava.net/fidodido/aggbug/9378.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-08-05 11:15 <a href="http://www.blogjava.net/fidodido/archive/2005/08/05/9378.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>原型模式（Prototype）</title><link>http://www.blogjava.net/fidodido/archive/2005/08/05/9376.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Fri, 05 Aug 2005 02:54:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/08/05/9376.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/9376.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/08/05/9376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/9376.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/9376.html</trackback:ping><description><![CDATA[<H3>一、概述</H3>
<P><FONT size=2>原型模式属于对象创建模式，通过给出一个原型对象来指明所要创建的对象类型，然后用复制这个对象的方法创建出更多同类型的对象。<BR></FONT></P>
<P></P>
<H4>&nbsp;</H4>
<H3>二、结构</H3>
<H4>1、简单形式</H4>
<P align=center><IMG height=168 alt=o_prototype1.gif src="http://www.blogjava.net/images/blogjava_net/fidodido/2507/o_prototype1.gif" width=314 border=0></P>
<P><FONT size=2>Client：提出创建对象的请求</FONT></P>
<P><FONT size=2>Prototype：抽象角色，给出所有具体原型类所需的接口</FONT></P>
<P><FONT size=2>ConcretePrototype：被复制的对象<BR></FONT></P>
<P></P>
<H4><BR>2、登记形式</H4>
<P align=center><IMG height=227 alt=o_prototype2.gif src="http://www.blogjava.net/images/blogjava_net/fidodido/2507/o_prototype2.gif" width=326 border=0></P>
<P><FONT size=2>PrototypeManager：创建并记录具体对象<BR></FONT></P>
<P></P>
<H4>&nbsp;</H4>
<H3>三、浅克隆与深克隆</H3>
<P><FONT size=2>浅克隆：仅做refrence一级的克隆，refrence所指的对象不被克隆</FONT></P>
<P><FONT size=2>深克隆：将refrence所指的对象进行递归克隆，需考虑克隆深度及循环克隆问题</FONT></P>
<P></P>
<H3><BR>四、动机</H3>
<P><FONT size=2>替换较复杂的等级结构的工厂方法</FONT></P>
<P></P>
<H3><BR>五、优缺点</H3>
<P><FONT color=#000000 size=2><FONT color=#9acd32>1、</FONT>允许动态地增加或减少产品类，且对整个现有的产品结构没有影响</FONT></P>
<P><FONT color=#000000 size=2><FONT color=#9acd32>2、</FONT>提供简化的创建结构</FONT></P>
<P><FONT color=#000000 size=2><FONT color=#9acd32>3、</FONT>具有动态加载新功能的能力</FONT></P>
<P><FONT color=#000000 size=2><FONT color=#9acd32>4、</FONT>产品类不需要有确定的等级结构</FONT></P>
<P><FONT color=#000000 size=2><FONT color=#ffa500>I、</FONT>每一个类必须配备一个克隆方法</FONT></P><img src ="http://www.blogjava.net/fidodido/aggbug/9376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-08-05 10:54 <a href="http://www.blogjava.net/fidodido/archive/2005/08/05/9376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>搬家咯</title><link>http://www.blogjava.net/fidodido/archive/2005/08/04/9317.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Thu, 04 Aug 2005 13:48:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/08/04/9317.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/9317.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/08/04/9317.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/9317.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/9317.html</trackback:ping><description><![CDATA[<P>由于不堪忍受CSDN.net差劲的服务，今天花了一个中午的时间把CSDN上的blog搬到Blog Java上来，初来乍到，请大家捧个场<IMG height=20 src="http://www.blogjava.net/Emoticons/QQ/45.gif" width=20 border=0></P><img src ="http://www.blogjava.net/fidodido/aggbug/9317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-08-04 21:48 <a href="http://www.blogjava.net/fidodido/archive/2005/08/04/9317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IDEA</title><link>http://www.blogjava.net/fidodido/archive/2005/08/04/9196.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Thu, 04 Aug 2005 05:11:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/08/04/9196.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/9196.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/08/04/9196.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/9196.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/9196.html</trackback:ping><description><![CDATA[<P>今天在TSS上看到IntelliJ的<A href="http://www.jetbrains.com/idea/index.html"><FONT color=#4563b9>IDEA 5.0</FONT></A>终于release了，于是马上当了一个，还申请了一个30天的评估号。要知道IDEA可是个人程序员非常钟爱的IDE，界面很漂亮，使用Alloy的Look and Feel，而且功能也相当强大，个人认为在中国这片没有license概念的土地上可以和JBuilder抗衡。但是上网站一看价格，竟然要$499！看来自己花钱买license是不可能的了。于是又找出Java反编译利器DJ，打算破解IDEA。 
<P></P>
<P>由于有了alloy的破解经验，这一次很快找到了关键代码，稍做修改后，评估版30天的限制被我破掉了，以后可以在一个“舒适”的IDE上开发了<IMG src="http://spaces.msn.com/rte/emoticons/smile_shades.gif"></P><img src ="http://www.blogjava.net/fidodido/aggbug/9196.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-08-04 13:11 <a href="http://www.blogjava.net/fidodido/archive/2005/08/04/9196.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Alloy</title><link>http://www.blogjava.net/fidodido/archive/2005/08/04/9195.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Thu, 04 Aug 2005 05:09:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/08/04/9195.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/9195.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/08/04/9195.html#Feedback</comments><slash:comments>26</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/9195.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/9195.html</trackback:ping><description><![CDATA[<P>
<TABLE class="fixedTable blogpost" cellSpacing=0 width="100%" border=0>
<TBODY>
<TR>
<TD id=msgcns!1pQR9YCOilXJCP9-P-lS-BlQ!217>
<P>Alloy look and feel（<A href="http://www.incors.com/lookandfeel/index.php"><FONT color=#4563b9>http://www.incors.com/lookandfeel/index.php</FONT></A>）是一个非常漂亮的Java的look and feel，但是它是收费的，免费的只能使用30天。经过一个晚上和一个白天的努力，我终于成功破解了alloy<IMG height=19 src="http://spaces.msn.com/mmm2005-04-13_18.20/RTE/emoticons/smile_shades.gif" width=19>（2005－5－10），心里那叫一个高兴啊，以后再做ui可以有很漂亮的界面了。等两天有空作一个算号器。</P></TD></TR>
<TR>
<TD></TD></TR></TBODY></TABLE></P><img src ="http://www.blogjava.net/fidodido/aggbug/9195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-08-04 13:09 <a href="http://www.blogjava.net/fidodido/archive/2005/08/04/9195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>class文件中的秘密</title><link>http://www.blogjava.net/fidodido/archive/2005/08/04/9184.html</link><dc:creator>^ Mustang ^</dc:creator><author>^ Mustang ^</author><pubDate>Thu, 04 Aug 2005 04:50:00 GMT</pubDate><guid>http://www.blogjava.net/fidodido/archive/2005/08/04/9184.html</guid><wfw:comment>http://www.blogjava.net/fidodido/comments/9184.html</wfw:comment><comments>http://www.blogjava.net/fidodido/archive/2005/08/04/9184.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/fidodido/comments/commentRss/9184.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fidodido/services/trackbacks/9184.html</trackback:ping><description><![CDATA[<P>你知道class文件以16进制方式查看头4个字节是什么数据吗？“CAFEBABE”。没错，Cafe Baby。不信？用UltraEdit打开任何一个class文件自己看看吧</P><img src ="http://www.blogjava.net/fidodido/aggbug/9184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fidodido/" target="_blank">^ Mustang ^</a> 2005-08-04 12:50 <a href="http://www.blogjava.net/fidodido/archive/2005/08/04/9184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>