<?xml version="1.0" encoding="gb2312"?>

<!-- RSS generated by oioj.net on 4/16/2004 ; 感谢LeXRus提供 RSS 2.0 文档; 此文件可自由使用，但请保留此行信息 --> 
<!-- Source download URL: http://blogger.org.cn/blog/rss2.asp       -->
<rss version="2.0">

<channel>
<title>xwill的博客</title>
<link>http://blogger.org.cn/blog/blog.asp?name=xwill</link>
<description>xwill的博客</description>
<copyright>blogger.org.cn</copyright>
<generator>W3CHINA Blog</generator>
<webMaster>webmaster@blogger.org.cn</webMaster>
<item>
<title><![CDATA[webwork+spring的action配置]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=20944</link>
<author>xwill</author>
<pubDate>2006/12/21 14:52:14</pubDate>
<description><![CDATA[注意：在spring的application配置文件中，必须指定singleton为false，否则在发生错误时，action会一直保留错误，不会重新执行action]]></description>
</item><item>
<title><![CDATA[spring typemismatch]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=20920</link>
<author>xwill</author>
<pubDate>2006/12/20 11:15:57</pubDate>
<description><![CDATA[<P>在开发中，遇到两次这个问题。第一次是因为我在spring application里定义的接口和在类里使用的接口不一样。</P>
<P>第二次是因为jboss在启动时自己有mail包，而在我的应用里有javamail包。在用jndi查找时，查找到容器里的mail服务，但在加载应用中的mail类时却加载的应用中的javamail包，所以导致类的type不匹配</P>]]></description>
</item><item>
<title><![CDATA[java.io.IOException: HTTPS hostname wrong: should be <localhost>]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=20021</link>
<author>xwill</author>
<pubDate>2006/11/14 10:43:13</pubDate>
<description><![CDATA[<PRE>System.setProperty(<FONT color=red>"java.protocol.handler.pkgs"</FONT>,<FONT color=red>"javax.net.ssl"</FONT>);</PRE><PRE>注释掉它！</PRE><PRE>The com.sun package is for JSSE 1.0.x and JDK 1.3. Subsequent to JDK 1.4 the classes required are built into the JDK/JRE and this property setting is not required.</PRE>]]></description>
</item><item>
<title><![CDATA[Jboss下启动时抱JMS   classNotFound]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=19382</link>
<author>xwill</author>
<pubDate>2006/10/25 10:29:21</pubDate>
<description><![CDATA[<P>在ecplise中加入manta.jar包</P>]]></description>
</item><item>
<title><![CDATA[拼接字符串]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=17769</link>
<author>xwill</author>
<pubDate>2006/8/23 18:10:08</pubDate>
<description><![CDATA[<P>一个字段类型为Char,则可以这样拼接：username = username || 'test'</P>
<P>&nbsp; 一个字段类型为Number,则可以这样拼接：point = point + 100;</P>]]></description>
</item><item>
<title><![CDATA[查询列数加大]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=17715</link>
<author>xwill</author>
<pubDate>2006/8/21 12:26:14</pubDate>
<description><![CDATA[SQL&gt; set linesize xxxx;]]></description>
</item><item>
<title><![CDATA[MyEclipse 5.0 正式版来了，keygen也来了]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=17365</link>
<author>xwill</author>
<pubDate>2006/8/9 9:31:19</pubDate>
<description><![CDATA[
<P>Eclipse 3.2强悍的插件组合套装<A href="http://www.myeclipseide.com/">MyEclipse</A> 5.0 正式版已经发布了。从网上搜了一下，真得就找到了可以用的Keygen。放在自己的Blog中，以备使用吧。其实4.1版的keygen还是可以使用的。<A href="http://www.blogjava.net/Files/ardorleo/myeclipse5.0_crack.rar">keygen</A></P>]]></description>
</item><item>
<title><![CDATA[java.lang.OutOfMemoryError: Java heap space]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=16919</link>
<author>xwill</author>
<pubDate>2006/7/25 16:55:17</pubDate>
<description><![CDATA[<P>这个错一直没找出原因，重启系统之后就可以恢复正常。估计是程序的问题。</P>
<P>谁解决此问题了，别忘了告诉我一声啊</P>]]></description>
</item><item>
<title><![CDATA[eclipse无法找到jdk]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=16748</link>
<author>xwill</author>
<pubDate>2006/7/19 15:21:50</pubDate>
<description><![CDATA[<P>提示： request jdk1.4 ,avaliable jdk1.3</P>
<P>&nbsp; 但已安装了jdk1.4，并且环境变量中也配置了JAVA_HOME，查找原因是因为我刚重装了oracle，环境变量中的path变量被oracle的设置改变。</P>
<P>&nbsp; 解决办法：在path中添加JAVA_HOME</P>]]></description>
</item><item>
<title><![CDATA[豆瓣的招聘]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=16623</link>
<author>xwill</author>
<pubDate>2006/7/14 14:36:44</pubDate>
<description><![CDATA[
<P>豆瓣在寻找另外一名技术角色的团队伙伴。专长在Web应用程序的开发。</P>
<P>针对眼下这个位置, 有下面经验的人更加理想:</P>
<P>1. 有Web应用实现的专长和经验，参与过面对个人的网站构架设计。有高速增长的网站运作经验者优先。<BR>2. 熟悉Python/Ruby/PHP/Perl/Javascipt/C/Java中的三种或以上。Python和Ruby优先。<BR>3. 熟悉数据库设计，有基本的DBA能力。有Mysql经验者优先。</P>
<P>下面是豆瓣技术团队的一般性描述。抱歉重复一下前一篇启示的内容。原则是这样：我们倾向于组建一个小的精英技术团队。</P>
<P>1. 你是天才程序员, 而且以此为乐。你有多个大型项目的独立设计经历，但仍然乐此不疲地写代码。如果你不能确定自己是否天生的程序员，或者认为你的下一个理想工作是高级开发经理或者不用写code的高级架构师，豆瓣暂时对你不合适。:)</P>
<P>2. 你有能力直接跟踪和学习最新的软件技术。如果你没有在open source项目的英文邮件列表里和开发者直接沟通, 提供bug report或者贡献patch的经历，豆瓣暂时对你不合适。:)</P>
<P>3. 你需要具有自我管理能力、创新情结和创业心态。</P>
<P>4. 你以前和同事或伙伴的沟通和合作关系愉快多于郁闷。</P>
<P>豆瓣可以提供：</P>
<P>1. 真正位于创新前沿的创业经历。比如，你在豆瓣的工作可能对数个行业的发展产生实质性的影响。<BR>2. 平等，独立的小团队工作伙伴关系和宽松、灵活的工作环境。比如，你可以在家或者远程工作。<BR>3. 有竞争力的待遇和潜在的长期收益机会。比如，每位全职团队成员都会拥有一部分豆瓣的股权。</P>
<P>有兴趣或者问题请email至 team(a)douban.com。你可以用任何方式介绍自己，比如，附上过去引以为豪的一个创造。</P>]]></description>
</item><item>
<title><![CDATA[Linux 任务控制的几个技巧]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=16591</link>
<author>xwill</author>
<pubDate>2006/7/13 11:42:39</pubDate>
<description><![CDATA[<BR>Linux/Unix 区别于微软平台最大的优点就是真正的多用户，多任务。因此在任务管理上也有别具特色的管理思想。<BR>我们知道，在 Windows 上面，我们要么让一个程序作为服务在后台一直运行，要么停止这个服务。而不能让程序在前台后台之间切换。而 Linux 提供了 fg 和 bg 命令，让你轻松调度正在运行的任务。<BR><BR>假设你发现前台运行的一个程序需要很长的时间，但是需要干其他的事情，你就可以用 Ctrl-Z ，终止这个程序，然后可以看到系统提示：<BR>[1]+ Stopped /root/bin/rsync.sh<BR>然后我们可以把程序调度到后台执行：（bg 后面的数字为作业号）<BR>#bg 1<BR>[1]+ /root/bin/rsync.sh &amp;<BR>用 jobs 命令查看正在运行的任务：<BR>#jobs<BR>[1]+ Running /root/bin/rsync.sh &amp;<BR>如果想把它调回到前台运行，可以用<BR>#fg 1<BR>/root/bin/rsync.sh<BR>这样，你在控制台上就只能等待这个任务完成了。]]></description>
</item><item>
<title><![CDATA[Oracle网址大全]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=16492</link>
<author>xwill</author>
<pubDate>2006/7/11 13:12:20</pubDate>
<description><![CDATA[<STRONG>国内ORACLE相关站点 <BR></STRONG>名称 地址 介绍 <BR>Oracle中国公司 http://www.oracle.com/cn 提供最新的产品及服务介绍。 <BR>中国Oracle用户组 http://www.cnoug.org/&nbsp;&nbsp;<BR>ORACLE爱好者之家 http://www.oraclefan.net/ Jonson Huo <BR>免费ORACLE入门 http://fengyu.china.com/ 余枫 <BR>Oracle杂货店 http://www.hzsdb.com.cn/oracle/index.htm&nbsp;&nbsp;<BR>ORACLE深度历险 http://oracle9idba.nease.net/index1.htm&nbsp;&nbsp;<BR>彩虹湾 http://www.irisbay.com/ 提供oracle的相关知识，同时也提供dba、OCP证书等的论坛。 <BR>Oracle小组 http://oraclegroup.yeah.net/ smiling电子小组―Oracle小组 <BR>oracle技术站 http://oradb.jianwangzhan.com/cgi-bin/index.dll?index13?webid=jianwangzhan&amp;userid=49339&nbsp;&nbsp;<BR>Oracle9iAS Documentation Library, Release 2 (9.0.3) http://download-west.oracle.com/docs/cd/A97688_06/index.htm&nbsp;&nbsp;<BR>Oracle9i Database Concepts http://otn.oracle.com/docs/products/oracle9i/doc_library/release2/server.920/a96524/toc.htm&nbsp;&nbsp;<BR><BR><B>ORACLE讨论区</B> <BR>名称 地址 介绍 <BR>ITPUB论坛 http://www.itpub.net/&nbsp;&nbsp;<BR>CSDN数据库开发 Oracle&nbsp;&nbsp;http://expert.csdn.net/expert/forum.asp?url=/Expert/ForumList.asp?roomid=1801&amp;typenum=1&amp;xmlsrc=&amp;whichpage=1&nbsp;&nbsp; <BR>Matrix的Oracle论坛：http://www.matrix.org.cn/topic.shtml?forumId=36<BR>ChinaUnix.net的Oracle论坛 http://chinaunix.net/forum/viewforum.php?f=19&nbsp;&nbsp;<BR>Oracle Developer 6i 开发者论坛 http://61.144.28.248:8080/d6i/bbs_armok01/bbs_list.jsp&nbsp;&nbsp;<BR>网易Oracle论坛（北京） http://fe5.bj.163.com/cgi/docidx?guest=1&amp;b=Oracle 最新论坛 <BR>中国LINUX论坛—Oracle for linux 专版 http://www.linuxforum.net/forum/postlist.php?Cat=&amp;Board=oracle 中国LINUX论坛—Oracle for linux 专版 <BR>广东早安Oracle论坛 http://www.strongsun.gzidc.com/&nbsp;&nbsp;<BR>LinuxAid 技术支持论坛—数据库应用 http://www.linuxaid.com.cn/forum/boardlist.jsp?m=0&amp;i=20 LinuxAid 技术支持论坛—数据库应用 <BR>中国LINUX论坛—数据库 http://www.linuxforum.net/forum/postlist.php?Cat=&amp;Board=db 中国LINUX论坛—数据库 <BR>企业管理论坛—Oracle http://www.9053.net/formu/flist.asp?cat_ID=21&nbsp;&nbsp;<BR>ORACLE 系统专用论坛-中国ERP专家论坛 http://www.erper.com/bbs/forum.asp?Forum_ID=3&nbsp;&nbsp;<BR>腾讯社区：数据库 http://bbs.tencent.com/cgi-bin/bbs/bbs_show_title?groupid=102:10055&amp;tbegnum=0&amp;club=3&amp;st=0&amp;sc=&amp;sort=0&amp;8884 腾讯社区：数据库 <BR>甲骨文 —oracle.ok100.net http://oracle.ok100.net/showBBS.php?BBS_id=oracle ... ... <BR>编程艺苑→数据库 http://www3.ccw.com.cn/club/bbs/list.asp?boardid=10&amp;v=bbs ... ... <BR>西陆家园Oracle讨论区 http://oracleocp.xilubbs.com/&nbsp;&nbsp;<BR>LodeSoft 软件自由论坛 http://softart.lodesoft.com/form/thread.php3?bid=9961273 ... ... <BR>圣伟思Oracle技术支持论坛 http://www.whservice.com/whservice/bbs/index.asp&nbsp;&nbsp;<BR>smiling电子小组—Oracle http://www.smiling.com.cn/group/posts/index_bbs.ecgi?group_id=11046 smiling电子小组—Oracle <BR>google搜索结果 http://www.google.com/search?hl=zh-CN&amp;inlang=zh-CN&amp;ie=GB2312&amp;q=oracle&amp;btnG=Google%CB%D1%CB%F7&amp;lr=lang_zh-CN ... ... <BR>coolunix搜索结果 http://www.coolunix.com/search.cgi?keyword=oracle ... ... <BR>Oracle爱好者之家论坛 http://www.oraclefan.net/ubbs547/Ultimate.cgi?action=intro&amp;BypassCookie=true Oracle爱好者之家论坛 <BR>中国Oracle用户老论坛 http://www.soufun.com/include/visiter/bbs/listpost.asp ... ... <BR><BR>--------------------------------------------------------------------------------<BR><BR>Oracle 資料庫問題討論區 (Oracle) http://bbs.kimo.com.tw/cgi-bin/ListFrame.cgi?board=Oracle 在台湾，奇摩 <BR>資料庫疑難雜症來這裡 (database) http://bbs.kimo.com.tw/cgi-bin/ListFrame.cgi?board=database 在台湾，奇摩 <BR>Oracle SQL &amp; Developer 2000 討論區 http://cgi.pchome.com.tw/cgi-bin/myforum/myforum?id=012000030312463768662 在台湾，PC Home Online网路家庭 <BR>Oracle資料庫討論區 http://cgi.pchome.com.tw/cgi-bin/myforum/myforum?id=011999121000100616617 在台湾，PC Home Online网路家庭 <BR>Oracle資料庫討論區 http://cgi.todo.com.tw/cgi-bin/myforum/myforum?id=011999121000100616617 在台湾 <BR><BR><BR><B>港台站点 </B><BR>名称 地址 介绍 <BR>Oracle台湾公司 http://www.oracle.com.tw/ 在台湾 <BR>Oracle DB技術論壇 http://www.oracledb.com.tw/ 在台湾 <BR>Oracle精诚*甲骨文中文站 http://oracle.sysware.com.tw/ 在台湾 <BR><BR><B>外国ORACLE站点 </B><BR>名称 地址 介绍 <BR>Oracle官方站点 http://www.oracle.com/ Oracle的大本营 <BR>otn.oracle.com http://otn.oracle.com/&nbsp;&nbsp;<BR>metalink.oracle.com http://metalink.oracle.com/&nbsp;&nbsp;<BR>Ask Tom Home http://asktom.oracle.com/ asktom <BR>Oracle Documentation http://www.oradoc.com/index.html Oracle Documentation <BR>orafaq http://www.orafaq.org/faq2.htm 非常不错的Oracle论坛，分类很细。 <BR>Oracle FAQ http://www.bf.rmit.edu.au/~orafaq Oracle数据库常见问题解答。 <BR>Oracle Faq, Scripts, Articles and Resources DBAsupport.com http://www.dbasupport.com/ 介绍 <BR>delante Ltd - Oracle (Database Administration) DBA 's a speciality http://www.think-forward.com/&nbsp;&nbsp;<BR>OCP online test http://networkessentials.com/certified/ocp/index.htm OCP online test <BR>ixora http://www.ixora.com.au/ advanced performance tuning <BR>The Pipelines -- Information portal for Oracle, DB2, SQL Server. http://www.revealnet.com/&nbsp;&nbsp;<BR>Osborne http://www.osborne.com/ Find all the right computer books and learning tools at Osborne McGraw-Hill <BR>DBA-village http://www.dba-village.com/ DBA-village <BR>OraPerf.com http://www.oraperf.com/&nbsp;&nbsp;<BR>JL Computer Consultancy http://www.jlcomp.demon.co.uk/ An expert view on the Oracle (tm) database engine <BR>Oracle Server on Linux Installation http://jordan.fortwayne.com/oracle/ 介绍 <BR>orafans http://www.orafans.com/ 介绍 <BR>Oracle Magazine http://www.oramag.com/ 一份关于Oracle的月刊。在它的站点上你可以看到一些有深度的文章，也可以看到一些技巧和代码。 <BR>Oracle Professional Home http://www.oracleprofessionalnewsletter.com/ 介绍 <BR>oracle-home http://www.oracle-home.com/ The home of Oracle Database information. Books, reviews, Free Oracle Software Downloads and resources on Oracle Database development <BR>oreview http://www.oreview.com/ 介绍 <BR>Oracle Technology Professionals http://www.oranet.com/ Oracle Technology Professionals <BR>oraworld http://www.oraworld.com/ 介绍 <BR>oracle-users http://www.oracle-users.com/ 介绍 <BR>oracleguru http://www.oracleguru.com/ 介绍 <BR>Oraclenotes.com http://www.oraclenotes.com/ A community for the aspiring Oracle Certified Professional。 <BR>Cinema SQL http://users.neca.com/ltruett/sql.html SQL Reference and Example Site * featuring * Cinema SQL。 <BR><BR><B>ORACLE软件下载站点 </B><BR>名称 地址 介绍 <BR>Oracle公司 http://technet.oracle.com/ 介绍 <BR>wormwang 新丝(思)路 http://freesoft.online.sh.cn/ 这有很多自由软件 <BR>西安交通大学思源FTP服务器 ftp://ftp.xjtu.edu.cn/soft/DataBase/ 介绍 <BR>ftp://oracle-ftp.oracle.com/ ftp://oracle-ftp.oracle.com/ 介绍 <BR>ftp://166.111.168.13/ ftp://166.111.168.13/ 介绍 <BR><BR><BR><B>ORACLE第三方工具站点 </B><BR>名称 地址 介绍 <BR>Self Test Software http://www.selftestsoftware.com/ 介绍 <BR>Quest Sodtware http://www.quest.com/ 介绍 <BR>www.cramsession.com http://www.cramsession.com/ 介绍 <BR><BR><BR><B>其他 </B><BR>名称 地址 介绍 <BR>广东早安计算机系统有限公司 http://www.strongsun.com/ ORACLE 华南区总代理 <BR>晓通数据库 http://www.xiaotong-db.com.cn/ 晓通数据库的工作重点主要放在数据库技术、面向对象的开发技术、以及应用系统的设计技术的研究和应用上。 <BR>北京华创 http://www.huachuang.com.cn/index.html 介绍 <BR>华迪计算机有限公司 http://www.huadi.com.cn/ 信息化应用的系统集成商和服务商，ORACLE的双全牌代理。 <BR>佳都国际Oracle认证培训 http://www.pci.com.cn/pci-oracle.htm 介绍 <BR>超越认证资讯中心 http://www.transcendinfo.com/ 介绍 <BR>宏贝思 http://www.macro-base.com/ 介绍 <BR>常通多维 http://www.ctdw.com.cn/ 介绍 <BR>北京宇思联成软件技术公司 http://www.youthsoft.com.cn/ 介绍 <BR>计算机世界网 http://www.ccw.com.cn/ 包含：《计算机世界》、《网络世界》、《微电脑世界》、《IT经理世界》、《家用电脑世界》、《聚焦华东》 <BR>数据备份专家 http://icesoft.yeah.net/&nbsp;&nbsp;<BR>齐物轩*OCP认证资料网 http://ocp21.myrice.com/&nbsp;&nbsp;<BR><BR><BR><B>大专院校BBS </B><BR>名称 BBS地址 数据库讨论版地址 <BR>北京大学未名站 http://bbs.pku.edu.cn/ http://bbs.pku.edu.cn/cgi-bin/bbstop?board=Database <BR>清华水木清华 http://a http://a <BR>复旦大学日月光华站 http://bbs.fudan.edu.cn/ http://bbs.fudan.edu.cn/cgi-bin/bbs/bbsdoc?board=Database <BR>电子科技大学一网情深 http://bbs.uestc.edu.cn/ http://bbs.uestc.edu.cn/cgi-bin//bbsdoc?board=Database <BR>上海交通大学饮水思源站 http://bbs.sjtu.edu.cn/ http://bbs.sjtu.edu.cn/cgi-bin/bbsdoc?board=database <BR>西安交通大学冰马佣站 http://bbs.xanet.edu.cn/ http://bbs.xanet.edu.cn/bbsdoc?board=database <BR>哈工大紫丁香 http://bbs.hit.edu.cn/ http://bbs.hit.edu.cn/cgi-bin/bbs/bbsdoc?Database <BR>华南理工大学木棉站 http://bbs.cnkapok.com/ http://bbs.cnkapok.com/cgi-bin/bbsdoc?NOracle <BR>浙江大学西子浣纱城 http://bbs.zju.edu.cn/ http://bbs.zju.edu.cn/cgi-bin/bbsdoc?board=DataBase]]></description>
</item><item>
<title><![CDATA[linux tar命令]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=16316</link>
<author>xwill</author>
<pubDate>2006/7/6 9:53:18</pubDate>
<description><![CDATA[tar命令<BR>tar可以为文件和目录创建档案。利用tar，用户可以为某一特定文件创建档案（备份文件），也可以在档案中改变文件，或者向档案中加入新的文件。tar最初被用来在磁带上创建档案，现在，用户可以在任何设备上创建档案，如软盘。利用tar命令，可以把一大堆的文件和目录全部打包成一个文件，这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。<BR>语法：tar [主选项+辅选项] 文件或者目录<BR>使用该命令时，主选项是必须要有的，它告诉tar要做什么事情，辅选项是辅助使用的，可以选用。<BR>主选项：<BR>c 创建新的档案文件。如果用户想备份一个目录或是一些文件，就要选择这个选项。<BR>r 把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件，又发现还有一个目录或是一些文件忘记备份了，这时可以使用该选项，将忘记的目录或文件追加到备份文件中。<BR>t 列出档案文件的内容，查看已经备份了哪些文件。<BR>u 更新文件。就是说，用新增的文件取代原备份文件，如果在备份文件中找不到要更新的文件，则把它追加到备份文件的最后。<BR>x 从档案文件中释放文件。<BR>辅助选项：<BR>b 该选项是为磁带机设定的。其后跟一数字，用来说明区块的大小，系统预设值为20（20*512 bytes）。<BR>f 使用档案文件或设备，这个选项通常是必选的。<BR>k 保存已经存在的文件。例如我们把某个文件还原，在还原的过程中，遇到相同的文件，不会进行覆盖。<BR>m 在还原文件时，把所有文件的修改时间设定为现在。<BR>M 创建多卷的档案文件，以便在几个磁盘中存放。<BR>v 详细报告tar处理的文件信息。如无此选项，tar不报告文件信息。<BR>w 每一步都要求确认。<BR>z 用gzip来压缩/解压缩文件，加上该选项后可以将档案文件进行压缩，但还原时也一定要使用该选项进行解压缩。 
<P>&nbsp;</P>
<P><BR>Linux下的压缩文件剖析</P>
<P>对于刚刚接触Linux的人来说，一定会给Linux下一大堆各式各样的文件名给搞晕。别个不说，单单就压缩文件为例，我们知道在Windows下最常见的压缩文件就只有两种，一是,zip，另一个是.rap。可是Linux就不同了，它有.gz、.tar.gz、tgz、bz2、.Z、.tar等众多的压缩文件名，此外windows下的.zip和.rar也可以在Linux下使用，不过在Linux使用.zip和.rar的人就太少了。本文就来对这些常见的压缩文件进行一番小结，希望你下次遇到这些文件时不至于被搞晕:)</P>
<P>　　在具体总结各类压缩文件之前呢，首先要 弄清两个概念：打包和压缩。打包是指将一大堆文件或目录什么的变成一个总的文件，压缩则是将一个大的文件通过一些压缩算法变成一个小文件。为什么要区分这两个概念呢？其实这源于Linux中的很多压缩程序只能针对一个文件进行压缩，这样当你想要压缩一大堆文件时，你就得先借助另它的工具将这一大堆文件先打成一个包，然后再就原来的压缩程序进行压缩。<BR>　　Linux下最常用的打包程序就是tar了，使用tar程序打出来的包我们常称为tar包，tar包文件的命令通常都是以.tar结尾的。生成tar包后，就可以用其它的程序来进行压缩了，所以首先就来讲讲tar命令的基本用法：<BR>　　tar命令的选项有很多(用man tar可以查看到)，但常用的就那么几个选项，下面来举例说明一下：<BR>　　# tar -cf all.tar *.jpg<BR>　　这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包，-f指定包的文件名。<BR>　　# tar -rf all.tar *.gif<BR>　　这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。<BR>&nbsp;&nbsp;&nbsp; # tar -uf all.tar logo.gif<BR>　　这条命令是更新原来tar包all.tar中logo.gif文件，-u是表示更新文件的意思。 </P>
<P>　　# tar -tf all.tar<BR>　　这条命令是列出all.tar包中所有文件，-t是列出文件的意思<BR>　　# tar -xf all.tar<BR>　　这条命令是解出all.tar包中所有文件，-t是解开的意思<BR>　　以上就是tar的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件，tar提供了一种特殊的功能。这就是tar可以在打包或解包的同时调用其它的压缩程序，比如调用gzip、bzip2等。<BR>　　1) tar调用gzip<BR>　　gzip是GNU组织开发的一个压缩程序，.gz结尾的文件就是gzip压缩的结果。与gzip相对的解压程序是gunzip。tar中使用-z这个参数来调用gzip。下面来举例说明一下：<BR>　　# tar -czf all.tar.gz *.jpg<BR>　　这条命令是将所有.jpg的文件打成一个tar包，并且将其用gzip压缩，生成一个gzip压缩过的包，包名为all.tar.gz<BR>　　# tar -xzf all.tar.gz<BR>　　这条命令是将上面产生的包解开。<BR>　　2) tar调用bzip2<BR>　　bzip2是一个压缩能力更强的压缩程序，.bz2结尾的文件就是bzip2压缩的结果。与bzip2相对的解压程序是bunzip2。tar中使用-j这个参数来调用gzip。下面来举例说明一下：<BR>　　# tar -cjf all.tar.bz2 *.jpg<BR>　　这条命令是将所有.jpg的文件打成一个tar包，并且将其用bzip2压缩，生成一个bzip2压缩过的包，包名为all.tar.bz2<BR>　　# tar -xjf all.tar.bz2<BR>　　这条命令是将上面产生的包解开。<BR>&nbsp;&nbsp;&nbsp; 3)tar调用compress </P>
<P>　　compress也是一个压缩程序，但是好象使用compress的人不如gzip和bzip2的人多。.Z结尾的文件就是bzip2压缩的结果。与compress相对的解压程序是uncompress。tar中使用-Z这个参数来调用gzip。下面来举例说明一下：<BR>　　# tar -cZf all.tar.Z *.jpg<BR>　　这条命令是将所有.jpg的文件打成一个tar包，并且将其用compress压缩，生成一个uncompress压缩过的包，包名为all.tar.Z<BR>　　# tar -xZf all.tar.Z<BR>　　这条命令是将上面产生的包解开<BR>　　有了上面的知识，你应该可以解开多种压缩文件了，下面对于tar系列的压缩文件作一个小结：<BR>　　1)对于.tar结尾的文件<BR>　　tar -xf all.tar<BR>　　2)对于.gz结尾的文件<BR>　　gzip -d all.gz<BR>　　gunzip all.gz<BR>　　3)对于.tgz或.tar.gz结尾的文件<BR>　　tar -xzf all.tar.gz<BR>　　tar -xzf all.tgz<BR>　　4)对于.bz2结尾的文件<BR>　　bzip2 -d all.bz2<BR>　　bunzip2 all.bz2<BR>　　5)对于tar.bz2结尾的文件<BR>　　tar -xjf all.tar.bz2<BR>　　6)对于.Z结尾的文件<BR>　　uncompress all.Z<BR>　　7)对于.tar.Z结尾的文件<BR>　　tar -xZf all.tar.z<BR>　　另外对于Window下的常见压缩文件.zip和.rar，Linux也有相应的方法来解压它们：<BR>　　1)对于.zip<BR>　　linux下提供了zip和unzip程序，zip是压缩程序，unzip是解压程序。它们的参数选项很多，这里只做简单介绍，依旧举例说明一下其用法：<BR>　　# zip all.zip *.jpg<BR>　　这条命令是将所有.jpg的文件压缩成一个zip包</P>
<P>&nbsp;&nbsp;&nbsp; # unzip all.zip<BR>　　这条命令是将all.zip中的所有文件解压出来 </P>
<P>　　2)对于.rar<BR>　　要在linux下处理.rar文件，需要安装RAR for Linux，可以从网上下载，但要记住，RAR for Linux<BR>不是免费的；然后安装：<BR>　　# tar -xzpvf rarlinux-3.2.0.tar.gz<BR>　　# cd rar<BR>　　# make<BR>　　这样就安装好了，安装后就有了rar和unrar这两个程序，rar是压缩程序，unrar是解压程序。它们的参数选项很多，这里只做简单介绍，依旧举例说明一下其用法：<BR>　　# rar a all *.jpg<BR>　　这条命令是将所有.jpg的文件压缩成一个rar包，名为all.rar，该程序会将.rar 扩展名将自动附加到包名后。<BR>　　# unrar e all.rar<BR>　　这条命令是将all.rar中的所有文件解压出来<BR>　　到此为至，我们已经介绍过linux下的tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、zip、unzip、rar、unrar等程式，你应该已经能够使用它们对.tar、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、.Z、.tar.Z、.zip、.rar这10种压缩文件进行解压了，以后应该不需要为下载了一个软件而不知道如何在Linux下解开而烦恼了。而且以上方法对于Unix也基本有效。<BR>　　本文介绍了linux下的压缩程式tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、zip、unzip、rar、unrar等程式，以及如何使用它们对.tar、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、.Z、.tar.Z、.zip、.rar这10种压缩文件进行操作。tar命令<BR>tar可以为文件和目录创建档案。利用tar，用户可以为某一特定文件创建档案（备份文件），也可以在档案中改变文件，或者向档案中加入新的文件。tar最初被用来在磁带上创建档案，现在，用户可以在任何设备上创建档案，如软盘。利用tar命令，可以把一大堆的文件和目录全部打包成一个文件，这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。<BR>语法：tar [主选项+辅选项] 文件或者目录<BR>使用该命令时，主选项是必须要有的，它告诉tar要做什么事情，辅选项是辅助使用的，可以选用。<BR>主选项：<BR>c 创建新的档案文件。如果用户想备份一个目录或是一些文件，就要选择这个选项。<BR>r 把要存档的文件追加到档案文件的未尾。例如用户已经作好备份文件，又发现还有一个目录或是一些文件忘记备份了，这时可以使用该选项，将忘记的目录或文件追加到备份文件中。<BR>t 列出档案文件的内容，查看已经备份了哪些文件。<BR>u 更新文件。就是说，用新增的文件取代原备份文件，如果在备份文件中找不到要更新的文件，则把它追加到备份文件的最后。<BR>x 从档案文件中释放文件。<BR>辅助选项：<BR>b 该选项是为磁带机设定的。其后跟一数字，用来说明区块的大小，系统预设值为20（20*512 bytes）。<BR>f 使用档案文件或设备，这个选项通常是必选的。<BR>k 保存已经存在的文件。例如我们把某个文件还原，在还原的过程中，遇到相同的文件，不会进行覆盖。<BR>m 在还原文件时，把所有文件的修改时间设定为现在。<BR>M 创建多卷的档案文件，以便在几个磁盘中存放。<BR>v 详细报告tar处理的文件信息。如无此选项，tar不报告文件信息。<BR>w 每一步都要求确认。<BR>z 用gzip来压缩/解压缩文件，加上该选项后可以将档案文件进行压缩，但还原时也一定要使用该选项进行解压缩。 </P>
<P>&nbsp;</P>
<P><BR>Linux下的压缩文件剖析</P>
<P>对于刚刚接触Linux的人来说，一定会给Linux下一大堆各式各样的文件名给搞晕。别个不说，单单就压缩文件为例，我们知道在Windows下最常见的压缩文件就只有两种，一是,zip，另一个是.rap。可是Linux就不同了，它有.gz、.tar.gz、tgz、bz2、.Z、.tar等众多的压缩文件名，此外windows下的.zip和.rar也可以在Linux下使用，不过在Linux使用.zip和.rar的人就太少了。本文就来对这些常见的压缩文件进行一番小结，希望你下次遇到这些文件时不至于被搞晕:)</P>
<P>　　在具体总结各类压缩文件之前呢，首先要 弄清两个概念：打包和压缩。打包是指将一大堆文件或目录什么的变成一个总的文件，压缩则是将一个大的文件通过一些压缩算法变成一个小文件。为什么要区分这两个概念呢？其实这源于Linux中的很多压缩程序只能针对一个文件进行压缩，这样当你想要压缩一大堆文件时，你就得先借助另它的工具将这一大堆文件先打成一个包，然后再就原来的压缩程序进行压缩。<BR>　　Linux下最常用的打包程序就是tar了，使用tar程序打出来的包我们常称为tar包，tar包文件的命令通常都是以.tar结尾的。生成tar包后，就可以用其它的程序来进行压缩了，所以首先就来讲讲tar命令的基本用法：<BR>　　tar命令的选项有很多(用man tar可以查看到)，但常用的就那么几个选项，下面来举例说明一下：<BR>　　# tar -cf all.tar *.jpg<BR>　　这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包，-f指定包的文件名。<BR>　　# tar -rf all.tar *.gif<BR>　　这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。<BR>&nbsp;&nbsp;&nbsp; # tar -uf all.tar logo.gif<BR>　　这条命令是更新原来tar包all.tar中logo.gif文件，-u是表示更新文件的意思。 </P>
<P>　　# tar -tf all.tar<BR>　　这条命令是列出all.tar包中所有文件，-t是列出文件的意思<BR>　　# tar -xf all.tar<BR>　　这条命令是解出all.tar包中所有文件，-t是解开的意思<BR>　　以上就是tar的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件，tar提供了一种特殊的功能。这就是tar可以在打包或解包的同时调用其它的压缩程序，比如调用gzip、bzip2等。<BR>　　1) tar调用gzip<BR>　　gzip是GNU组织开发的一个压缩程序，.gz结尾的文件就是gzip压缩的结果。与gzip相对的解压程序是gunzip。tar中使用-z这个参数来调用gzip。下面来举例说明一下：<BR>　　# tar -czf all.tar.gz *.jpg<BR>　　这条命令是将所有.jpg的文件打成一个tar包，并且将其用gzip压缩，生成一个gzip压缩过的包，包名为all.tar.gz<BR>　　# tar -xzf all.tar.gz<BR>　　这条命令是将上面产生的包解开。<BR>　　2) tar调用bzip2<BR>　　bzip2是一个压缩能力更强的压缩程序，.bz2结尾的文件就是bzip2压缩的结果。与bzip2相对的解压程序是bunzip2。tar中使用-j这个参数来调用gzip。下面来举例说明一下：<BR>　　# tar -cjf all.tar.bz2 *.jpg<BR>　　这条命令是将所有.jpg的文件打成一个tar包，并且将其用bzip2压缩，生成一个bzip2压缩过的包，包名为all.tar.bz2<BR>　　# tar -xjf all.tar.bz2<BR>　　这条命令是将上面产生的包解开。<BR>&nbsp;&nbsp;&nbsp; 3)tar调用compress </P>
<P>　　compress也是一个压缩程序，但是好象使用compress的人不如gzip和bzip2的人多。.Z结尾的文件就是bzip2压缩的结果。与compress相对的解压程序是uncompress。tar中使用-Z这个参数来调用gzip。下面来举例说明一下：<BR>　　# tar -cZf all.tar.Z *.jpg<BR>　　这条命令是将所有.jpg的文件打成一个tar包，并且将其用compress压缩，生成一个uncompress压缩过的包，包名为all.tar.Z<BR>　　# tar -xZf all.tar.Z<BR>　　这条命令是将上面产生的包解开<BR>　　有了上面的知识，你应该可以解开多种压缩文件了，下面对于tar系列的压缩文件作一个小结：<BR>　　1)对于.tar结尾的文件<BR>　　tar -xf all.tar<BR>　　2)对于.gz结尾的文件<BR>　　gzip -d all.gz<BR>　　gunzip all.gz<BR>　　3)对于.tgz或.tar.gz结尾的文件<BR>　　tar -xzf all.tar.gz<BR>　　tar -xzf all.tgz<BR>　　4)对于.bz2结尾的文件<BR>　　bzip2 -d all.bz2<BR>　　bunzip2 all.bz2<BR>　　5)对于tar.bz2结尾的文件<BR>　　tar -xjf all.tar.bz2<BR>　　6)对于.Z结尾的文件<BR>　　uncompress all.Z<BR>　　7)对于.tar.Z结尾的文件<BR>　　tar -xZf all.tar.z<BR>　　另外对于Window下的常见压缩文件.zip和.rar，Linux也有相应的方法来解压它们：<BR>　　1)对于.zip<BR>　　linux下提供了zip和unzip程序，zip是压缩程序，unzip是解压程序。它们的参数选项很多，这里只做简单介绍，依旧举例说明一下其用法：<BR>　　# zip all.zip *.jpg<BR>　　这条命令是将所有.jpg的文件压缩成一个zip包</P>
<P>&nbsp;&nbsp;&nbsp; # unzip all.zip<BR>　　这条命令是将all.zip中的所有文件解压出来 </P>
<P>　　2)对于.rar<BR>　　要在linux下处理.rar文件，需要安装RAR for Linux，可以从网上下载，但要记住，RAR for Linux<BR>不是免费的；然后安装：<BR>　　# tar -xzpvf rarlinux-3.2.0.tar.gz<BR>　　# cd rar<BR>　　# make<BR>　　这样就安装好了，安装后就有了rar和unrar这两个程序，rar是压缩程序，unrar是解压程序。它们的参数选项很多，这里只做简单介绍，依旧举例说明一下其用法：<BR>　　# rar a all *.jpg<BR>　　这条命令是将所有.jpg的文件压缩成一个rar包，名为all.rar，该程序会将.rar 扩展名将自动附加到包名后。<BR>　　# unrar e all.rar<BR>　　这条命令是将all.rar中的所有文件解压出来<BR>　　到此为至，我们已经介绍过linux下的tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、zip、unzip、rar、unrar等程式，你应该已经能够使用它们对.tar、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、.Z、.tar.Z、.zip、.rar这10种压缩文件进行解压了，以后应该不需要为下载了一个软件而不知道如何在Linux下解开而烦恼了。而且以上方法对于Unix也基本有效。<BR>　　本文介绍了linux下的压缩程式tar、gzip、gunzip、bzip2、bunzip2、compress、uncompress、zip、unzip、rar、unrar等程式，以及如何使用它们对.tar、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、.Z、.tar.Z、.zip、.rar这10种压缩文件进行操作。</P>]]></description>
</item><item>
<title><![CDATA[你还在用if else吗？]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=16312</link>
<author>xwill</author>
<pubDate>2006/7/6 9:32:45</pubDate>
<description><![CDATA[面向过程设计和面向对象设计的主要区别是：是否在业务逻辑层使用冗长的if else判断。如果你还在大量使用if else，当然，界面表现层除外，即使你使用Java/C#这样完全面向对象的语言，也只能说明你的思维停留在传统的面向过程语言上。
<P><STRONG>传统思维习惯分析</STRONG></P>
<P>　　为什么会业务逻辑层使用if else，其实使用者的目的也是为了重用，但是这是面向过程编程的重用，程序员只看到代码重用，因为他看到if else几种情况下大部分代码都是重复的，只有个别不同，因此使用if else可以避免重复代码，并且认为这是模板Template模式。</P>
<P>　　他范的错误是：程序员只从代码运行顺序这个方向来看待它的代码，这种思维类似水管或串行电路，水沿着水管流动（代码运行次序），当遇到几个分管（子管），就分到这几个分管子在流动，这里就相当于碰到代码的if else处了。</P>
<P>　　而使用OO，则首先打破这个代码由上向下顺序等同于运行时的先后循序这个规律，代码结构不由执行循序决定，由什么决定呢？由OO设计；设计模式会取代这些if else，但是最后总是由一个Service等总类按照运行顺序组装这些OO模块，只有一处，这处可包含事务，一般就是Service，EJB中是Session bean。</P>
<P>　　一旦需求变化，我们更多的可能是Service中各个OO模块，甚至是只改动Service中的OO模块执行顺序就能符合需求。</P>
<P>　　这里我们也看到OO分离的思路，将以前过程语言的一个Main函数彻底分解，将运行顺序与代码其他逻辑分离开来，而不是象面向过程那样混乱在一起。所以有人感慨，OO也是要顺序的，这是肯定的，关键是运行顺序要单独分离出来。</P>
<P>　　是否有if else可以看出你有没有将运行顺序分离到家。</P>
<P><STRONG>设计模式的切入口</STRONG></P>
<P>　　经常有人反映，设计模式是不错，但是我很难用到，其实如果你使用if else来写代码时（除显示控制以外），就是在写业务逻辑，只不过使用简单的判断语句来作为现实情况的替代者。</P>
<P>　　 还是以大家熟悉的论坛帖子为例子，如ForumMessage是一个模型，但是实际中帖子分两种性质：主题贴（第一个根贴）和回帖（回以前帖子的帖子），这里有一个朴素的解决方案：<BR>建立一个ForumMessage，然后在ForumMessage加入isTopic这样判断语句，注意，你这里一个简单属性的判断引入，可能导致你的程序其他地方到处存在if else 的判断。</P>
<P>　　如果我们改用另外一种分析实现思路，以对象化概念看待，实际中有主题贴和回帖，就是两种对象，但是这两种对象大部分是一致的，因此，我将ForumMessage设为表达主题贴；然后创建一个继承ForumMessage的子类ForumMessageReply作为回帖，这样，我在程序地方，如Service中，我已经确定这个Model是回帖了，我就直接下溯为ForumMessageReply即可，这个有点类似向Collection放入对象和取出时的强制类型转换。通过这个手段我消灭了以后程序中if else的判断语句出现可能。</P>
<P>　　从这里体现了，如果分析方向错误，也会导致误用模式。</P>
<P>　　讨论设计模式举例，不能没有业务上下文场景的案例，否则无法决定是否该用模式，下面举两个对比的例子：</P>
<P>　　第一.<A href="http://www.jdon.com/jive/thread.jsp?forum=91&amp;thread=24681" target=_blank> 这个帖子</A>中举例的第一个代码案例是没有上下文的，文中只说明有一段代码：</P>
<TABLE cellSpacing=1 cellPadding=1 width="100%" bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD>main() { 
<P>if（case A）{ </P>
<P>//do with strategy A </P>
<P>}else(case B){</P>
<P>//do with strategy B </P>
<P>}else(case C){ </P>
<P>//do with strategy C </P>
<P>}</P>
<P>} </P></TD>
<TD>&nbsp;</TD></TR></TBODY></TABLE>
<P>　　这段代码只是纯粹的代码，没有业务功能，所以，在这种情况下，我们就很难确定使用什么模式，就是一定用策略模式等，也逃不过还是使用if else的命运，设计模式不是魔法，不能将一段毫无意义的代码变得简单了，只能将其体现的业务功能更加容易可拓展了。</P>
<P>　　第二.在<A href="http://www.jdon.com/jive/thread.jsp?forum=91&amp;thread=24333&amp;message=14484871#14484871" target=_blank>这个帖子</A>中，作者举了一个PacketParser业务案例，这段代码是体现业务功能的，是一个数据包的分析，作者也比较了各种模式使用的不同，所以我们还是使用动态代理模式或Command模式来消灭那些可能存在的if else</P>
<P>　　由以上两个案例表明：业务逻辑是我们使用设计模式的切入点，而在分解业务逻辑时，我们习惯则可能使用if else来实现，当你有这种企图或者已经实现代码了，那么就应该考虑是否需要重构Refactoring了。<BR></P>
<P><STRONG>if else替代者</STRONG></P>
<P>　　那么实战中，哪些设计模式可以替代if else呢？其实GoF设计模式都可以用来替代if else，我们分别描述如下：</P>
<LI>状态模式　<BR>　　当数据对象存在各种可能性的状态，而且这种状态将会影响到不同业务结果时，那么我们就应该考虑是否使用状态模式，当然，使用状态模式之前，你必须首先有内存状态这个概念，而不是数据库概念，因为在传统的面向过程的/面向数据库的系统中，你很难发现状态的，从数据库中读取某个值，然后根据这个值进行代码运行分流，这是很多初学者常干的事情。参考文章:<A href="http://www.jdon.com/artichect/state.htm" target=_blank>状态对象：数据库的替代者</A><BR>　　使用传统语言思维的情况还有：使用一个类整数变量标识状态：<BR>
<TABLE cellSpacing=1 cellPadding=1 width="100%" bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD>
<P>&nbsp;</P>
<P>public class Order{</P>
<P>private int status;</P>
<P>//说明： </P>
<P>//status=1 表示订货但为查看 ；</P>
<P>//status=2 表示已经查看未处理；</P>
<P>//status=3 表示已经处理未付款</P>
<P>//status=4 表示已经付款未发货</P>
<P>//status=5 表示已经发货</P>
<P>} </P></TD></TR></TBODY></TABLE><BR>　　上述类设计，无疑是将类作为传统语言的函数来使用，这样导致程序代码中存在大量的if else。<BR><BR>
<LI>策略模式　<BR>　　当你面临几种算法或者公式选择时，可以考虑策略模式，传统过程语言情况是：从数据库中读取算法数值，数值1表示策略1，例如保存到数据库；数值为2表示策略2，例如保存到XMl文件中。这里使用if else作为策略选择的开关。 <BR><BR>
<LI>command模式　<BR>　　传统过程的思维情况是：如果客户端发出代号是1或"A"，那么我调用A.java这个对象来处理；如果代号是2或"B"，我就调用B.java来处理，通过if else来判断客户端发送过来的代码，然后按事先约定的对应表，调用相应的类来处理。<BR><BR>
<LI>MVC模式　<BR>　　MVC模式的传统语言误用和Command模式类似，在一个Action类中，使用if else进行前后台调度，如果客户端传送什么命令；我就调用后台什么结果；如果后台处理什么结构，再决定推什么页面，不过，现在我们使用Struts/JSF这样MVC模式的框架实现者就不必范这种低级错误。<BR><BR>
<LI>职责链模式　<BR>　　职责链模式和Command模式是可选的，如果你实在不知道客户端会发出什么代号；也没有一个事先定义好的对照表，那么你只能编写一个个类去碰运气一样打开这个包看一下就可以。与Command是不同在<A href="http://www.jdon.com/AOPdesign/decorator.htm" target=_blank>AOP vs Decorator</A>一文中有分析。<BR><BR>
<LI>代理或动态代理模式　<BR>　　代理对象可以是符合某种条件的代表者，比如，权限检验，传统面向过程思维是：当一个用户登陆后，访问某资源时，使用if else进行判断，只有某种条件符合时，才能允许访问，这样权限判断和业务数据逻辑混乱在一起，使用代理模式可以清晰分离，如果嫌不太好，使用动态代理，或者下面AOP等方式。<BR><BR>
<LI>AOP或Decorator模式<BR>　　<BR>　　其实使用filter过滤器也可以替代我们业务中的if else，过滤器起到一种过滤和筛选作用，将符合本过滤器条件的对象拦截下来做某件事情，这就是一个过滤器的功能，多个过滤器组合在一起实际就是if else的组合。<BR>　　所以，如果你实在想不出什么办法，可以使用过滤器，将过滤器看成防火墙就比较好理解，当客户端有一个请求时，经过不同性质的防火墙，这个防火墙是拦截端口的；那个防火墙是安全检查拦截等等。过滤器也如同红蓝白各种光滤镜；红色滤镜只能将通过光线中的红色拦截了；蓝色滤镜将光线中的蓝色拦截下来，这实际上是对光线使用if else进行分解。<BR><BR><IMG height=182 src="http://www.jdon.com/artichect/images/ifelse.gif" width=285><BR>　　如图，通过一个个条件过滤器我们立体地实现了对信号的分离，如果你使用if else，说明你是将图中的条件1/2/3/4合并在一起，在同一个地方实现条件判断。<BR>　　需要深入了解过滤器的实现细节和微小区别，请参考文章：<A href="http://www.jdon.com/AOPdesign/decorator.htm" target=_blank>AOP vs Decorator</A><BR>
<P><STRONG>OO设计的总结</STRONG>　　 </P>
<P>　　还有一种伪模式，虽然使用了状态等模式，但是在模式内部实质还是使用if else或switch进行状态切换或重要条件判断，那么无疑说明还需要进一步努力。更重要的是，不能以模式自居，而且出书示人。</P>
<P>　　真正掌握面向对象这些思想是一件困难的事情，目前有各种属于揪着自己头发向上拔的解说，都是误人子弟的，所以我觉得初学者读Thinking in Java（Java编程思想）是没有用，它试图从语言层次来讲OO编程思想，非常失败，作为语言参考书可以，但是作为Java体现的OO思想的学习资料，就错了。</P>
<P>　　OO编程思想是一种方法论，方法论如果没有应用比较，是无法体会这个方法论的特点的，禅是古代一个方法论，悟禅是靠挑水砍柴这些应用才能体会。</P>
<P>　　那么OO思想靠什么应用能够体会到了？是GoF设计模式，GoF设计模式是等于软件人员的挑水砍柴等基本活，所以，如果一个程序员连基本活都不会，他何以自居OO程序员？从事OO专业设计编程这个工作，如果不掌握设计模式基本功，就象一个做和尚的人不愿意挑水砍柴，他何以立足这个行业？早就被师傅赶下山。</P>
<P>　　最后总结：将if else用在小地方还可以，如简单的数值判断；但是如果按照你的传统习惯思维，在实现业务功能时也使用if else，那么说明你的思维可能需要重塑，你的编程经验越丰富，传统过程思维模式就容易根深蒂固，想靠自己改变很困难；建议接受<A href="http://www.jdon.com/trainning/j2eearchitect.htm" target=_blank>专业头脑风暴培训</A>。</P>
<P>　　用一句话总结：如果你做了不少系统，很久没有使用if else了，那么说明你可能真正进入OO设计的境地了。（这是本人自己发明的实战性的衡量考核标准）。</P></LI>]]></description>
</item><item>
<title><![CDATA[Struts常见错误及原因分析]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=16311</link>
<author>xwill</author>
<pubDate>2006/7/6 9:31:37</pubDate>
<description><![CDATA[1 异常 javax.servlet.jsp.JspException: Cannot retrieve mapping for action /Login （/Login是你的action名字） <BR>可能原因:action没有再struts-config.xml 中定义，或没有找到匹配的action，例如在JSP文件中使用 处理:如果出现上述异常，请查看struts-config.xml中的定义部分，有时可能是打错俗址蛘呤悄承┎环瞎嬖颍梢允褂胹truts console工具来检查。 <BR><BR>2 异常 org.apache.jasper.JasperException: Cannot retrieve definition for form bean null <BR><BR>可能原因:&nbsp;&nbsp;这个异常是因为Struts根据struts-config.xml中的mapping没有找到action期望的form bean。大部分的情况可能是因为在form-bean中设置的name属性和action中设置的name属性不匹配所致。换句话说，action和form都应该各自有一个name属性，并且要精确匹配，包括大小写。这个错误当没有name属性和action关联时也会发生，如果没有在action中指定name属性，那么就没有name属性和action相关联。当然当action制作某些控制时，譬如根据参数值跳转到相应的jsp页面，而不是处理表单数据，这是就不用name属性，这也是action的使用方法之一。<BR><BR>3 异常 No action instance for path /xxxx could be created <BR><BR>可能原因 <BR>特别提示：因为有很多中情况会导致这个错误的发生，所以推荐大家调高你的web服务器的日志/调试级别，这样可以从更多的信息中看到潜在的、在试图创建action类时发生的错误，这个action类你已经在struts-config.xml中设置了关联（即添加了标签）。 <BR><BR>在struts-config.xml中通过action标签的class属性指定的action类不能被找到有很多种原因，例如： <BR><BR>定位编译后的.class文件失败。Failure to place compiled .class file for the action in the classpath (在web开发中，class的的位置在r WEB-INF/classes，所以你的action class必须要在这个目录下。例如你的action类位于WEB-INF/classes/action/Login.class,那么在struts-config.xml中设置action的属性type时就是action.Login). <BR>拼写错误，这个也时有发生，并且不易找到，特别注意第一个字母的大小写和包的名称。 <BR><BR>在struts-config.xml中指定的action类没有继承自Stuts的Action类，或者你自定义的Action类没有继承自Struts提供的Action类。 <BR><BR>你的action类必须继承自Struts提供的Action类。 <BR><BR>你的classpath的问题。例如web server没有发现你的资源文件，资源文件必须在WEB-INF/classes/目录下。 <BR><BR>4 异常 javax.servlet.jsp.JspException: No getter method for property username of bean org.apache.struts.taglib.html.BEAN <BR><BR>可能原因 <BR>没有位form bean中的某个变量定义getter 方法 <BR><BR>这个错误主要发生在表单提交的FormBean中，用struts标记时，在FormBean中必须有一个getUsername()方法。注意字母“U”。 <BR>5 Exception&nbsp;&nbsp;javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection <BR><BR>可能原因 <BR>不是标识Struts actionServlet的标记就是映射.do扩展名的标记或者两者都没有在web.xml中声明。 <BR><BR>在struts-config.xml中的打字或者拼写错误也可导致这个异常的发生。例如缺少一个标记的关闭符号/&gt;。最好使用struts console工具检查一下。 <BR><BR>另外，load-on-startup必须在web.xml中声明，这要么是一个空标记，要么指定一个数值，这个数值用来表servlet运行的优先级，数值越大优先级越低。 <BR><BR>还有一个和使用load-on-startup有关的是使用Struts预编译JSP文件时也可能导致这个异常。 <BR><BR>6 Exception <BR>javax.servlet.jsp.JspException: Cannot find bean org.apache.struts.taglib.html.BEAN in any scope <BR>Probable Causes <BR>试图在Struts的form标记外使用form的子元素。这常常发生在你在后面使用Struts的html标记。<BR><BR>另外要注意可能你不经意使用的无主体的标记，如，这样web 服务器解析时就当作一个无主体的标记，随后使用的所有标记都被认为是在这个标记之外的，如又使用了<BR><BR>还有就是在使用taglib引入HTML标记库时，你使用的prefix的值不是html。]]></description>
</item><item>
<title><![CDATA[maximum open cursors exceeded]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=16221</link>
<author>xwill</author>
<pubDate>2006/7/3 16:34:54</pubDate>
<description><![CDATA[<P>游标打开太多。</P>
<P>出现这种异常的原因很可能是因为把preparestatement，createstatement这些语句放在了循环语句中。</P>
<P>通过一下语句可查看游标的信息：</P>
<P>SQL&gt; show parameter open_;&nbsp;&nbsp;&nbsp; 显示数据库系统设置的游标最大个数</P>
<P>SQL&gt; select count(*) from v$open_cursor;&nbsp;&nbsp; 显示当前数据库创建的游标个数</P>
<P>&nbsp;</P>]]></description>
</item><item>
<title><![CDATA[数据导出导入]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=15994</link>
<author>xwill</author>
<pubDate>2006/6/29 12:51:13</pubDate>
<description><![CDATA[<P>导出：</P>
<P>&nbsp;&nbsp; 在oracle用户下执行脚本，脚本内容为：</P>
<P>一般格式，exp 用户名/密码&nbsp;&nbsp; file=/data/exp20060429.dat（保存文件） log=/data/exp.log（日志文件） buffer=3200000</P>
<P>1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中<BR>&nbsp;&nbsp; exp <A href="mailto:system/manager@TEST"><FONT color=#0022aa>system/manager@TEST</FONT></A> file=d:\daochu.dmp <FONT color=#f70968>full</FONT>=y<BR>&nbsp;2 将数据库中system用户与sys用户的表导出<BR>&nbsp;&nbsp; exp <A href="mailto:system/manager@TEST"><FONT color=#0022aa>system/manager@TEST</FONT></A> file=d:\daochu.dmp <FONT color=#f70968>owner</FONT>=(system,sys)<BR>&nbsp;3 将数据库中的表table1 、table2导出<BR>&nbsp;&nbsp; exp <A href="mailto:system/manager@TEST"><FONT color=#0022aa>system/manager@TEST</FONT></A> file=d:\daochu.dmp <FONT color=#f70968>tables</FONT>=(table1,table2)&nbsp;<BR>&nbsp;4 将数据库中的表table1中的字段filed1以"00"打头的数据导出<BR>&nbsp;&nbsp; exp <A href="mailto:system/manager@TEST"><FONT color=#0022aa>system/manager@TEST</FONT></A> file=d:\daochu.dmp tables=(table1)&nbsp;query=\" where filed1 like '00%'\"</P>
<P>&nbsp;</P>
<P>导入：</P>
<P>1. 先在数据库中创建用户A<BR>2. 一般格式：imp A/A的密码 buffer=65536 file=exppay.dat ignore=y commit=y fromuser=B(导出数据时使用的用户） touser=A log=imppay.log</P>
<P>注：1 将D:\daochu.dmp 中的数据导入 TEST数据库中。<BR>&nbsp;&nbsp; imp <A href="mailto:system/manager@TEST"><FONT color=#0022aa>system/manager@TEST</FONT></A>&nbsp; file=d:\daochu.dmp<BR>&nbsp;&nbsp; 上面可能有点问题，因为有的表已经存在，然后它就报错，对该表就不进行导入。<BR>&nbsp;&nbsp; 在后面加上 ignore=y 就可以了。<BR>&nbsp;2 将d:\daochu.dmp中的表table1 导入<BR>&nbsp;imp <A href="mailto:system/manager@TEST"><FONT color=#0022aa>system/manager@TEST</FONT></A>&nbsp; file=d:\daochu.dmp&nbsp; tables=(table1)&nbsp;<BR></P>]]></description>
</item><item>
<title><![CDATA[Eclipse中文显示问题]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=15959</link>
<author>xwill</author>
<pubDate>2006/6/28 15:16:35</pubDate>
<description><![CDATA[<P>用记事本打开时jsp页面显示中文正常，但在eclipse中打开则显示乱码，解决方法：</P>
<P>&nbsp; 在eclipse中用“text editor”打开jsp，选择菜单栏中“edit－&gt;set Encoding”添加GBK。并在页面中加入&lt;%@ page contentType="text/html; charset=GBK" %&gt;。再用别的editor打开就可以了。</P>]]></description>
</item><item>
<title><![CDATA[Can't connect to X11 window server using '132.110.47.23:0.0' as the value of the DISPLAY variable.]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=15875</link>
<author>xwill</author>
<pubDate>2006/6/26 16:09:54</pubDate>
<description><![CDATA[
<P>在Soloris中安装oracle时启动安装时报此错。</P>
<P>解决办法，重启以oracle用户登录，然后执行./runInstaller</P>]]></description>
</item><item>
<title><![CDATA[scp命令格式]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=xwill&amp;id=15869</link>
<author>xwill</author>
<pubDate>2006/6/26 14:03:06</pubDate>
<description><![CDATA[
<P><FONT color=#ff0000 size=5>scp locathost_path/filename <A href="mailto:username@remotehost:remotehost_path/filename">username@remotehost:remotehost_path/filename</A></FONT></P>
<P><FONT color=#ff0000 size=5></FONT>&nbsp;</P>
<P><FONT size=4>scp impdata.sh </FONT><A href="mailto:root@192.168.1.13:/data"><FONT size=4>root@192.168.1.13:/data</FONT></A> </P>]]></description>
</item>
</channel>
</rss>