﻿<?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-yuping322</title><link>http://www.blogjava.net/yuping322/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 09:41:22 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 09:41:22 GMT</pubDate><ttl>60</ttl><item><title>[导入]信息采集系统的技术实现</title><link>http://www.blogjava.net/yuping322/archive/2007/08/24/139615.html</link><dc:creator>fengzhi</dc:creator><author>fengzhi</author><pubDate>Fri, 24 Aug 2007 12:26:00 GMT</pubDate><guid>http://www.blogjava.net/yuping322/archive/2007/08/24/139615.html</guid><wfw:comment>http://www.blogjava.net/yuping322/comments/139615.html</wfw:comment><comments>http://www.blogjava.net/yuping322/archive/2007/08/24/139615.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuping322/comments/commentRss/139615.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuping322/services/trackbacks/139615.html</trackback:ping><description><![CDATA[
<br/>



网站：<a href="http://www.JavaEye.com">JavaEye</a>  作者：<a href="http://yuping.JavaEye.com/">yuping322</a> 
发表时间: 2007-08-24 20:26  此文章来自于 <a href="http://www.JavaEye.com">http://www.JavaEye.com</a> 

 

   
<br/>声明：本文系JavaEye网站原创文章，未经JavaEye网站或者作者本人书面许可，任何其他网站严禁擅自发表本文，否则必将追究法律责任！<br/>


原文链接：<a href="
    
   
    http://yuping.javaeye.com/blog/116248
    
" style="color:red;">
    
   
    http://yuping.javaeye.com/blog/116248
    
</a><br/><br/>
 
    
    <table width="100%"><tr><td><p><p class="entryTitle">信息采集系统的技术实现<br />
<br /></p>
<br /><p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 信息采集系统指的是按标准格式采集指定网络信息，同搜索引擎的区别在于其采集的目的性更强，采集源范围也比较小。这里简单介绍一下信息采集系统实现上的几个关键问题:</p>
<br /><p><strong>1) 采集网页数据</strong><br />
<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; VC,Java,VB的网络通讯功能都足够实现信息采集，VC中的Get/Post方式可采集网页信息，也可以直接用socket方式采集，但一般用前一种模式，另外为了提高采集效率都采用多线程技术，在网上的一些Spider程序都是多线程的,可以借鉴.</p>
<br /><p><strong>2) 如何按关键字来信息</strong><br />
<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 信息采集的一大特点是按多个关键字将信息拆分出来，例如供求信息中的商机标题、联系人、电话、Email、内容等，实现时需要事先定义好这些关键字，然后在网页中搜索，将夹在两个关键字当中的信息采集出来，另外还要注意，网页中的许多关键字是包含空格的，空格数量也不能确定，例如&quot;邮&nbsp;&nbsp; 件&quot;,这就要求在查找关键字时要把关键字按单个汉字拆开来匹配，遇到中间的空格要跳过去.这一步实现了，信息就会变的非常有规则，也就可以导入本地库了.<br />
<br /></p>
<br /><p><strong>3) 网页中的链结获取算法<br />
<br /></strong>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 了解HTML的应该清楚，网页中的链结都是通过的标签定义的，但也会分很多情况，例如:&nbsp; <strong>&lt; a href = &quot;...&quot;&gt;</strong>&nbsp; 这是常见的链结格式，但要注意采集出来的链结可能是完整的http://...，也可能是相对路径,要分别处理<strong>；&nbsp; &lt; a href = ''&gt;</strong> 用单引号分隔的，所以用算法获取链结的时候要根据双引号和单引号两种标记来分隔；<strong>&lt; a href = .. onclick = javascript:view('..','')&gt;</strong> 通过javascript的函数处理链结，算法上就麻烦了许多。<br />
<br /></p>
<br /><p><strong>4) 无效数据的过滤</strong><br />
<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 即使通过关键字的方式摒弃了许多广告信息，但在关键字信息中也会有不少无效数据，包括一些信息开头的空格</p>
<br /><p><strong>5) 特定数据的获取算法</strong><br />
<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Email,电话等数据符合一定的规范，一般可以用一些算法提取出来，也可以用正则表达式技术来获取，在网络上有不少此类算法.在信息采集中，Email和电话等关键信息是比较分散的，需要用提取算法把这些信息提取出来放在正确的位置.这是非常有必要的，因为信息采集系统往往会有邮件群发的功能.</p>
<br /><p>信息采集的整个流程可总结如下:</p>
<br /><p>&nbsp;a) 首先，获取网页的完整信息<br />
<br />&nbsp;b) 用算法获取网页中的正文信息，即抛弃HTML的标签文本<br />
<br />&nbsp;c) 去除多余的空行<br />
<br />&nbsp;d) 按定义好的关键字将信息分隔开<br />
<br />&nbsp;e) 对信息进行无效数据过滤<br />
<br />&nbsp;f) 信息入本地库<br />
<br />&nbsp;g) 获取网页中的链结，对该链结从a)步骤开始重复,但注意网页中的许多链结是广告或无效的，因此要事先定义好一些链结关键字，只有包含关键字的链结才处理</p></p></td></tr></table>
    <br/>
    
    
        <br/><br/>
    <span style="color:red;"><a href="
    
   
    http://yuping.javaeye.com/blog/116248
    
" style="color:red;">《 信息采集系统的技术实现 》 的评论也很精彩，欢迎您也添加评论。查看详细 >></a></span>


    <br/><br/>
    
    
     
    <br/><br/><br/><br/>

         
                           
            <span style="color:#E28822;">JavaEye推荐</span><br/>
            <a href="http://www.javaeye.com/topic/113150" target="_blank" >上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师</a><br/>
            <a href="http://ad.cn.doubleclick.net/clk;119879986;18083637;h?http://www.ibm.com/developerworks/cn/downloads/?S_TACT=105AGX52&S_CMP=dta-jeye" target="_blank" >免费下载IBM社区版软件--它基于开放的标准，支持广泛的开发类型，让您的开发高效自主！</a><br/>
            <a href="http://www.soa2007.org/soainaction/?referer=javaeye&utm_campaign=soainaction&utm_source=javaeye&utm_medium=hplks" target="_blank" >京沪穗蓉四地免费注册，SOA技术高手汇聚交锋.</a><br/>
            
            
            <a href="http://www.JavaEye.com/topic/101933" >上海：优秀公司德比：高薪诚聘 资深Java工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92740" > 广州：优易公司：诚聘Java工程师，开发经理  </a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92797" >上海：尤恩斯国际集团：诚聘开发工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/69984" >北京：优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA</a><br/>
                           
        
    
    <br/><br/>
    <br>文章来源:<a href='

   
    http://yuping.javaeye.com/blog/116248
    

'>

   
    http://yuping.javaeye.com/blog/116248
    

</a><img src ="http://www.blogjava.net/yuping322/aggbug/139615.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuping322/" target="_blank">fengzhi</a> 2007-08-24 20:26 <a href="http://www.blogjava.net/yuping322/archive/2007/08/24/139615.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]行业搜索、垂直搜索</title><link>http://www.blogjava.net/yuping322/archive/2007/08/24/139616.html</link><dc:creator>fengzhi</dc:creator><author>fengzhi</author><pubDate>Fri, 24 Aug 2007 12:05:00 GMT</pubDate><guid>http://www.blogjava.net/yuping322/archive/2007/08/24/139616.html</guid><wfw:comment>http://www.blogjava.net/yuping322/comments/139616.html</wfw:comment><comments>http://www.blogjava.net/yuping322/archive/2007/08/24/139616.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuping322/comments/commentRss/139616.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuping322/services/trackbacks/139616.html</trackback:ping><description><![CDATA[
<br/>



网站：<a href="http://www.JavaEye.com">JavaEye</a>  作者：<a href="http://yuping.JavaEye.com/">yuping322</a> 
发表时间: 2007-08-24 20:05  此文章来自于 <a href="http://www.JavaEye.com">http://www.JavaEye.com</a> 

 

   
<br/>声明：本文系JavaEye网站原创文章，未经JavaEye网站或者作者本人书面许可，任何其他网站严禁擅自发表本文，否则必将追究法律责任！<br/>


原文链接：<a href="
    
   
    http://yuping.javaeye.com/blog/116244
    
" style="color:red;">
    
   
    http://yuping.javaeye.com/blog/116244
    
</a><br/><br/>
 
    
    <table width="100%"><tr><td><p><p><font size="2">行业搜索、垂直搜索引擎。</font></p>
<br /><p><font size="2">行业搜索：搜索对象针对所在的行业，采用类似传统通用搜索引擎的分词索引技术，返回关键词最匹配的结果。</font></p>
<br /><p><font size="2">垂直搜索：搜索对象针对所在的行业，采用数据采集、数据挖掘、数据整理等技术，返回经过加工处理的结果。</font></p>
<br /><p><strong><font size="2" color="#ff0000">一、综合搜索</font></strong></p>
<br /><p><font size="2">酷讯</font><font size="2" color="#0066aa">www.kooxoo.com</font><font size="2"> ：招聘、房产、汽车、火车票、机票、餐饮、交友、购物、旅游</font></p>
<br /><p><font size="2">奇虎</font><font size="2" color="#0066aa">www.qihoo.com</font><font size="2"> ：论坛、博客、新闻、招聘、房产、视频、音乐、图片、火车票、餐饮、经验？、折扣</font></p>
<br /><p><font size="2">cgogo搜个够</font><font size="2" color="#0066aa">www.cgogo.com</font><font size="2"> ：社区、招聘、票务、住房、视频、本地（地图）、博客、无线</font></p>
<br /><p><font size="2">我酷网 </font><font size="2" color="#0066aa">www.wooqoo.com</font><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （五花八门，该有都有）</font></p>
<br /><p><font size="2">开拓搜索</font><font size="2" color="#0066aa">www.kaitoo.com</font><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （五花八门，该有都有）</font></p>
<br /><p><font size="2">每步搜索 </font><font size="2" color="#0066aa">http://cnc.meibu.com/</font><font size="2"> （综合）</font></p>
<br /><p><font size="2">八百搜</font><font size="2" color="#0066aa">www.800so.com</font><font size="2"> （五花八门，该有都有，站内搜索和站外搜索并列）</font></p>
<br /><p><font size="2">酷爱 </font><font size="2" color="#0066aa">www.koooi.com</font><font size="2"> （网页 MP3 房产 餐饮 交友 搜人 资源）</font></p>
<br /><p><font size="2">soso88&nbsp;&nbsp;&nbsp;</font><font size="2" color="#0066aa">www.soso88.net</font><font size="2"> （政府采购 人才职位 房源地产 建材装饰）</font></p>
<br /><p><font size="2"></font></p>
<br /><p><font size="2" color="#ff0000"><strong>二、求职招聘： （18）</strong></font></p>
<br /><p><font size="2">职友集&nbsp;&nbsp;&nbsp;</font><font size="2" color="#0066aa">www.jobbui.com</font></p>
<br /><p><font size="2">搜职网&nbsp;&nbsp;</font><font size="2" color="#0066aa">www.globehr.com</font></p>
<br /><p><font size="2">南京搜职网&nbsp;&nbsp;</font><font size="2" color="#0066aa">www.sozhi.cn</font></p>
<br /><p><font size="2">托托搜索 </font><font size="2" color="#0066aa">www.totojob.com</font></p>
<br /><p><font size="2">1010job精英招聘 </font><font size="2" color="#0066aa">www.1010job.com</font></p>
<br /><p><font size="2">牛耳搜职网 </font><font size="2" color="#0066aa">www.newerjob.com</font></p>
<br /><p><font size="2">数字英才（职通车） </font><font size="2" color="#0066aa">www.01hr.com</font></p>
<br /><p><font size="2">深度搜索 </font><font size="2" color="#0066aa">www.deepdo.com</font></p>
<br /><p><font size="2">淘职网 </font><font size="2" color="#0066aa">www.go2work.com.cn</font></p>
<br /><p><font size="2">我搜网 </font><font size="2" color="#0066aa">www.alsox.com</font></p>
<br /><p><font size="2">校园招聘 </font><font size="2" color="#0066aa">www.zhaopinbbs.com</font></p>
<br /><p><font size="2">易聘&nbsp;&nbsp;</font><font size="2" color="#0066aa">www.yipin.cc</font></p>
<br /><p><font size="2">找工作 </font><font size="2" color="#0066aa">www.meijob.com</font></p>
<br /><p><font size="2">热职工作引擎 </font><font size="2" color="#0066aa">www.rezhi.com</font></p>
<br /><p><font size="2">职场快线 </font><font size="2" color="#0066aa">www.jobems.com</font></p>
<br /><p><font size="2">职脉搜索 </font><font size="2" color="#0066aa">www.jobmet.com</font></p>
<br /><p><font size="2">高八斗 </font><font size="2" color="#0066aa">www.gao8dou.com</font><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 区域搜索引擎联合，在各地都有独立一级域名，单一数据库。 </font></p>
<br /><p><font size="2">安徽人才总网 </font><font size="2" color="#0066aa">www.ah668.com/rc/</font><font size="2"> （安徽区域搜索）</font></p>
<br /><p><font size="2"></font></p>
<br /><p><font size="2"></font></p>
<br /><p><font size="2"></font></p>
<br /><p><strong><font size="2" color="#ff0000">三、房屋房产 （9）</font></strong></p>
<br /><p><font size="2">搜房引擎 </font><font size="2" color="#0066aa">search.soufun.com</font></p>
<br /><p><font size="2">房老大 </font><font size="2" color="#0066aa">www.fanglaoda.com</font></p>
<br /><p><font size="2">焦点房产</font><font size="2" color="#0066aa">seek.focus.cn</font><font size="2"> </font></p>
<br /><p><font size="2">家家看网 </font><font size="2" color="#0066aa">www.jjto.com</font><font size="2"> </font></p>
<br /><p><font size="2">我住网 </font><font size="2" color="#0066aa">www.wozhu.com</font></p>
<br /><p><font size="2">搜房网 </font><font size="2" color="#0066aa">www.sofang.com.cn</font></p>
<br /><p><font size="2">寻捕房 </font><font size="2" color="#0066aa">www.xpfang.com</font></p>
<br /><p><font size="2" color="#0066aa"></font></p>
<br /><p><font size="2">房网搜索 </font><font size="2" color="#0066aa">www.house163.com</font></p>
<br /><p><font size="2">百房 </font><font size="2" color="#0066aa">www.100fang.com</font></p>
<br /><p><font size="2" color="#0066aa"></font></p>
<br /><p><font size="2" color="#0066aa"></font></p>
<br /><p><strong><font size="2" color="#ff0000">四：商务商机、人文 （20）</font></strong></p>
<br /><p><font size="2">联络家&nbsp;&nbsp;</font><font size="2" color="#0066aa">http://www.linkist.com/</font></p>
<br /><p><font size="2">优库&nbsp;&nbsp;</font><font size="2" color="#0066aa">www.ucloo.com</font><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （搜人 公司 学校 ）</font></p>
<br /><p><font size="2">Anyso商业搜索引擎&nbsp;&nbsp;</font><font size="2" color="#0066aa">www.anyso.com</font></p>
<br /><p><font size="2">accoona&nbsp;&nbsp;</font><font size="2" color="#0066aa">www.accoona.cn</font><font size="2"> </font></p>
<br /><p><font size="2">国通网 </font><font size="2" color="#0066aa">www.guton.com</font></p>
<br /><p><font size="2">享者&nbsp;&nbsp;</font><font size="2" color="#0066aa">www.hengzhe.com</font></p>
<br /><p><font size="2">品搜 </font><font size="2" color="#0066aa">www.pinsou.com</font></p>
<br /><p><font size="2">品通 </font><font size="2" color="#0066aa">www.joingoo.com</font></p>
<br /><p><font size="2">搜商 </font><font size="2" color="#0066aa">www.bseek.cn</font></p>
<br /><p><font size="2">商搜 </font><font size="2" color="#0066aa">www.shangsou.com</font></p>
<br /><p><font size="2">商宝 </font><font size="2" color="#0066aa">www.b2b8.com</font></p>
<br /><p><font size="2">jow&nbsp;&nbsp;</font><font size="2" color="#0066aa">http://jqw.com/</font></p>
<br /><p><font size="2">企业门户 </font><font size="2" color="#0066aa">www.yie.cn</font></p>
<br /><p><font size="2">搜库网 </font><font size="2" color="#0066aa">www.souku.com.cn</font></p>
<br /><p><font size="2">伊索&nbsp;&nbsp;</font><font size="2" color="#0066aa">http://china.eceel.com/</font><font size="2"> </font></p>
<br /><p><font size="2">天网商搜 </font><font size="2" color="#0066aa">http://china.eceel.com/</font></p>
<br /><p><font size="2">信援 </font><font size="2" color="#0066aa">www.xinsos.com</font></p>
<br /><p><font size="2">一呼百应 </font><font size="2" color="#0066aa">www.youboy.com</font></p>
<br /><p><font size="2">易购搜索 </font><font size="2" color="#0066aa">www.ego321.com</font></p>
<br /><p><font size="2">浙搜 </font><font size="2" color="#0066aa">http://zhesou.com/</font><font size="2"> （区域性搜索）</font></p>
<br /><p><strong><font size="2" color="#ff0000">五、生活、购物消费 （17）</font></strong></p>
<br /><p><font size="2">8848（比较购物）</font><font size="2" color="#800080">http://esearch.8848.com/</font></p>
<br /><p><font size="2">丫丫比较购物 </font><font size="2" color="#0066aa">http://askyaya.com/</font></p>
<br /><p><font size="2">大拿网（比较购物） </font><font size="2" color="#0066aa">http://www.danawa.com.cn/</font></p>
<br /><p><font size="2">普加 Pojaa </font><font size="2" color="#0066aa">http://www.pojaa.com/</font></p>
<br /><p><font size="2" color="#0066aa"></font></p>
<br /><p><font size="2" color="#0066aa"></font></p>
<br /><p><font size="2">搜狗 </font><font size="2" color="#003399">http://shopping.sogou.com/</font><br />
<br /></p>
<br /><p><font size="2">购物搜索</font><font size="2" color="#0066aa">www.gobygo.com</font><font size="2"> <br />
<br />中搜</font><font size="2" color="#003399">http://shopping.zhongsou.com/</font><font size="2"> </font></p>
<br /><p><font size="2">Soaso </font><font size="2" color="#0066aa">http://www.soaso.com/</font></p>
<br /><p><font size="2">搜评网 </font><font size="2" color="#0066aa">http://www.souping.com/</font></p>
<br /><p><font size="2">无忧城市网 </font><font size="2" color="#0066aa">http://www.51city.com</font></p>
<br /><p><font size="2">亿起搜&nbsp;&nbsp;</font><font size="2" color="#0066aa">http://www.eqiso.com/</font></p>
<br /><p><font size="2">365.com&nbsp;&nbsp;</font><font size="2" color="#0066aa">www.365.com</font><font size="2"> （生活搜索综合）</font></p>
<br /><p><font size="2">快搜测评网 </font><font size="2" color="#0066aa">www.ksou.com.cn</font><font size="2"> （IT硬件相关）</font></p>
<br /><p><font size="2">搜教网 </font><font size="2" color="#0066aa">www.soojoo.cn</font><font size="2"> （教育资源相关）</font></p>
<br /><p><font size="2">乐逊外卖搜索 </font><font size="2" color="#0066aa">www.lexun.com.cn</font><font size="2"> </font></p>
<br /><p><font size="2">友买网 </font><font size="2" color="#0066aa">www.uobuy.com</font><font size="2"> </font></p>
<br /><p><font size="2">马可波罗 </font><font size="2" color="#0066aa">www.makepolo.com/</font></p>
<br /><p><font size="2">易购搜索 </font><font size="2" color="#0066aa">www.ego321.com</font><br />
<br /></p>
<br /><p><font size="2" color="#0066aa"></font></p>
<br /><p><strong><font size="2" color="#ff0000">六、地图公交、出行 （15）</font></strong></p>
<br /><p><font size="2">公交查询 </font><font size="2" color="#0066aa">http://www.8684.cn/</font></p>
<br /><p><font size="2">瘦驴旅游搜索引擎&nbsp;&nbsp;</font><font size="2" color="#0066aa">http://www.souluu.com/</font></p>
<br /><p><font size="2">E都市 </font><font size="2" color="#0066aa">http://www.edushi.com/</font></p>
<br /><p><font size="2">Mapabc地图 </font><font size="2" color="#0066aa">http://www.mapabc.com/</font></p>
<br /><p><font size="2">图吧&nbsp;&nbsp;</font><font size="2" color="#0066aa">http://main.mapbar.com/</font></p>
<br /><p><font size="2">UUMAP </font><font size="2" color="#0066aa">http://www.uumap.com/</font></p>
<br /><p><font size="2">城市通 </font><font size="2" color="#0066aa">http://www.52tong.com/</font></p>
<br /><p><font size="2">华夏图网 </font><font size="2" color="#0066aa">http://www.map2china.com/</font></p>
<br /><p><font size="2">都市圈－三维地图 </font><font size="2" color="#0066aa">http://www.o.cn/</font></p>
<br /><p><font size="2">第1搜 </font><font size="2" color="#0066aa">http://www.d1so.com/</font></p>
<br /><p><font size="2">都市吧 </font><font size="2" color="#0066aa">http://www.city8.com/</font></p>
<br /><p><font size="2">活图网 </font><font size="2" color="#0066aa">http://www.livemap.cn/</font></p>
<br /><p><font size="2">我要地图 </font><font size="2" color="#0066aa">http://www.51ditu.com/</font></p>
<br /><p><font size="2">丁丁地图 </font><font size="2" color="#0066aa">www.ddmap.com</font></p>
<br /><p><font size="2">坐车网 </font><font size="2" color="#0066aa">http://www1.zuoche.com/</font><font size="2"> （广州区域搜索）</font></p>
<br /><p><font size="2">google、百度、搜狗、MSN虚拟地球</font><font size="2" color="#003399">http://virtualearth.msn.com/</font><font size="2"> </font><strong><br />
<br /></strong></p>
<br /><p><strong><font size="2" color="#ff0000">七、医疗健康</font></strong></p>
<br /><p><font size="2">康Q </font><font size="2" color="#0066aa">www.kangq.com</font></p>
<br /><p><font size="2">Souvv </font><font size="2" color="#0066aa">http://search.souvv.com/</font></p>
<br /><p><font size="2">医搜 </font><font size="2" color="#0066aa">http://www.yiso.cc/</font></p>
<br /><p><font size="2">放心医苑网 </font><font size="2" color="#0066aa">http://www.120so.com/</font></p>
<br /><p><font size="2">博睿&nbsp;&nbsp;</font><font size="2" color="#0066aa">http://search.chinamtcm.com</font></p>
<br /><p><strong><font size="2" color="#ff0000">八、图书搜索</font></strong></p>
<br /><p><font size="2">爱搜书网 </font><font size="2" color="#800080">http://www.isoshu.com/</font></p>
<br /><p><font size="2">读秀知识库 </font><font size="2" color="#800080">http://www.duxiu.com/</font></p>
<br /><p><font size="2"></font></p>
<br /><p><strong><font size="2" color="#ff0000">九、分类信息</font></strong></p>
<br /><p><font size="2">国通网</font><font size="2" color="#800080">http://www.guton.com</font></p>
<br /><p><font size="2"></font></p>
<br /><p><strong><font size="2" color="#ff0000">十、手机搜索引擎</font></strong></p>
<br /><p><font size="2">悠悠村&nbsp;&nbsp;</font><font size="2" color="#0066aa">http://www.uucun.com/</font></p>
<br /><p><font size="2">儒豹手机搜索 </font><font size="2" color="#0066aa">http://www.roboo.com/</font></p>
<br /><p><font size="2" color="#0066aa"></font></p>
<br /><p><font size="2" color="#0066aa"></font></p>
<br /><p><strong><font size="2" color="#ff0000">十一、软件IT、BT资源</font></strong></p>
<br /><p><font size="2">迅雷资源搜索 </font><font size="2" color="#0066aa">http://so.xunlei.com</font><font size="2"> </font></p>
<br /><p><font size="2">BT联盟搜索引擎 </font><font size="2" color="#0066aa">http://search.btchina.net/</font></p>
<br /><p><font size="2">BT全球搜索 </font><font size="2" color="#0066aa">http://bt.it.com.cn/</font></p>
<br /><p><font size="2">BT特工 </font><font size="2" color="#0066aa">http://bt.souyo.com/</font></p>
<br /><p><font size="2">飞客BT搜索 </font><font size="2" color="#0066aa">http://bt.fkee.com/</font></p>
<br /><p><font size="2">天天BT 电影 </font><font size="2" color="#0066aa">http://www.ttbt.cn/</font></p>
<br /><p><font size="2">网游搜索 </font><font size="2" color="#0066aa">www.37ss.com</font></p>
<br /><p><font size="2">FTP搜索引擎 </font><font size="2" color="#0066aa">www.tooooold.com</font></p>
<br /><p><font size="2" color="#0066aa"></font></p>
<br /><p><strong><font size="2" color="#ff0000">十二、娱乐综合、电影、音乐等</font></strong></p>
<br /><p><font size="2">搜刮&nbsp;&nbsp;</font><font size="2" color="#0066aa">http://www.sogua.com/</font></p>
<br /><p><font size="2">易搜 </font><font size="2" color="#800080">http://bt.souyo.com/</font><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （娱乐综合、软件IT、游戏、电影）</font></p>
<br /><font size="2">狗载社区 </font><font size="2" color="#800080">http://www.ppgou.com/</font><font size="2"> </font>
<br /><p><font size="2">OpenV开放视频 </font><font size="2" color="#0066aa">http://www.openv.tv/</font></p>
<br /><p><font size="2">第九频道 </font><font size="2" color="#0066aa">www.tvix.cn</font></p>
<br /><p><font size="2">动漫搜索 </font><font size="2" color="#0066aa">http://share.greedland.net/</font></p>
<br /><p><font size="2">奇客网 </font><font size="2" color="#0066aa">http://v.qirss.com/</font></p>
<br /><p><font size="2">CCTV视频搜索 </font><font size="2" color="#0066aa">http://vsearch.cctv.com/</font></p>
<br /><p><font size="2">优酷视频搜索&nbsp;&nbsp;</font><font size="2" color="#0066aa">http://www.youku.com/</font></p>
<br /><p><font size="2" color="#0066aa"></font></p>
<br /><p><strong><font size="2" color="#ff0000">十三、电视节目</font></strong></p>
<br /><p><font size="2">电视猫&nbsp;&nbsp;</font><font size="2" color="#0066aa">www.tvmao.com</font></p>
<br /><p><font size="2">e准 - 电视节目预告 </font><font size="2" color="#0066aa">www.ezhun.com</font></p>
<br /><p><font size="2">搜视网 </font><font size="2" color="#0066aa">http://www.tvsou.com/</font></p>
<br /><p><font size="2">我爱电视剧 </font><font size="2" color="#0066aa">http://www.5idsj.com/</font><font size="2"> （剧情搜索）</font></p>
<br /><p><font size="2"></font></p>
<br /><p><strong><font size="2" color="#ff0000">十四、博客、论坛搜索</font></strong></p>
<br /><p><font size="2">贴易 </font><font size="2" color="#0066aa">http://search.teein.com/</font></p>
<br /><p><font size="2">Souyo </font><font size="2" color="#0066aa">http://www.souyo.com/</font></p>
<br /><p><font size="2">博狗 </font><font size="2" color="#0066aa">http://www.blogool.com/</font></p>
<br /><p><font size="2">大旗 </font><font size="2" color="#0066aa">http://search.chinabbs.com/</font></p>
<br /><p><font size="2">博客查号台&nbsp;&nbsp;</font><font size="2" color="#0066aa">http://www.blog114.com.cn/</font></p>
<br /><p><font size="2">博搜 </font><font size="2" color="#0066aa">http://www.booso.com/</font></p>
<br /><p><font size="2">中文RSS搜索 </font><font size="2" color="#0066aa">http://www.booso.com/</font></p>
<br /><p><font size="2">名人博客 </font><font size="2" color="#0066aa">http://www.starlogs.com/</font></p>
<br /><p><font size="2">中国博客网搜索 </font><font size="2" color="#0066aa">http://search.blogcn.com/</font></p>
<br /><p><font size="2" color="#0066aa"></font></p>
<br /><p><strong><font size="2" color="#ff0000">十五、其它</font></strong></p>
<br /><p><font size="2">搜农 </font><font size="2" color="#0066aa">www.sounong.net</font><font size="2"> （来自安徽的和农业相关综合搜索引擎）</font></p>
<br /><p><font size="2">农搜 </font><font size="2" color="#0066aa">www.agrisou.com</font><font size="2"> </font></p>
<br /><p><font size="2">性搜 </font><font size="2" color="#0066aa">http://www.sinsoo.com/</font></p>
<br /><p><font size="2">中国建筑黄页 </font><font size="2" color="#0066aa">www.agoo.com.cn</font></p>
<br /><p><font size="2">搜网（图片搜索） </font><font size="2" color="#0066aa">http://home.souwang.com/</font></p>
<br /><p><font size="2">金聚网（游戏搜索） </font><font size="2" color="#0066aa">http://www.jj160.com/</font></p>
<br /><p><font size="2" color="#0066aa"></font></p>
<br /><p><font size="2" color="#0066aa"></font></p>
<br /><p><font size="2">游戏网（搜索引擎？）</font><font size="2" color="#0066aa">http://ks.pcgames.com.cn/</font></p>
<br /><p><font size="2">乐虎网（手机图片） </font><font size="2" color="#0066aa">http://www.joyhoo.com/</font></p>
<br /><p><font size="2">全国驾校搜索 </font><font size="2" color="#0066aa">www.jxedt.com</font><br />
<br /><font size="2">个性搜索&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><font size="2" color="#0066aa">www.deyeb.cn</font></p></p></td></tr></table>
    <br/>
    
    
        <br/><br/>
    <span style="color:red;"><a href="
    
   
    http://yuping.javaeye.com/blog/116244
    
" style="color:red;">《 行业搜索、垂直搜索 》 的评论也很精彩，欢迎您也添加评论。查看详细 >></a></span>


    <br/><br/>
    
    
     
    <br/><br/><br/><br/>

         
                           
            <span style="color:#E28822;">JavaEye推荐</span><br/>
            <a href="http://www.javaeye.com/topic/113150" target="_blank" >上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师</a><br/>
            <a href="http://ad.cn.doubleclick.net/clk;119879986;18083637;h?http://www.ibm.com/developerworks/cn/downloads/?S_TACT=105AGX52&S_CMP=dta-jeye" target="_blank" >免费下载IBM社区版软件--它基于开放的标准，支持广泛的开发类型，让您的开发高效自主！</a><br/>
            <a href="http://www.soa2007.org/soainaction/?referer=javaeye&utm_campaign=soainaction&utm_source=javaeye&utm_medium=hplks" target="_blank" >京沪穗蓉四地免费注册，SOA技术高手汇聚交锋.</a><br/>
            
            
            <a href="http://www.JavaEye.com/topic/101933" >上海：优秀公司德比：高薪诚聘 资深Java工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92740" > 广州：优易公司：诚聘Java工程师，开发经理  </a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92797" >上海：尤恩斯国际集团：诚聘开发工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/69984" >北京：优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA</a><br/>
                           
        
    
    <br/><br/>
    <br>文章来源:<a href='

   
    http://yuping.javaeye.com/blog/116244
    

'>

   
    http://yuping.javaeye.com/blog/116244
    

</a><img src ="http://www.blogjava.net/yuping322/aggbug/139616.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuping322/" target="_blank">fengzhi</a> 2007-08-24 20:05 <a href="http://www.blogjava.net/yuping322/archive/2007/08/24/139616.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]Web数据挖掘</title><link>http://www.blogjava.net/yuping322/archive/2007/08/24/139617.html</link><dc:creator>fengzhi</dc:creator><author>fengzhi</author><pubDate>Fri, 24 Aug 2007 11:52:00 GMT</pubDate><guid>http://www.blogjava.net/yuping322/archive/2007/08/24/139617.html</guid><wfw:comment>http://www.blogjava.net/yuping322/comments/139617.html</wfw:comment><comments>http://www.blogjava.net/yuping322/archive/2007/08/24/139617.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuping322/comments/commentRss/139617.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuping322/services/trackbacks/139617.html</trackback:ping><description><![CDATA[
<br/>



网站：<a href="http://www.JavaEye.com">JavaEye</a>  作者：<a href="http://yuping.JavaEye.com/">yuping322</a> 
发表时间: 2007-08-24 19:52  此文章来自于 <a href="http://www.JavaEye.com">http://www.JavaEye.com</a> 

 

   
<br/>声明：本文系JavaEye网站原创文章，未经JavaEye网站或者作者本人书面许可，任何其他网站严禁擅自发表本文，否则必将追究法律责任！<br/>


原文链接：<a href="
    
   
    http://yuping.javaeye.com/blog/116243
    
" style="color:red;">
    
   
    http://yuping.javaeye.com/blog/116243
    
</a><br/><br/>
 
    
    <table width="100%"><tr><td><p><p>&nbsp;&nbsp; 引言<br />
<br />数据挖掘(Data Mining，DM)是从大量数据中提取或&ldquo;挖掘&rdquo;知识，是从存放在数据库、数据仓库或其他信息库中的大量数据中挖掘有趣知识的过程。[1] 随着网络的不断发展，因特网目前已成为一个巨大的、分布广泛的和全球性的信息服务中心。从海量的网络信息中寻找有用的知识，早已成为人们的迫切需求。各种类似Google、Baidu等的搜索引擎也层出不穷，Web数据挖掘的应用在现实中不断体现。<br />
<br />Web数据挖掘建立在对大量的网络数据进行分析的基础上，采用相应的数据挖掘算法，在具体的应用模型上进行数据的提取、数据筛选、数据转换、数据挖掘和模式分析，最后做出归纳性的推理、预测客户的个性化行为以及用户习惯，从而帮助进行决策和管理，减少决策的风险。<br />
<br />Web数据挖掘涉及多个领域，除数据挖掘外，还涉及计算机网络、数据库与数据仓储、人工智能、信息检索、可视化、自然语言理解等技术。</p>
<br /><p>2&nbsp;&nbsp; Web数据挖掘面临的问题<br />
<br />Web的巨大、分布广泛和内容多样使得目前的Web挖掘面临着众多问题和挑战。首先，对有效的数据仓库和数据挖掘来说，Web上的数据过于庞大。而且，Web上的数据具有极强的动态性，不仅数量增长快而且更新十分迅速。但是面对如此大量的Web上的信息，有调查却表明：99%的Web信息对于99%的用户是无用的。这样看来，面对网络上形形色色各式各样的用户群体，许多由Web搜索引擎所检索到的资料将会被淹没。<br />
<br />另外，由于Web页面缺乏同一的结构，其结构又比任何传统文本文档都要复杂，所以要实现基于Web的数据挖掘和信息检索在目前来说是非常具有挑战性的。 </p>
<br /><p>&nbsp;</p>
<br /><p align="left">3&nbsp;&nbsp; Web数据挖掘的分类<br />
<br />Web数据挖掘是一项具有挑战性的课题。它实现对Web存取模式，Web结构和规则，以及动态的Web内容的查找。一般来说，Web数据挖掘可分为四类：Web内容挖掘、Web结构挖掘、Web使用记录挖掘和Web用户性质挖掘。其中，Web内容挖掘、Web结构挖掘和Web使用记录挖掘是Web1.0时代就已经有了的，而Web用户性质挖掘则是伴随着Web2.0的出现而出现的。<br />
<br /></p>
<br /><p>3.1 Web内容挖掘<br />
<br />Web内容挖掘主要包括文本挖掘和多媒体挖掘两类，其对象包括文本、图像、音频、视频、多媒体和其他各种类型的数据。这些数据一般由非结构化的数据(如文本) 、半结构化的数据(如HTML 文档) 和结构化的数据(如表格) 构成。对非结构化文本进行的Web挖掘，称为文本数据挖掘或文本挖掘，是Web挖掘中比较重要的技术领域。Web挖掘中另一个比较重要的技术领域是Web多媒体数据挖掘。<br />
<br />目前，关于Web内容挖掘的研究大体以Web文本内容挖掘为主。Web内容挖掘一般从资源查找和数据库两个不同的方面进行研究。<br />
<br />从资源查找的方面来看，Web内容挖掘的任务是从用户的角度出发，怎样提高信息质量和帮助用户过滤信息。主要是对非结构化文档和半结构化文档的挖掘。非结构化文档主要指Web上的自由文本，如小说、新闻等。Web上的半结构化文档挖掘指在加入了HTML、超链接等附加结构的信息上进行挖掘，其应用包括超链接文本的分类、聚类、发现文档之间的关系、提出半结构化文档中的模式和规则等。<br />
<br />从数据库的观点进行Web内容挖掘主要是试图建立Web站点的数据模型并加以集成， 以支持复杂查询，而不只是简单的基于关键词的搜索。这要通过找到Web文档的模式、建立Web知识库来实现。<br />
<br />对文本数据进行挖掘的文档分类和模型质量评价方法与传统的数据挖掘方法相类似，分类算法主要应用朴素贝叶斯(Naive Bayes Classifier)。对模型的质量评价主要有分类的正确率(Classification Accuracy)、准确率( Precision)和信息估值( Information Score)。 <font color="#ffffff"><a href="http://saas.dmresearch.net/saas.html"><font color="#ffffff">SAAS </font></a></font><br />
<br />Web多媒体数据挖掘从多媒体数据库中提取隐藏的知识、多媒体数据关联、或者是其他没有直接储存在多媒体数据库中的模式。多媒体数据挖掘包括对图像、视频和声音的挖掘。多媒体挖掘首先进行特征提取，然后再应用传统的数据挖掘方法进行进一步的信息挖掘。对网页中的多媒体数据进行特征的提取，应充分利用HTML的标签信息。[3]<br />
<br />3.2 Web结构挖掘<br />
<br />由于有用的知识不仅包含在Web页面的内容中，而且也包含在页面的结构中。所以Web结构挖掘是从站点的组织结构和页面结构中推导出知识，对Web页面间的结构进行挖掘，找出数据链的结构进行分类、聚类，从而发现页面间的关系，进而改进搜索引擎的性能。<br />
<br />Web结构挖掘的对象是Web本身的超链接，即对Web文档的结构进行挖掘。Web结构挖掘的基本思想是将Web看作一个有向图，他的顶点是Web页面，页面间的超链就是图的边。然后利用图论对Web的拓扑结构进行分析。常见的算法有HITS ( Hypertext Induced Topic Search) 、PageRank、发现虚拟社区的算法、发现相似页面的算法、发现地理位置的算法和页面分类算法。Web结构挖掘的算法一般可分为查询相关算法和查询无关算法两类。查询相关算法需要为每一个查询进行一次超链分析从而进行一次值的指派;而查询独立算法则为每个文档仅进行一次值的指派，对所有的查询都使用此值。HITS和PageRank分别是查询相关算法和查询独立算法的代表。 </p>
<br /><div class="Dhg498"><br />
<br />3.3 Web使用记录挖掘<br />
<br />Web使用记录挖掘也叫Web日志挖掘或Web访问信息挖掘。它是通过挖掘相关的Web日志记录，来发现用户访问Web页面的模式，通过分析日志记录中的规律，可以识别用户的喜好、满意度，可以发现潜在用户，增强站点的服务竞争力。<br />
<br />Web使用记录数据除了服务器的日志记录外， 还包括代理服务器日志、浏览器端日志、注册信息、用户会话信息、交易信息、Cookie中的信息、用户查询、等一切用户与站点之间可能的交互记录。<br />
<br />Web使用记录挖掘方法主要有以下两种：<br />
<br />(1) 将网络服务器的日志文件作为原始数据，应用特定的预处理方法进行处理后再进行挖掘；<br />
<br />(2) 将网络服务器的日志文件转换为图表，然后再进行进一步的数据挖掘。通常，在对原始数据进行预处理后就可以使用传统的数据挖掘方法进行挖掘。</div>
<br /><div class="Dhg498"><br />
<br />3.4 Web用户性质挖掘<br />
<br />Web用户性质挖掘是伴随着Web2.0的出现而出现的。基于RSS、Blog、SNS、Tag以及WiKi等互联网软件的广泛应用，Web2.0帮助人们从Web1．0时代各大门户网站&ldquo;填鸭&rdquo;式的信息轰炸，过渡到了&ldquo;人人对话&rdquo;，每个普通用户既是信息的获取者，也是信息的提供者。[4]面对Web2.0的诞生，Web数据挖掘技术又面临着新的挑战。<br />
<br />如果说Web使用记录挖掘是挖掘网站访问者在各大网站上留下的痕迹，那么Web用户性质挖掘则是要去Web用户的老巢探寻究竟。在Web2.0时代，网络彻底个人化了，它完全允许客户用自己的方式、喜好和个性化的定制服务创造自己的互联网，它一方面给予互联网用户最大的自由度，另一方面给予有心商家有待发掘的高含金量信息数据。通过对Web用户自建的RSS、Blog等Web2.0功能模块下客户信息的统计分析，能够帮助运营商以较低成本获得准确度较高的客户兴趣倾向、个性化需求以及新业务发展趋势等信息。有关Web2.0下的数据挖掘正在进一步的研究中。 </div>
<br /><div class="Dhg498"><a href="http://research.dmresearch.net/"><font color="#ffffff">相关研究方向 </font></a></div>
<br /><p>&nbsp;</p>
<br /><p>4&nbsp;&nbsp; 结束语<br />
<br />Web数据挖掘是当今世界上的热门研究领域，其研究具有广阔的应用前景和巨大的现实意义。目前国内的Web数据挖掘尚处于学习、跟踪和探索阶段。Web数据挖掘有许多问题有待于进一步的研究和深化。Web2.0的出现给Web数据挖掘提出了新的要求。基于Web2.0的数据挖掘目前还处于起步阶段，它必将成为Web数据挖掘中很重要的一个研究领域。</p></p></td></tr></table>
    <br/>
    
    
        <br/><br/>
    <span style="color:red;"><a href="
    
   
    http://yuping.javaeye.com/blog/116243
    
" style="color:red;">《 Web数据挖掘 》 的评论也很精彩，欢迎您也添加评论。查看详细 >></a></span>


    <br/><br/>
    
    
     
    <br/><br/><br/><br/>

         
                           
            <span style="color:#E28822;">JavaEye推荐</span><br/>
            <a href="http://www.javaeye.com/topic/113150" target="_blank" >上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师</a><br/>
            <a href="http://ad.cn.doubleclick.net/clk;119879986;18083637;h?http://www.ibm.com/developerworks/cn/downloads/?S_TACT=105AGX52&S_CMP=dta-jeye" target="_blank" >免费下载IBM社区版软件--它基于开放的标准，支持广泛的开发类型，让您的开发高效自主！</a><br/>
            <a href="http://www.soa2007.org/soainaction/?referer=javaeye&utm_campaign=soainaction&utm_source=javaeye&utm_medium=hplks" target="_blank" >京沪穗蓉四地免费注册，SOA技术高手汇聚交锋.</a><br/>
            
            
            <a href="http://www.JavaEye.com/topic/101933" >上海：优秀公司德比：高薪诚聘 资深Java工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92740" > 广州：优易公司：诚聘Java工程师，开发经理  </a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92797" >上海：尤恩斯国际集团：诚聘开发工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/69984" >北京：优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA</a><br/>
                           
        
    
    <br/><br/>
    <br>文章来源:<a href='

   
    http://yuping.javaeye.com/blog/116243
    

'>

   
    http://yuping.javaeye.com/blog/116243
    

</a><img src ="http://www.blogjava.net/yuping322/aggbug/139617.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuping322/" target="_blank">fengzhi</a> 2007-08-24 19:52 <a href="http://www.blogjava.net/yuping322/archive/2007/08/24/139617.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]ext 学习笔记</title><link>http://www.blogjava.net/yuping322/archive/2007/08/23/139618.html</link><dc:creator>fengzhi</dc:creator><author>fengzhi</author><pubDate>Thu, 23 Aug 2007 01:06:00 GMT</pubDate><guid>http://www.blogjava.net/yuping322/archive/2007/08/23/139618.html</guid><wfw:comment>http://www.blogjava.net/yuping322/comments/139618.html</wfw:comment><comments>http://www.blogjava.net/yuping322/archive/2007/08/23/139618.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuping322/comments/commentRss/139618.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuping322/services/trackbacks/139618.html</trackback:ping><description><![CDATA[
<br/>



网站：<a href="http://www.JavaEye.com">JavaEye</a>  作者：<a href="http://yuping.JavaEye.com/">yuping322</a> 
发表时间: 2007-08-23 09:06  此文章来自于 <a href="http://www.JavaEye.com">http://www.JavaEye.com</a> 

 

   
<br/>声明：本文系JavaEye网站原创文章，未经JavaEye网站或者作者本人书面许可，任何其他网站严禁擅自发表本文，否则必将追究法律责任！<br/>


原文链接：<a href="
    
   
    http://yuping.javaeye.com/blog/115874
    
" style="color:red;">
    
   
    http://yuping.javaeye.com/blog/115874
    
</a><br/><br/>
 
    
    <table width="100%"><tr><td><p><br /><div>Ext，在最开始的时候，是作为YUI的一个扩展存在的，所以那个时候它的名称是YUI.Ext，后来，Ext作为一个独立的项目进行开发，并 不再依赖于YUI，在使用Ext的过程当中，你可以使用Ext-base, Prototype+script.aculo.us，jQuey和YUI四种中的一种，我因为比较习惯使用prototype，所以会选择 Prototype+script.aculo.us的组合。jQuery也是一个写得很优美的框架，没有用过，以后抽空看看代码，应该获益匪浅。</div><div>&nbsp;</div><div>Ext官方网站：<a href="http://www.extjs.com/">http://www.extjs.com</a></div><div>JSEclipse：<a href="http://www.adobe.com/cfusion/entitlement/index.cfm?e=labs_jseclipse">http://www.adobe.com/cfusion/entitlement/index.cfm?e=labs_jseclipse</a></div><div>Firebug：<a href="http://www.getfirebug.com/">http://www.getfirebug.com</a></div><div>&nbsp;</div><div>从Ext的站点上下载最新版本的文件，解压什么的我就不说，我想说一下这个文档的结构：</div><div>├─adapter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 存放所有adapter的文件夹<br />├─build&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 经过压缩（build）过的文件<br />├─docs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文档<br />├─examples&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DEMO<br />├─package&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 按包分类的文件<br />├─resources&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 资源文件，包括CSS和一些图片<br />└─source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 源代码</div><div>使用过程当中，除非你特别介意JS文件的加载是否影响速度，大可只引入ext-all.js和ext-all.css两个文件，Ext在包管理方面，我觉得应该向Dojo学习下。</div><div>&nbsp;</div><div>JS和CSS引入的顺序：</div><div>&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;js/ext/resources/css/ext-all.css&quot; /&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 必须引入<br />&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;js/ext/resources/css/xtheme-aero.css&quot; /&gt; 可选，用来控制主题，并且有其他两个可选值，xtheme-gray.css、xtheme-vista.css。</div><div>&nbsp;</div><div>引入JS：按照底层依赖的不同：</div><p><strong>Ext Stand-alone：<br /></strong>ext-base.js<br />ext-all.js (or your choice of files)  </p><p><strong>Yahoo! UI (.12+)：</strong><br />yui-utilities.js<br />ext-yui-adapter.js<br />ext-all.js (or your choice of files)  </p><p><strong>jQuery (1.1+)：</strong><br />jquery.js<br />jquery-plugins.js // required jQuery plugins<br />ext-jquery-adapter.js<br />ext-all.js (or your choice of files)  </p><p><strong>Prototype (1.5+) / Scriptaculous (1.7+)：<br /></strong>prototype.js<br />scriptaculous.js?load=effects&nbsp; (or whatever you want to load)<br />ext-prototype-adapter.js<br />ext-all.js (or your choice of files)  </p><div>把相应的文件引入到HTML的head里后，你就可以写你自己的第一Ext的Demo了。</div><div>&lt;script type=&quot;text/javascript&quot;&gt;</div><div>function InitDialog() {<br />&nbsp;&nbsp;var dialog = new Ext.BasicDialog(&quot;<font color="#00b0f0">hello-dlg</font>&quot;, { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>id: &quot;hello-dialog&quot;,</strong></div><div><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong>title: &quot;Hello&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autoTabs:true,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:500,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:300,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shadow:true,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minWidth:300,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minHeight:250,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxyDrag: true<br />&nbsp;&nbsp;});<br />&nbsp;&nbsp;dialog.addKeyListener(27, dialog.hide, dialog);<br />&nbsp;&nbsp;dialog.addButton('Submit', dialog.hide, dialog).disable();<br />&nbsp;&nbsp;dialog.addButton('Close', dialog.hide, dialog);<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<strong>Ext.ComponentMgr.register(dialog);</strong></div><div>}</div><div>function OnButtonClick() {<br />&nbsp;&nbsp;<strong>var dialog = Ext.getCmp(&quot;hello-dialog&quot;);<br /></strong>&nbsp;&nbsp;dialog.show();<br />}</div><div><strong>Ext.onReady(InitDialog);</strong></div><div>&lt;/script&gt;</div><div>&nbsp;</div><div>&lt;button onClick=&quot;OnButtonClick();&quot;&gt;Show&lt;/button&gt;</div><div>&lt;div id=&quot;<font color="#0070c0">hello-dlg</font>&quot;&gt;&lt;/div&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 渲染DIV用到的层</div><div>这里有四处要注意一下：</div><div><strong>id: &quot;hello-dialog&quot;, </strong>Compoent的ID，有了这个ID才能用ComponentMgr.register来在全局进行注册<br /><strong>Ext.ComponentMgr.register(dialog); </strong>注册组件</div><div><strong>var dialog = Ext.getCmp(&quot;hello-dialog&quot;); </strong>根据ID来得到组件<br /><strong>Ext.onReady(InitDialog); </strong>Ext.onRead是注册一个在整个页面的DOM构建完成会被执行的函数</div><p>呵呵，第一个例子就出来了，试试看吧~  </p>&nbsp;<br><br><p id="TBPingURL"></p></td></tr></table>
    <br/>
    
    
        <br/><br/>
    <span style="color:red;"><a href="
    
   
    http://yuping.javaeye.com/blog/115874
    
" style="color:red;">《 ext 学习笔记 》 的评论也很精彩，欢迎您也添加评论。查看详细 >></a></span>


    <br/><br/>
    
    
     
    <br/><br/><br/><br/>

         
                           
            <span style="color:#E28822;">JavaEye推荐</span><br/>
            <a href="http://www.javaeye.com/topic/113150" target="_blank" >上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师</a><br/>
            <a href="http://ad.cn.doubleclick.net/clk;119879986;18083637;h?http://www.ibm.com/developerworks/cn/downloads/?S_TACT=105AGX52&S_CMP=dta-jeye" target="_blank" >免费下载IBM社区版软件--它基于开放的标准，支持广泛的开发类型，让您的开发高效自主！</a><br/>
            <a href="http://www.soa2007.org/soainaction/?referer=javaeye&utm_campaign=soainaction&utm_source=javaeye&utm_medium=hplks" target="_blank" >京沪穗蓉四地免费注册，SOA技术高手汇聚交锋.</a><br/>
            
            
            <a href="http://www.JavaEye.com/topic/101933" >上海：优秀公司德比：高薪诚聘 资深Java工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92740" > 广州：优易公司：诚聘Java工程师，开发经理  </a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92797" >上海：尤恩斯国际集团：诚聘开发工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/69984" >北京：优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA</a><br/>
                           
        
    
    <br/><br/>
    <br>文章来源:<a href='

   
    http://yuping.javaeye.com/blog/115874
    

'>

   
    http://yuping.javaeye.com/blog/115874
    

</a><img src ="http://www.blogjava.net/yuping322/aggbug/139618.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuping322/" target="_blank">fengzhi</a> 2007-08-23 09:06 <a href="http://www.blogjava.net/yuping322/archive/2007/08/23/139618.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]掌握JDK1.5枚举类型</title><link>http://www.blogjava.net/yuping322/archive/2007/08/22/139619.html</link><dc:creator>fengzhi</dc:creator><author>fengzhi</author><pubDate>Wed, 22 Aug 2007 14:35:00 GMT</pubDate><guid>http://www.blogjava.net/yuping322/archive/2007/08/22/139619.html</guid><wfw:comment>http://www.blogjava.net/yuping322/comments/139619.html</wfw:comment><comments>http://www.blogjava.net/yuping322/archive/2007/08/22/139619.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuping322/comments/commentRss/139619.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuping322/services/trackbacks/139619.html</trackback:ping><description><![CDATA[
<br/>



网站：<a href="http://www.JavaEye.com">JavaEye</a>  作者：<a href="http://yuping.JavaEye.com/">yuping322</a> 
发表时间: 2007-08-22 22:35  此文章来自于 <a href="http://www.JavaEye.com">http://www.JavaEye.com</a> 

 

   
<br/>声明：本文系JavaEye网站原创文章，未经JavaEye网站或者作者本人书面许可，任何其他网站严禁擅自发表本文，否则必将追究法律责任！<br/>


原文链接：<a href="
    
   
    http://yuping.javaeye.com/blog/115860
    
" style="color:red;">
    
   
    http://yuping.javaeye.com/blog/115860
    
</a><br/><br/>
 
    
    <table width="100%"><tr><td><p><p>Enum作为Sun全新引进的一个关键字，看起来很象是特殊的class,&nbsp;它也可以有自己的变量，可以定义自己的方法，可以实现一个或者多个接口。&nbsp;当我们在声明一个enum类型时，我们应该注意到enum类型有如下的一些特征。&nbsp;<br /><br />　　1．它不能有public的构造函数，这样做可以保证客户代码没有办法新建一个enum的实例。&nbsp;<br /><br />　　2．所有枚举值都是public&nbsp;,&nbsp;static&nbsp;,&nbsp;final的。注意这一点只是针对于枚举值，我们可以和在普通类里面定义&nbsp;变量一样定义其它任何类型的非枚举变量，这些变量可以用任何你想用的修饰符。&nbsp;<br /><br />　　3．Enum默认实现了java.lang.Comparable接口。&nbsp;<br /><br />　　4．Enum覆载了了toString方法，因此我们如果调用Color.Blue.toString()默认返回字符串&rdquo;Blue&rdquo;.&nbsp;<br /><br />　　5．Enum提供了一个valueOf方法，这个方法和toString方法是相对应的。调用valueOf(&ldquo;Blue&rdquo;)将返回Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点，一把来说应该相对应地重写valueOf方法。&nbsp;<br /><br />　　6．Enum还提供了values方法，这个方法使你能够方便的遍历所有的枚举值。&nbsp;<br /><br />　　7．Enum还有一个oridinal的方法，这个方法返回枚举值在枚举类种的顺序，这个顺序根据枚举值声明的顺序而定，这里Color.Red.ordinal()返回0。&nbsp;<br /><br />　　了解了这些基本特性，我们来看看如何使用它们。&nbsp;<br /><br />　　1．遍历所有有枚举值.&nbsp;知道了有values方法，我们可以轻车熟路地用ForEach循环来遍历了枚举值了。&nbsp;<br /><br /><strong>　　for&nbsp;(Color&nbsp;c:&nbsp;Color.values())&nbsp;<br />　　System.out.println(&ldquo;find&nbsp;value:&rdquo;&nbsp;+&nbsp;c);&nbsp;</strong><br /><br />　　2．在enum中定义方法和变量，比如我们可以为Color增加一个方法随机返回一个颜色。&nbsp;<br /><br />　　<strong>public&nbsp;enum&nbsp;Color&nbsp;{&nbsp;<br />　　Red,&nbsp;<br />　　Green,&nbsp;<br />　　Blue;&nbsp;<br /><br />　　/*&nbsp;<br />　　*定义一个变量表示枚举值的数目。&nbsp;<br />　　*(我有点奇怪为什么sun没有给enum直接提供一个size方法).&nbsp;<br />　　*/&nbsp;<br />　　private&nbsp;static&nbsp;int&nbsp;number&nbsp;=&nbsp;Color.values().length&nbsp;;&nbsp;<br /><br />　　/**&nbsp;<br />　　*&nbsp;随机返回一个枚举值&nbsp;<br />　　@return&nbsp;a&nbsp;random&nbsp;enum&nbsp;value.&nbsp;<br />　　*/&nbsp;<br />　　public&nbsp;static&nbsp;Color&nbsp;getRandomColor(){&nbsp;<br />　　long&nbsp;random&nbsp;=&nbsp;System.currentTimeMillis()&nbsp;%&nbsp;number;&nbsp;<br />　　switch&nbsp;((int)&nbsp;random){&nbsp;<br />　　　case&nbsp;0:&nbsp;<br />　　　　return&nbsp;Color.Red;&nbsp;<br />　　　case&nbsp;1:&nbsp;<br />　　　　return&nbsp;Color.Green;&nbsp;<br />　　　case&nbsp;2:&nbsp;<br />　　　　return&nbsp;Color.Blue;&nbsp;<br />　　　default&nbsp;:&nbsp;return&nbsp;Color.Red;&nbsp;<br />　　}&nbsp;<br />　　}&nbsp;<br />　　}</strong>&nbsp;<br /><br />　　可以看出这在枚举类型里定义变量和方法和在普通类里面定义方法和变量没有什么区别。唯一要注意的只是变量和方法定义必须放在所有枚举值定义的后面，否则编译器会给出一个错误。&nbsp;<br /><br />　　3．覆载(Override)toString,&nbsp;valueOf方法&nbsp;<br /><br />　　前面我们已经知道enum提供了toString,valueOf等方法，很多时候我们都需要覆载默认的toString方法，那么对于enum我们怎么做呢。其实这和覆载一个普通class的toString方法没有什么区别。&nbsp;<br /><br />　　<strong>&hellip;.&nbsp;<br />　　public&nbsp;String&nbsp;toString(){&nbsp;<br />　　switch&nbsp;(this){&nbsp;<br />　　case&nbsp;Red:&nbsp;<br />　　　return&nbsp;&quot;Color.Red&quot;;&nbsp;<br />　　case&nbsp;Green:&nbsp;<br />　　　return&nbsp;&quot;Color.Green&quot;;&nbsp;<br />　　case&nbsp;Blue:&nbsp;<br />　　　return&nbsp;&quot;Color.Blue&quot;;&nbsp;<br />　　default:&nbsp;<br />　　　return&nbsp;&quot;Unknow&nbsp;Color&quot;;&nbsp;<br />　　}&nbsp;<br />　　}&nbsp;<br />　　&hellip;.&nbsp;</strong><br />　　这时我们可以看到，此时再用前面的遍历代码打印出来的是&nbsp;<br /><br />　　Color.Red&nbsp;<br />　　Color.Green&nbsp;<br />　　Color.Blue&nbsp;<br /><br />　　而不是&nbsp;<br /><br />　　Red&nbsp;<br />　　Green&nbsp;<br />　　Blue.&nbsp;<br /><br />　　可以看到toString确实是被覆载了。一般来说在覆载toString的时候我们同时也应该覆载valueOf方法，以保持它们相互的一致性。&nbsp;<br /><br />　　4．使用构造函数&nbsp;<br /><br />　　虽然enum不可以有public的构造函数，但是我们还是可以定义private的构造函数，在enum内部使用。还是用Color这个例子。&nbsp;<br /><br />　　<strong>public&nbsp;enum&nbsp;Color&nbsp;{&nbsp;<br />　　Red(&quot;This&nbsp;is&nbsp;Red&quot;),&nbsp;<br />　　Green(&quot;This&nbsp;is&nbsp;Green&quot;),&nbsp;<br />　　Blue(&quot;This&nbsp;is&nbsp;Blue&quot;);&nbsp;<br /><br />　　private&nbsp;String&nbsp;desc;&nbsp;<br /><br />　　Color(String&nbsp;desc){&nbsp;<br />　　this.desc&nbsp;=&nbsp;desc;&nbsp;<br />　　}&nbsp;<br /><br />　　public&nbsp;String&nbsp;getDesc(){&nbsp;<br />　　return&nbsp;this.desc;&nbsp;<br />　　}&nbsp;<br /><br />　　}&nbsp;</strong><br /><br />　　这里我们为每一个颜色提供了一个说明信息,&nbsp;然后定义了一个构造函数接受这个说明信息。&nbsp;<br /><br />　　要注意这里构造函数不能为public或者protected,&nbsp;从而保证构造函数只能在内部使用，客户代码不能new一个枚举值的实例出来。这也是完全符合情理的，因为我们知道枚举值是public&nbsp;static&nbsp;final的常量而已。&nbsp;<br /><br />　　5．实现特定的接口&nbsp;<br /><br />　　我们已经知道enum可以定义变量和方法，它要实现一个接口也和普通class实现一个接口一样，这里就不作示例了。&nbsp;<br /><br />　　6．定义枚举值自己的方法。&nbsp;<br /><br />　　前面我们看到可以为enum定义一些方法，其实我们甚至可以为每一个枚举值定义方法。这样，我们前面覆载&nbsp;toString的例子可以被改写成这样。&nbsp;<br /><br />　　<strong>public&nbsp;enum&nbsp;Color&nbsp;{&nbsp;<br />　　Red&nbsp;{&nbsp;<br />　　public&nbsp;String&nbsp;toString(){&nbsp;<br />　　　return&nbsp;&quot;Color.Red&quot;;&nbsp;<br />　　}&nbsp;<br />　　},&nbsp;<br />　　Green&nbsp;{&nbsp;<br />　　public&nbsp;String&nbsp;toString(){&nbsp;<br />　　　return&nbsp;&quot;Color.Green&quot;;&nbsp;<br />　　}&nbsp;<br />　　},&nbsp;<br />　　Blue{&nbsp;<br />　　public&nbsp;String&nbsp;toString(){&nbsp;<br />　　　return&nbsp;&quot;Color.Blue&quot;;&nbsp;<br />　　}&nbsp;<br />　　};&nbsp;<br />　　}&nbsp;</strong><br /><br />　　从逻辑上来说这样比原先提供一个&ldquo;全局&ldquo;的toString方法要清晰一些。&nbsp;<br /><br />　　总的来说，enum作为一个全新定义的类型，是希望能够帮助程序员写出的代码更加简单易懂，个人觉得一般也不需要过多的使用enum的一些高级特性，否则就和简单易懂的初衷想违背了。&nbsp;&nbsp;</p><p>引自:<a href="http:///" class="l2" target="_blank">http://www.it.com.cn/f/edu/053/29/93843.htm</a></p><br><br><p id="TBPingURL"></p></td></tr></table>
    <br/>
    
    
        <br/><br/>
    <span style="color:red;"><a href="
    
   
    http://yuping.javaeye.com/blog/115860
    
" style="color:red;">《 掌握JDK1.5枚举类型 》 的评论也很精彩，欢迎您也添加评论。查看详细 >></a></span>


    <br/><br/>
    
    
     
    <br/><br/><br/><br/>

         
                           
            <span style="color:#E28822;">JavaEye推荐</span><br/>
            <a href="http://www.javaeye.com/topic/113150" target="_blank" >上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师</a><br/>
            <a href="http://ad.cn.doubleclick.net/clk;119879986;18083637;h?http://www.ibm.com/developerworks/cn/downloads/?S_TACT=105AGX52&S_CMP=dta-jeye" target="_blank" >免费下载IBM社区版软件--它基于开放的标准，支持广泛的开发类型，让您的开发高效自主！</a><br/>
            <a href="http://www.soa2007.org/soainaction/?referer=javaeye&utm_campaign=soainaction&utm_source=javaeye&utm_medium=hplks" target="_blank" >京沪穗蓉四地免费注册，SOA技术高手汇聚交锋.</a><br/>
            
            
            <a href="http://www.JavaEye.com/topic/101933" >上海：优秀公司德比：高薪诚聘 资深Java工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92740" > 广州：优易公司：诚聘Java工程师，开发经理  </a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92797" >上海：尤恩斯国际集团：诚聘开发工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/69984" >北京：优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA</a><br/>
                           
        
    
    <br/><br/>
    <br>文章来源:<a href='

   
    http://yuping.javaeye.com/blog/115860
    

'>

   
    http://yuping.javaeye.com/blog/115860
    

</a><img src ="http://www.blogjava.net/yuping322/aggbug/139619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuping322/" target="_blank">fengzhi</a> 2007-08-22 22:35 <a href="http://www.blogjava.net/yuping322/archive/2007/08/22/139619.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入] xml文件解析-DOM4J </title><link>http://www.blogjava.net/yuping322/archive/2007/08/22/139620.html</link><dc:creator>fengzhi</dc:creator><author>fengzhi</author><pubDate>Wed, 22 Aug 2007 10:10:00 GMT</pubDate><guid>http://www.blogjava.net/yuping322/archive/2007/08/22/139620.html</guid><wfw:comment>http://www.blogjava.net/yuping322/comments/139620.html</wfw:comment><comments>http://www.blogjava.net/yuping322/archive/2007/08/22/139620.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuping322/comments/commentRss/139620.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuping322/services/trackbacks/139620.html</trackback:ping><description><![CDATA[
<br/>



网站：<a href="http://www.JavaEye.com">JavaEye</a>  作者：<a href="http://yuping.JavaEye.com/">yuping322</a> 
发表时间: 2007-08-22 18:10  此文章来自于 <a href="http://www.JavaEye.com">http://www.JavaEye.com</a> 

 

   
<br/>声明：本文系JavaEye网站原创文章，未经JavaEye网站或者作者本人书面许可，任何其他网站严禁擅自发表本文，否则必将追究法律责任！<br/>


原文链接：<a href="
    
   
    http://yuping.javaeye.com/blog/115336
    
" style="color:red;">
    
   
    http://yuping.javaeye.com/blog/115336
    
</a><br/><br/>
 
    
    <table width="100%"><tr><td><p><div class="postText">&nbsp;１．<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp; </span>读取并解析XML文档：
<br /><div>读写XML文档主要依赖于org.dom4j.io包，其中<span style="COLOR: black">提供</span><span style="COLOR: black"><a href="http://dev.csdn.net/Develop/article/Local%20Settings/Temporary%20Internet%20Files/MyWeb/myclasses/dom4j-1.4/doc/apidocs/org/dom4j/io/DOMReader.html"><span style="COLOR: black; TEXT-DECORATION: none">DOMReader</span></a></span><span style="COLOR: black">和</span><span style="COLOR: black">SAXReader</span><span style="COLOR: black">两类不同方式，而调用方式是一样的。这就是依靠接口的好处。</span></div>
<br /><table cellspacing="0" border="1" bordercolor="#000000" cellpadding="0">
<br />    <tbody>
<br />        <tr>
<br />            <td bgcolor="#eaeaea" valign="top" width="529">
<br />            <pre>&nbsp;</pre>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: #3f7f5f">// </span></span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">从文件读取</span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">XML</span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">，输入文件名，返回</span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">XML</span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">文档</span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <strong><span style="COLOR: #7f0055">public</span></strong> <span style="COLOR: black">Document</span> <span style="COLOR: black">read(String</span> <span style="COLOR: black">fileName)</span> <strong><span style="COLOR: #7f0055">throws</span></strong> <span style="COLOR: black">MalformedURLException,</span> <span style="COLOR: black">DocumentException</span> <span style="COLOR: black">{</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">SAXReader</span> <span style="COLOR: black">reader</span> <span style="COLOR: black">=</span> <strong><span style="COLOR: #7f0055">new</span></strong> <span style="COLOR: black">SAXReader();</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">Document</span> <span style="COLOR: black">document</span> <span style="COLOR: black">=</span> <span style="COLOR: black">reader.read(</span><strong><span style="COLOR: #7f0055">new</span></strong> <span style="COLOR: black">File(fileName));</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="COLOR: #7f0055">return</span></strong> <span style="COLOR: black">document;</span></span></div>
<br />            <div><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">}</span></span></div>
<br />            <div>&nbsp;</div>
<br />            </td>
<br />        </tr>
<br />    </tbody>
<br /></table>
<br /><div>其中，reader的read方法是重载的，可以从InputStream, File, Url等多种不同的源来读取。得到的Document对象就带表了整个XML。</div>
<br /><div>根据本人自己的经验，读取的字符编码是按照XML文件头定义的编码来转换。如果遇到乱码问题，注意要把各处的编码名称保持一致即可。</div>
<br /><div>&nbsp;</div>
<br /><div>２．<span style="FONT: 7pt 'Times New Roman'">&nbsp;</span><span style="FONT: 7pt 'Times New Roman'">&nbsp;</span>取得Root节点</div>
<br /><div>读取后的第二步，就是得到Root节点。熟悉XML的人都知道，一切XML分析都是从Root元素开始的。</div>
<br /><table cellspacing="0" border="1" bordercolor="#000000" cellpadding="0">
<br />    <tbody>
<br />        <tr>
<br />            <td bgcolor="#eaeaea" valign="top" width="528">
<br />            <pre>&nbsp;</pre>
<br />            <div align="left"><span style="FONT-SIZE: 9pt; COLOR: navy">　</span>&nbsp;<span style="FONT-SIZE: 10pt"><strong><span style="COLOR: #7f0055">public</span></strong> <span style="COLOR: black">Element</span> <span style="COLOR: black">getRootElement(Document</span> <span style="COLOR: black">doc){</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="COLOR: #7f0055">return</span></strong> <span style="COLOR: black">doc.getRootElement();</span></span></div>
<br />            <div><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">}</span></span></div>
<br />            <div>&nbsp;</div>
<br />            </td>
<br />        </tr>
<br />    </tbody>
<br /></table>
<br /><p>2.2访问节点</p>
<br /><p>List childrenList = elt.elements();</p>
<br /><p>List childrenList = elt.elements(&quot;student&quot;);</p>
<br /><p>Element eltChild = elt.element(&quot;student&quot;);</p>
<br /><p>2.3.访问属性</p>
<br /><p>List&nbsp; attrList = elt.attributes();</p>
<br /><p>Attribute attr = elt.attribute(&quot;sn&quot;);</p>
<br /><p>String attrValue = elt.attributeValue(&quot;sn&quot;);</p>
<br /><p>2.4.删除元素和属性</p>
<br /><p>Element eltStu = root.element(&quot;student&quot;);</p>
<br /><p>root.remove(eltstu);</p>
<br /><p>--------------------------------</p>
<br /><p>etl.remove(elt.attribute(&quot;sn&quot;));</p>
<br /><p>３．<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span>遍历XML树</p>
<br /><div>DOM4J提供至少3种遍历节点的方法：</div>
<br /><div>1) 枚举(Iterator)</div>
<br /><table bgcolor="#eaeaea" cellspacing="0" border="1" bordercolor="#000000" cellpadding="0">
<br />    <tbody>
<br />        <tr>
<br />            <td valign="top" width="528">
<br />            <pre>&nbsp;</pre>
<br />            <div align="left"><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; </span>// </span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">枚举所有子节点</span></div>
<br />            <div align="left"><strong><span style="FONT-SIZE: 10pt; COLOR: #7f0055"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; </span>for</span></strong><span style="FONT-SIZE: 10pt"> <span style="COLOR: black">(</span> <span style="COLOR: black">Iterator</span> <span style="COLOR: black">i</span> <span style="COLOR: black">=</span> <span style="COLOR: black">root.elementIterator();</span> <span style="COLOR: black">i.hasNext();</span> <span style="COLOR: black">)</span> <span style="COLOR: black">{</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">Element</span> <span style="COLOR: black">element</span> <span style="COLOR: black">=</span> <span style="COLOR: black">(Element)</span> <span style="COLOR: black">i.next();</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #3f7f5f">// do something</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">}</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; </span>// </span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">枚举名称为</span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">foo</span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">的节点</span></div>
<br />            <div align="left"><strong><span style="FONT-SIZE: 10pt; COLOR: #7f0055"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; </span>for</span></strong><span style="FONT-SIZE: 10pt"> <span style="COLOR: black">(</span> <span style="COLOR: black">Iterator</span> <span style="COLOR: black">i</span> <span style="COLOR: black">=</span> <span style="COLOR: black">root.elementIterator(&quot;</span><span style="COLOR: #2a00ff">foo&quot;</span><span style="COLOR: black">);</span> <span style="COLOR: black">i.hasNext();)</span> <span style="COLOR: black">{</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">Element</span> <span style="COLOR: black">foo</span> <span style="COLOR: black">=</span> <span style="COLOR: black">(Element)</span> <span style="COLOR: black">i.next();</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #3f7f5f">// do something</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">}</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; </span>// </span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">枚举属性</span></div>
<br />            <div align="left"><strong><span style="FONT-SIZE: 10pt; COLOR: #7f0055"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; </span>for</span></strong><span style="FONT-SIZE: 10pt"> <span style="COLOR: black">(</span> <span style="COLOR: black">Iterator</span> <span style="COLOR: black">i</span> <span style="COLOR: black">=</span> <span style="COLOR: black">root.attributeIterator();</span> <span style="COLOR: black">i.hasNext();</span> <span style="COLOR: black">)</span> <span style="COLOR: black">{</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">Attribute</span> <span style="COLOR: black">attribute</span> <span style="COLOR: black">=</span> <span style="COLOR: black">(Attribute)</span> <span style="COLOR: black">i.next();</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #3f7f5f">// do something</span></span></div>
<br />            <pre><span style="FONT-SIZE: 10pt; COLOR: black"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; </span>}</span></pre>
<br />            </td>
<br />        </tr>
<br />    </tbody>
<br /></table>
<br /><p>2)递归 </p>
<br /><div>递归也可以采用Iterator作为枚举手段，但文档中提供了另外的做法</div>
<br /><table bgcolor="#eaeaea" cellspacing="0" border="1" bordercolor="#000000" cellpadding="0">
<br />    <tbody>
<br />        <tr>
<br />            <td valign="top" width="528">
<br />            <pre>&nbsp;</pre>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <strong><span style="COLOR: #7f0055">public</span></strong> <strong><span style="COLOR: #7f0055">void</span></strong> <span style="COLOR: black">treeWalk()</span> <span style="COLOR: black">{</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">treeWalk(getRootElement());</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">}</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <strong><span style="COLOR: #7f0055">public</span></strong> <strong><span style="COLOR: #7f0055">void</span></strong> <span style="COLOR: black">treeWalk(Element</span> <span style="COLOR: black">element)</span> <span style="COLOR: black">{</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="COLOR: #7f0055">for</span></strong> <span style="COLOR: black">(</span><strong><span style="COLOR: #7f0055">int</span></strong> <span style="COLOR: black">i</span> <span style="COLOR: black">=</span> <span style="COLOR: black">0,</span> <span style="COLOR: black">size</span> <span style="COLOR: black">=</span> <span style="COLOR: black">element.nodeCount();</span> <span style="COLOR: black">i</span> <span style="COLOR: black">&lt;</span> <span style="COLOR: black">size;</span> <span style="COLOR: black">i++)</span> <span style="COLOR: black"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; </span>{</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">Node</span> <span style="COLOR: black">node</span> <span style="COLOR: black">=</span> <span style="COLOR: black">element.node(i);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="COLOR: #7f0055">if</span></strong> <span style="COLOR: black">(node</span> <strong><span style="COLOR: #7f0055">instanceof</span></strong> <span style="COLOR: black">Element)</span> <span style="COLOR: black">{</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">treeWalk((Element)</span> <span style="COLOR: black">node);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">}</span> <strong><span style="COLOR: #7f0055">else</span></strong> <span style="COLOR: black">{</span> <span style="COLOR: #3f7f5f">// do something....</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">}</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">}</span></span></div>
<br />            <div><span style="FONT-SIZE: 10pt"><span style="COLOR: black">}</span></span></div>
<br />            <div>&nbsp;</div>
<br />            </td>
<br />        </tr>
<br />    </tbody>
<br /></table>
<br /><div>&nbsp;</div>
<br /><div>3) Visitor模式</div>
<br /><div>最令人兴奋的是DOM4J对Visitor的支持，这样可以大大缩减代码量，并且清楚易懂。了解设计模式的人都知道，Visitor是GOF设计模式之一。其主要原理就是两种类互相保有对方的引用，并且一种作为Visitor去访问许多Visitable。我们来看DOM4J中的Visitor模式(快速文档中没有提供)</div>
<br /><div>只需要自定一个类实现Visitor接口即可。</div>
<br /><table bgcolor="#eaeaea" cellspacing="0" border="1" bordercolor="#000000" cellpadding="0">
<br />    <tbody>
<br />        <tr>
<br />            <td valign="top" width="528">
<br />            <pre>&nbsp;</pre>
<br />            <div align="left"><span style="FONT-SIZE: 9pt; COLOR: navy">　</span><span style="FONT-SIZE: 9pt; COLOR: navy">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="FONT-SIZE: 10pt">&nbsp; <strong><span style="COLOR: #7f0055">public</span></strong> <strong><span style="COLOR: #7f0055">class</span></strong> <span style="COLOR: black">MyVisitor</span> <strong><span style="COLOR: #7f0055">extends</span></strong> <span style="COLOR: black">VisitorSupport</span> <span style="COLOR: black">{</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <strong><span style="COLOR: #7f0055">public</span></strong> <strong><span style="COLOR: #7f0055">void</span></strong> <span style="COLOR: black">visit(Element</span> <span style="COLOR: black">element){</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="COLOR: black">System.out.println(element.getName());</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="COLOR: black">}</span></span></div>
<br />            <div align="left"><strong><span style="FONT-SIZE: 10pt; COLOR: #7f0055"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; </span><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; </span><span style="FONT-SIZE: 10pt">&nbsp;&nbsp; </span>public</span></strong><span style="FONT-SIZE: 10pt"> <strong><span style="COLOR: #7f0055">void</span></strong> <span style="COLOR: black">visit(Attribute</span> <span style="COLOR: black">attr){</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="COLOR: black">System.out.println(attr.getName());</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span style="COLOR: black">}</span></span></div>
<br />            <pre><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="FONT-SIZE: 10pt; COLOR: black">}</span></pre>
<br />            <pre>&nbsp;</pre>
<br />            <pre><span style="FONT-SIZE: 9pt; COLOR: navy">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="FONT-SIZE: 9pt; COLOR: navy">调用：</span><span style="FONT-SIZE: 9pt; COLOR: navy">&nbsp; root.accept(new MyVisitor())</span></pre>
<br />            </td>
<br />        </tr>
<br />    </tbody>
<br /></table>
<br /><div>&nbsp;&nbsp;&nbsp; Visitor接口提供多种Visit()的重载，根据XML不同的对象，将采用不同的方式来访问。上面是给出的Element和Attribute的简单实现，一般比较常用的就是这两个。VisitorSupport是DOM4J提供的默认适配器，Visitor接口的Default Adapter模式，这个模式给出了各种visit(*)的空实现，以便简化代码。</div>
<br /><div>&nbsp;&nbsp;&nbsp; 注意，这个Visitor是自动遍历所有子节点的。如果是root.accept(MyVisitor)，将遍历子节点。我第一次用的时候，认为是需要自己遍历，便在递归中调用Visitor，结果可想而知。</div>
<br /><div>&nbsp;</div>
<br /><div>4. XPath支持</div>
<br /><div>&nbsp;&nbsp;&nbsp; DOM4J对XPath有良好的支持，如访问一个节点，可直接用XPath选择。</div>
<br /><table cellspacing="0" border="1" bordercolor="#000000" cellpadding="0">
<br />    <tbody>
<br />        <tr>
<br />            <td bgcolor="#eaeaea" valign="top" width="528">
<br />            <div align="left">&nbsp;</div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp; <strong><span style="COLOR: #7f0055">public</span></strong> <strong><span style="COLOR: #7f0055">void</span></strong> <span style="COLOR: black">bar(Document</span> <span style="COLOR: black">document)</span> <span style="COLOR: black">{</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<span style="COLOR: black">List</span> <span style="COLOR: black">list</span> <span style="COLOR: black">=</span> <span style="COLOR: black">document.selectNodes(</span> &quot;<span style="COLOR: #2a00ff">//foo/bar&quot;</span> <span style="COLOR: black">);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<span style="COLOR: black">Node</span> <span style="COLOR: black">node</span> <span style="COLOR: black">=</span> <span style="COLOR: black">document.selectSingleNode(&quot;</span><span style="COLOR: #2a00ff">//foo/bar/author&quot;</span><span style="COLOR: black">);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<span style="COLOR: black">String</span> <span style="COLOR: black">name</span> <span style="COLOR: black">=</span> <span style="COLOR: black">node.valueOf(</span> &quot;<span style="COLOR: #2a00ff">@name&quot;</span> <span style="COLOR: black">);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; &nbsp;<span style="COLOR: black">}</span></span></div>
<br />            <div align="left">&nbsp;</div>
<br />            </td>
<br />        </tr>
<br />    </tbody>
<br /></table>
<br /><div align="left"><span style="FONT-SIZE: 10pt; BACKGROUND: white">&nbsp;&nbsp;&nbsp; </span><span style="FONT-SIZE: 10pt; BACKGROUND: white">例如，如果你想查找</span><span style="FONT-SIZE: 10pt; BACKGROUND: white">XHTML</span><span style="FONT-SIZE: 10pt; BACKGROUND: white">文档中所有的超链接，下面的代码可以实现：</span></div>
<br /><table cellspacing="0" border="1" cellpadding="0">
<br />    <tbody>
<br />        <tr>
<br />            <td bgcolor="#eaeaea" bordercolor="#000000" valign="top" width="528">
<br />            <div align="left">&nbsp;</div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <strong><span style="COLOR: #7f0055">public</span></strong> <strong><span style="COLOR: #7f0055">void</span></strong> <span style="COLOR: black">findLinks(Document</span> <span style="COLOR: black">document)</span> <strong><span style="COLOR: #7f0055">throws</span></strong> <span style="COLOR: black">DocumentException</span> <span style="COLOR: black">{</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<span style="COLOR: black">List</span> <span style="COLOR: black">list</span> <span style="COLOR: black">=</span> <span style="COLOR: black">document.selectNodes(&quot;</span> <span style="COLOR: #2a00ff">//a/@href</span> &quot;<span style="COLOR: black">);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<strong><span style="COLOR: #7f0055">for</span></strong> <span style="COLOR: black">(Iterator</span> <span style="COLOR: black">iter</span> <span style="COLOR: black">=</span> <span style="COLOR: black">list.iterator();</span> <span style="COLOR: black">iter.hasNext();</span> <span style="COLOR: black">)</span> <span style="COLOR: black">{</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<span style="COLOR: black">Attribute</span> <span style="COLOR: black">attribute</span> <span style="COLOR: black">=</span> <span style="COLOR: black">(Attribute)</span> <span style="COLOR: black">iter.next();</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<span style="COLOR: black">String</span> <span style="COLOR: black">url</span> <span style="COLOR: black">=</span> <span style="COLOR: black">attribute.getValue();</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<span style="COLOR: black">}</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; &nbsp;<span style="COLOR: black">}</span></span></div>
<br />            <div align="left">&nbsp;</div>
<br />            </td>
<br />        </tr>
<br />    </tbody>
<br /></table>
<br /><p><span style="FONT-SIZE: 10pt">5. </span><span style="FONT-SIZE: 10pt">字符串与</span><span style="FONT-SIZE: 10pt">XML</span><span style="FONT-SIZE: 10pt">的转换</span></p>
<br /><div align="left"><span style="FONT-SIZE: 10pt">有时候经常要用到字符串转换为</span><span style="FONT-SIZE: 10pt">XML</span><span style="FONT-SIZE: 10pt">或反之，</span></div>
<br /><table cellspacing="0" border="1" cellpadding="0">
<br />    <tbody>
<br />        <tr>
<br />            <td bgcolor="#eaeaea" bordercolor="#000000" valign="top" width="528">
<br />            <pre>&nbsp;</pre>
<br />            <pre><span style="FONT-SIZE: 9pt; COLOR: navy">&nbsp;&nbsp;&nbsp; </span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">// XML</span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">转字符串</span></pre>
<br />            <div align="left"><span style="FONT-SIZE: 9pt; COLOR: navy">　</span><span style="FONT-SIZE: 10pt"><span style="COLOR: black">Document</span> <span style="COLOR: black">document</span> <span style="COLOR: black">=</span> <span style="COLOR: black">...;</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">String</span> <span style="COLOR: black">text</span> <span style="COLOR: black">=</span> <span style="COLOR: black">document.asXML();</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">// </span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">字符串转</span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">XML</span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">String</span> <span style="COLOR: black">text</span> <span style="COLOR: black">=</span> &quot;<span style="COLOR: #2a00ff">&lt;person&gt; &lt;name&gt;James&lt;/name&gt; &lt;/person&gt;&quot;</span><span style="COLOR: black">;</span></span></div>
<br />            <div><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">Document</span> <span style="COLOR: black">document</span> <span style="COLOR: black">=</span> <span style="COLOR: black">DocumentHelper.parseText(text);</span></span></div>
<br />            <div>&nbsp;</div>
<br />            </td>
<br />        </tr>
<br />    </tbody>
<br /></table>
<br /><p><span style="FONT-SIZE: 10pt">6 </span><span style="FONT-SIZE: 10pt">用</span><span style="FONT-SIZE: 10pt">XSLT</span><span style="FONT-SIZE: 10pt">转换</span><span style="FONT-SIZE: 10pt">XML</span></p>
<br /><table cellspacing="0" border="1" bordercolor="#000000" cellpadding="0">
<br />    <tbody>
<br />        <tr>
<br />            <td bgcolor="#eaeaea" valign="top" width="528">
<br />            <div align="left">&nbsp;</div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp; <strong><span style="COLOR: #7f0055">public</span></strong> <span style="COLOR: black">Document</span> <span style="COLOR: black">styleDocument(</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">Document</span> <span style="COLOR: black">document,</span> </span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">String</span> <span style="COLOR: black">stylesheet</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">)</span> <strong><span style="COLOR: #7f0055">throws</span></strong> <span style="COLOR: black">Exception</span> <span style="COLOR: black">{</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: #3f7f5f">// load the transformer using JAXP</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">TransformerFactory</span> <span style="COLOR: black">factory</span> <span style="COLOR: black">=</span> <span style="COLOR: black">TransformerFactory.newInstance();</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">Transformer</span> <span style="COLOR: black">transformer</span> <span style="COLOR: black">=</span> <span style="COLOR: black">factory.newTransformer(</span> </span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="COLOR: #7f0055">new</span></strong> <span style="COLOR: black">StreamSource(</span> <span style="COLOR: black">stylesheet</span> <span style="COLOR: black">)</span> </span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: #3f7f5f">// now lets style the given document</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">DocumentSource</span> <span style="COLOR: black">source</span> <span style="COLOR: black">=</span> <strong><span style="COLOR: #7f0055">new</span></strong> <span style="COLOR: black">DocumentSource(</span> <span style="COLOR: black">document</span> <span style="COLOR: black">);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">DocumentResult</span> <span style="COLOR: black">result</span> <span style="COLOR: black">=</span> <strong><span style="COLOR: #7f0055">new</span></strong> <span style="COLOR: black">DocumentResult();</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">transformer.transform(</span> <span style="COLOR: black">source,</span> <span style="COLOR: black">result</span> <span style="COLOR: black">);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: #3f7f5f">// return the transformed document</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">Document</span> <span style="COLOR: black">transformedDoc</span> <span style="COLOR: black">=</span> <span style="COLOR: black">result.getDocument();</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <strong><span style="COLOR: #7f0055">return</span></strong> <span style="COLOR: black">transformedDoc;</span></span></div>
<br />            <div><span style="FONT-SIZE: 10pt; COLOR: black">}</span></div>
<br />            <div>&nbsp;</div>
<br />            </td>
<br />        </tr>
<br />    </tbody>
<br /></table>
<br /><div><span style="FONT-SIZE: 10pt"></span>&nbsp;</div>
<br /><div><span style="FONT-SIZE: 10pt">7. </span><span style="FONT-SIZE: 10pt; BACKGROUND: white">创建</span><span style="FONT-SIZE: 10pt">XML</span></div>
<br /><div>&nbsp;一般创建XML是写文件前的工作，这就像StringBuffer一样容易。</div>
<br /><table bgcolor="#eaeaea" cellspacing="0" border="1" bordercolor="#000000" cellpadding="0">
<br />    <tbody>
<br />        <tr>
<br />            <td valign="top" width="528">
<br />            <div align="left">&nbsp;</div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <strong><span style="COLOR: #7f0055">public</span></strong> <span style="COLOR: black">Document</span> <span style="COLOR: black">createDocument()</span> <span style="COLOR: black">{</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">Document</span> <span style="COLOR: black">document</span> <span style="COLOR: black">=</span> <span style="COLOR: black">DocumentHelper.createDocument();</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">Element</span> <span style="COLOR: black">root</span> <span style="COLOR: black">=</span> <span style="COLOR: black">document.addElement(</span><span style="COLOR: #2a00ff">root</span><span style="COLOR: black">);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">Element</span> <span style="COLOR: black">author1</span> <span style="COLOR: black">=</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">root</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">.addElement(&quot;</span><span style="COLOR: #2a00ff">author&quot;</span><span style="COLOR: black">)</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">.addAttribute(</span><span style="COLOR: #2a00ff">name</span><span style="COLOR: black">,</span> &quot;<span style="COLOR: #2a00ff">James&quot;</span><span style="COLOR: black">)</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">.addAttribute(&quot;</span><span style="COLOR: #2a00ff">location&quot;</span><span style="COLOR: black">,</span> &quot;<span style="COLOR: #2a00ff">UK&quot;</span><span style="COLOR: black">)</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">.addText(&quot;</span><span style="COLOR: #2a00ff">James Strachan&quot;</span><span style="COLOR: black">);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">Element</span> <span style="COLOR: black">author2</span> <span style="COLOR: black">=</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">root</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">.addElement(&quot;</span><span style="COLOR: #2a00ff">author&quot;</span><span style="COLOR: black">)</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">.addAttribute(&quot;</span><span style="COLOR: #2a00ff">name&quot;</span><span style="COLOR: black">,</span> <span style="COLOR: #2a00ff">Bob&quot;</span><span style="COLOR: black">)</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">.addAttribute(&quot;</span><span style="COLOR: #2a00ff">location&quot;</span><span style="COLOR: black">,</span> &quot;<span style="COLOR: #2a00ff">US&quot;</span><span style="COLOR: black">)</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">.</span><span style="COLOR: blue">addText</span><span style="COLOR: black">(&quot;</span><span style="COLOR: #2a00ff">Bob McWhirter&quot;</span><span style="COLOR: black">);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="COLOR: #7f0055">return</span></strong> <span style="COLOR: black">document;</span></span></div>
<br />            <div><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">}</span></span></div>
<br />            <div>&nbsp;</div>
<br />            </td>
<br />        </tr>
<br />    </tbody>
<br /></table>
<br /><div>&nbsp;</div>
<br /><div>8. 文件输出</div>
<br /><div>&nbsp;&nbsp;&nbsp; 一个简单的输出方法是将一个Document或任何的Node通过write方法输出</div>
<br /><table cellspacing="0" border="1" bordercolor="#000000" cellpadding="0">
<br />    <tbody>
<br />        <tr>
<br />            <td bgcolor="#eaeaea" valign="top" width="528">
<br />            <pre>&nbsp;</pre>
<br />            <div align="left"><span style="FONT-SIZE: 10pt; COLOR: black"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; </span>FileWriter</span><span style="FONT-SIZE: 10pt"> <span style="COLOR: black">out</span> <span style="COLOR: black">=</span> <strong><span style="COLOR: #7f0055">new</span></strong> <span style="COLOR: black">FileWriter(</span> &quot;<span style="COLOR: #2a00ff">foo.xml&quot;</span><span style="COLOR: black">);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">document.write(out);</span></span></div>
<br />            <div align="left">&nbsp;</div>
<br />            </td>
<br />        </tr>
<br />    </tbody>
<br /></table>
<br /><pre>&nbsp;<span style="FONT-SIZE: 10.5pt; COLOR: windowtext">如果你想改变输出的格式，比如美化输出或缩减格式，可以用</span><span style="FONT-SIZE: 10.5pt; COLOR: windowtext">XMLWriter</span><span style="FONT-SIZE: 10.5pt; COLOR: windowtext">类</span></pre>
<br /><table cellspacing="0" border="1" bordercolor="#000000" cellpadding="0">
<br />    <tbody>
<br />        <tr>
<br />            <td bgcolor="#eaeaea" valign="top" width="528">
<br />            <pre>&nbsp;</pre>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <strong><span style="COLOR: #7f0055">public</span></strong> <strong><span style="COLOR: #7f0055">void</span></strong> <span style="COLOR: black">write(Document</span> <span style="COLOR: black">document)</span> <strong><span style="COLOR: #7f0055">throws</span></strong> <span style="COLOR: black">IOException</span> <span style="COLOR: black">{</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #3f7f5f">// </span></span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">指定文件</span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">XMLWriter</span> <span style="COLOR: black">writer</span> <span style="COLOR: black">=</span> <strong><span style="COLOR: #7f0055">new</span></strong> <span style="COLOR: black">XMLWriter(</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong><span style="COLOR: #7f0055">new</span></strong> <span style="COLOR: black">FileWriter(</span> &quot;<span style="COLOR: #2a00ff">output.xml&quot;</span> <span style="COLOR: black">)</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">writer.write(</span> <span style="COLOR: black">document</span> <span style="COLOR: black">);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">writer.close();</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #3f7f5f">// </span></span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">美化格式</span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">OutputFormat</span> <span style="COLOR: black">format</span> <span style="COLOR: black">=</span> <span style="COLOR: black">OutputFormat.createPrettyPrint();</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">writer</span> <span style="COLOR: black">=</span> <strong><span style="COLOR: #7f0055">new</span></strong> <span style="COLOR: black">XMLWriter(</span> <span style="COLOR: black">System.out,</span> <span style="COLOR: black">format</span> <span style="COLOR: black">);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">writer.write(</span> <span style="COLOR: black">document</span> <span style="COLOR: black">);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: #3f7f5f">// </span></span><span style="FONT-SIZE: 10pt; COLOR: #3f7f5f">缩减格式</span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">format</span> <span style="COLOR: black">=</span> <span style="COLOR: black">OutputFormat.createCompactFormat();</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">writer</span> <span style="COLOR: black">=</span> <strong><span style="COLOR: #7f0055">new</span></strong> <span style="COLOR: black">XMLWriter(</span> <span style="COLOR: black">System.out,</span> <span style="COLOR: black">format</span> <span style="COLOR: black">);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="COLOR: black">writer.write(</span> <span style="COLOR: black">document</span> <span style="COLOR: black">);</span></span></div>
<br />            <div align="left"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp; <span style="COLOR: black">}</span></span></div>
<br />            <div align="left">&nbsp;</div>
<br />            </td>
<br />        </tr>
<br />    </tbody>
<br /></table>
<br /></div></p></td></tr></table>
    <br/>
    
    
        <br/><br/>
    <span style="color:red;"><a href="
    
   
    http://yuping.javaeye.com/blog/115336
    
" style="color:red;">《  xml文件解析-DOM4J  》 的评论也很精彩，欢迎您也添加评论。查看详细 >></a></span>


    <br/><br/>
    
    
     
    <br/><br/><br/><br/>

         
                           
            <span style="color:#E28822;">JavaEye推荐</span><br/>
            <a href="http://www.javaeye.com/topic/113150" target="_blank" >上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师</a><br/>
            <a href="http://ad.cn.doubleclick.net/clk;119879986;18083637;h?http://www.ibm.com/developerworks/cn/downloads/?S_TACT=105AGX52&S_CMP=dta-jeye" target="_blank" >免费下载IBM社区版软件--它基于开放的标准，支持广泛的开发类型，让您的开发高效自主！</a><br/>
            <a href="http://www.soa2007.org/soainaction/?referer=javaeye&utm_campaign=soainaction&utm_source=javaeye&utm_medium=hplks" target="_blank" >京沪穗蓉四地免费注册，SOA技术高手汇聚交锋.</a><br/>
            
            
            <a href="http://www.JavaEye.com/topic/101933" >上海：优秀公司德比：高薪诚聘 资深Java工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92740" > 广州：优易公司：诚聘Java工程师，开发经理  </a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92797" >上海：尤恩斯国际集团：诚聘开发工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/69984" >北京：优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA</a><br/>
                           
        
    
    <br/><br/>
    <br>文章来源:<a href='

   
    http://yuping.javaeye.com/blog/115336
    

'>

   
    http://yuping.javaeye.com/blog/115336
    

</a><img src ="http://www.blogjava.net/yuping322/aggbug/139620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuping322/" target="_blank">fengzhi</a> 2007-08-22 18:10 <a href="http://www.blogjava.net/yuping322/archive/2007/08/22/139620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]Java中类与类的关系</title><link>http://www.blogjava.net/yuping322/archive/2007/08/21/139621.html</link><dc:creator>fengzhi</dc:creator><author>fengzhi</author><pubDate>Tue, 21 Aug 2007 15:00:00 GMT</pubDate><guid>http://www.blogjava.net/yuping322/archive/2007/08/21/139621.html</guid><wfw:comment>http://www.blogjava.net/yuping322/comments/139621.html</wfw:comment><comments>http://www.blogjava.net/yuping322/archive/2007/08/21/139621.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuping322/comments/commentRss/139621.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuping322/services/trackbacks/139621.html</trackback:ping><description><![CDATA[
<br/>



网站：<a href="http://www.JavaEye.com">JavaEye</a>  作者：<a href="http://yuping.JavaEye.com/">yuping322</a> 
发表时间: 2007-08-21 23:00  此文章来自于 <a href="http://www.JavaEye.com">http://www.JavaEye.com</a> 

 

   
<br/>声明：本文系JavaEye网站原创文章，未经JavaEye网站或者作者本人书面许可，任何其他网站严禁擅自发表本文，否则必将追究法律责任！<br/>


原文链接：<a href="
    
   
    http://yuping.javaeye.com/blog/115876
    
" style="color:red;">
    
   
    http://yuping.javaeye.com/blog/115876
    
</a><br/><br/>
 
    
    <table width="100%"><tr><td><p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><font face="Times New Roman" size="3">yaogao@gmail.com</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">类与类之间存在以下关系：</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">1、</font><span style="FONT: 7pt &quot;Times New Roman&quot;"> </span></font></span></span></strong><strong style="mso-bidi-font-weight: normal"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">泛化</span><span lang="EN-US"><font face="Times New Roman">(Generalization)<o:p></o:p></font></span></font></strong></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">很简单，就是我们常说的继承。是说子类获得父类的功能的同时，还可以扩展自己的功能。</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如图</span><span lang="EN-US"><font face="Times New Roman">:</font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><font size="3"><span lang="EN-US"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/fantian830211/265334/o_Generalization.jpg" alt="" /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">Java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码中表现为：</span><span lang="EN-US"><font face="Times New Roman">extends </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang="EN-US"><font face="Times New Roman"> implements</font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">2、</font><span style="FONT: 7pt &quot;Times New Roman&quot;"> </span></font></span></span></strong><strong style="mso-bidi-font-weight: normal"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">依赖</span><span lang="EN-US"><font face="Times New Roman">(Dependency)<o:p></o:p></font></span></font></strong></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">两个相对独立的咚咚</span><span lang="EN-US"><font face="Times New Roman">(A</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang="EN-US"><font face="Times New Roman">B)</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，当</span><span lang="EN-US"><font face="Times New Roman">A</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">负责构造</span><span lang="EN-US"><font face="Times New Roman">B</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">时，</span><span lang="EN-US"><font face="Times New Roman">A</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">与</span><span lang="EN-US"><font face="Times New Roman">B</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">形成依赖关系，即</span><span lang="EN-US"><font face="Times New Roman">A</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用</span><span lang="EN-US"><font face="Times New Roman">B</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">如图：</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/fantian830211/265334/o_Dependency.jpg" alt="" /></span></p><p class="MsoNormal" align="center" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-ALIGN: center"><span lang="EN-US"><v:shape type="#_x0000_t75" id="_x0000_i1026" style="WIDTH: 378pt; HEIGHT: 81.75pt"><v:imagedata src="file:///D:\DOCUME~1\Yaogao\LOCALS~1\Temp\msohtml1\01\clip_image003.wmz" o:title="Dependency"><font size="3"></font></v:imagedata></v:shape></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">Java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码中的表现为局部变量，方法的参数，以及对静态方法的调用</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">3、</font><span style="FONT: 7pt &quot;Times New Roman&quot;"> </span></font></span></span></strong><strong style="mso-bidi-font-weight: normal"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关联</span><span lang="EN-US"><font face="Times New Roman">(Association)<o:p></o:p></font></span></font></strong></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US"><span style="mso-spacerun: yes"><font face="Times New Roman">&nbsp;&nbsp; </font></span></span></strong><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">两个相对独立的咚咚</span><span lang="EN-US"><font face="Times New Roman">(A</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span><span lang="EN-US"><font face="Times New Roman">B)</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，当</span><span lang="EN-US"><font face="Times New Roman">A</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象持有</span><span lang="EN-US"><font face="Times New Roman">B</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象的时候，形成<strong style="mso-bidi-font-weight: normal">关联</strong>关系。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于分为有两种特殊的形式，<strong style="mso-bidi-font-weight: normal">聚合（</strong></span><strong style="mso-bidi-font-weight: normal"><span lang="EN-US"><font face="Times New Roman">Aggregation</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span></strong><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和<strong style="mso-bidi-font-weight: normal">组合（</strong></span><strong style="mso-bidi-font-weight: normal"><span lang="EN-US"><font face="Times New Roman">Composition</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span></strong><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，聚合和组合只有概念上的区别，在</span><span lang="EN-US"><font face="Times New Roman">Java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的代码实现上没有区别。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">聚合：指的是整体与部分的关系，如图：</font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/fantian830211/265334/o_Aggregation.jpg" alt="" /></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">组合：表示类之间整体和部分的关系，但是组合关系中部分和整体具有统一的生存期</span><span lang="EN-US"><font face="Times New Roman">,</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">即整体对象不存在，部分对象也将不存在，如图：</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><font size="3"><span lang="EN-US"><font face="Times New Roman"><img src="http://p.blog.csdn.net/images/p_blog_csdn_net/fantian830211/265334/o_Composition.jpg" alt="" /></font></span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt"><font size="3"><span lang="EN-US"><font face="Times New Roman">Java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码中，表现为成员变量。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore"><font face="Times New Roman"><font size="3">4、</font><span style="FONT: 7pt &quot;Times New Roman&quot;"> </span></font></span></span></strong><strong style="mso-bidi-font-weight: normal"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">总结</span><span lang="EN-US"><o:p></o:p></span></font></strong></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span><span lang="EN-US"><font face="Times New Roman">Java</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，应该尽量优先使用<strong style="mso-bidi-font-weight: normal">组合</strong>，而不是<strong style="mso-bidi-font-weight: normal">继承</strong>，因为<strong style="mso-bidi-font-weight: normal">继承</strong>会使得类关系过于复杂化，破坏了封装性，使用<strong style="mso-bidi-font-weight: normal">组合</strong>一样可以获得已有类的功能，而且会使新类更加稳固。</span></font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><font size="3"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">实际上，从<strong style="mso-bidi-font-weight: normal">依赖</strong></span><strong style="mso-bidi-font-weight: normal"><span lang="EN-US"><font face="Times New Roman"> -----</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">〉聚合</span><span lang="EN-US"><font face="Times New Roman">--------</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">〉组合，</span></strong><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类与类之间的关系更加紧密，互相之间的影响越来越大，其实我们平常比较少去区分这些关系，而且事实上这东西的定义不太好理解，所以肯定会导致认识上的偏差，所以我们使用这些东西的时候，尽量靠近大家都认同的做法，这样容易让别人理解。</span></font></p>&nbsp;<br><br><p id="TBPingURL"></p></td></tr></table>
    <br/>
    
    
        <br/><br/>
    <span style="color:red;"><a href="
    
   
    http://yuping.javaeye.com/blog/115876
    
" style="color:red;">《 Java中类与类的关系 》 的评论也很精彩，欢迎您也添加评论。查看详细 >></a></span>


    <br/><br/>
    
    
     
    <br/><br/><br/><br/>

         
                           
            <span style="color:#E28822;">JavaEye推荐</span><br/>
            <a href="http://www.javaeye.com/topic/113150" target="_blank" >上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师</a><br/>
            <a href="http://ad.cn.doubleclick.net/clk;119879986;18083637;h?http://www.ibm.com/developerworks/cn/downloads/?S_TACT=105AGX52&S_CMP=dta-jeye" target="_blank" >免费下载IBM社区版软件--它基于开放的标准，支持广泛的开发类型，让您的开发高效自主！</a><br/>
            <a href="http://www.soa2007.org/soainaction/?referer=javaeye&utm_campaign=soainaction&utm_source=javaeye&utm_medium=hplks" target="_blank" >京沪穗蓉四地免费注册，SOA技术高手汇聚交锋.</a><br/>
            
            
            <a href="http://www.JavaEye.com/topic/101933" >上海：优秀公司德比：高薪诚聘 资深Java工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92740" > 广州：优易公司：诚聘Java工程师，开发经理  </a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92797" >上海：尤恩斯国际集团：诚聘开发工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/69984" >北京：优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA</a><br/>
                           
        
    
    <br/><br/>
    <br>文章来源:<a href='

   
    http://yuping.javaeye.com/blog/115876
    

'>

   
    http://yuping.javaeye.com/blog/115876
    

</a><img src ="http://www.blogjava.net/yuping322/aggbug/139621.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuping322/" target="_blank">fengzhi</a> 2007-08-21 23:00 <a href="http://www.blogjava.net/yuping322/archive/2007/08/21/139621.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]OSGI学习</title><link>http://www.blogjava.net/yuping322/archive/2007/08/20/139622.html</link><dc:creator>fengzhi</dc:creator><author>fengzhi</author><pubDate>Mon, 20 Aug 2007 06:25:00 GMT</pubDate><guid>http://www.blogjava.net/yuping322/archive/2007/08/20/139622.html</guid><wfw:comment>http://www.blogjava.net/yuping322/comments/139622.html</wfw:comment><comments>http://www.blogjava.net/yuping322/archive/2007/08/20/139622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuping322/comments/commentRss/139622.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuping322/services/trackbacks/139622.html</trackback:ping><description><![CDATA[
<br/>



网站：<a href="http://www.JavaEye.com">JavaEye</a>  作者：<a href="http://yuping.JavaEye.com/">yuping322</a> 
发表时间: 2007-08-20 14:25  此文章来自于 <a href="http://www.JavaEye.com">http://www.JavaEye.com</a> 

 

   
<br/>声明：本文系JavaEye网站原创文章，未经JavaEye网站或者作者本人书面许可，任何其他网站严禁擅自发表本文，否则必将追究法律责任！<br/>


原文链接：<a href="
    
   
    http://yuping.javaeye.com/blog/115875
    
" style="color:red;">
    
   
    http://yuping.javaeye.com/blog/115875
    
</a><br/><br/>
 
    
    <table width="100%"><tr><td><p><h2><span lang="EN-US"><font face="Arial">OSGI</font></span><span style="font-family: 黑体;">官方网站</span></h2><p><span lang="EN-US"><a href="http://www.osgi.org/">http://www.osgi.org/</a></span></p><h2><span lang="EN-US"><font face="Arial">OSGI</font></span><span style="font-family: 黑体;">组织成员</span></h2><p style="line-height: 13.5pt;"><span lang="EN-US" style="font-size: 9pt; color: rgb(0, 102, 156); font-family: Verdana;">Aplix Corporation</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: Verdana;"> BenQ </span><span lang="EN-US" style="font-size: 9pt; color: rgb(0, 102, 156); font-family: Verdana;">BMW Group</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: Verdana;"> Computer Associates </span><span lang="EN-US" style="font-size: 9pt; color: rgb(0, 102, 156); font-family: Verdana;">Deutsche Telekom AG</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: Verdana;"> Electricit?de France (EDF) </span><span lang="EN-US" style="font-size: 9pt; color: rgb(0, 102, 156); font-family: Verdana;">Ericsson Mobile Platforms AB</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: Verdana;"> Esmertec </span><span lang="EN-US" style="font-size: 9pt; color: rgb(0, 102, 156); font-family: Verdana;">Espial Group, Inc.</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: Verdana;"> ETRI Electronics and Telecommunications Research Institute </span><span lang="EN-US" style="font-size: 9pt; color: rgb(0, 102, 156); font-family: Verdana;">Gatespace Telematics AB</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: Verdana;"> Harman/Becker Automotive Systems GmbH </span><span lang="EN-US" style="font-size: 9pt; color: rgb(0, 102, 156); font-family: Verdana;">Hitachi, Ltd.</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: Verdana;"> IBM Corporation </span><span lang="EN-US" style="font-size: 9pt; color: rgb(0, 102, 156); font-family: Verdana;">Industrial Technology Research Institute</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: Verdana;"> Insignia Solutions </span><span lang="EN-US" style="font-size: 9pt; color: rgb(0, 102, 156); font-family: Verdana;">Intel Corporation</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: Verdana;"> KDDI R&D Laboratories, Inc. </span><span lang="EN-US" style="font-size: 9pt; color: rgb(0, 102, 156); font-family: Verdana;">KT Corporation</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: Verdana;"> Mitsubishi Electric Corporation </span><span lang="EN-US" style="font-size: 9pt; color: rgb(0, 102, 156); font-family: Verdana;">Motorola, Inc.</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: Verdana;"> NEC Corporation </span><span lang="EN-US" style="font-size: 9pt; color: rgb(0, 102, 156); font-family: Verdana;">Nokia Corporation</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: Verdana;"> NTT </span><span lang="EN-US" style="font-size: 9pt; color: rgb(0, 102, 156); font-family: Verdana;">Oracle Corporation</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: Verdana;"> ProSyst Software GmbH </span><span lang="EN-US" style="font-size: 9pt; color: rgb(0, 102, 156); font-family: Verdana;">Robert Bosch Gmbh</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: Verdana;"> Samsung Electronics Co., Ltd. </span><span lang="EN-US" style="font-size: 9pt; color: rgb(0, 102, 156); font-family: Verdana;">Siemens AG</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: Verdana;"> Sprint </span><span lang="EN-US" style="font-size: 9pt; color: rgb(0, 102, 156); font-family: Verdana;">Sun Microsystems, Inc.</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: Verdana;"> Telcordia Technologies, Inc. </span><span lang="EN-US" style="font-size: 9pt; color: rgb(0, 102, 156); font-family: Verdana;">Telefonica I+D</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: Verdana;"> Vodafone Group Services Limited</span></p><h2><span lang="EN-US"><font face="Arial">OSGI</font></span><span style="font-family: 黑体;">的特点</span></h2><p style="text-indent: 21pt;"><span lang="EN-US">1</span><span style="font-family: 宋体;">。</span><strong><span lang="EN-US">JRE</span></strong><strong><span style="font-family: 宋体;">版本无关性</span></strong><span style="font-family: 宋体;">。虽然</span><span lang="EN-US">Java</span><span style="font-family: 宋体;">一直被人们认为是&ldquo;</span><span lang="EN-US">Write Once, Run Anywhere</span><span style="font-family: 宋体;">&rdquo;，但对于许多大型项目并非如此，常常因为不同</span><span lang="EN-US">JRE</span><span style="font-family: 宋体;">之间的一些小差别而花费巨大，被人们戏称为&ldquo;</span><span lang="EN-US">Write Once</span><span style="font-family: 宋体;">，</span><span lang="EN-US">Debug Anywhere</span><span style="font-family: 宋体;">&rdquo;。</span><span lang="EN-US">OSGi</span><span style="font-family: 宋体;">首先希望能消除这种无关性，因此它提供给人们一个比</span><span lang="EN-US">JRE</span><span style="font-family: 宋体;">更稳定的承诺。</span> </p><p style="text-indent: 21pt;"><span lang="EN-US">2</span><span style="font-family: 宋体;">。<strong>嵌入式设备的开发平台</strong>。</span><span lang="EN-US">OSGi</span><span style="font-family: 宋体;">创立之初的方向是瞄准了</span><span lang="EN-US">J2ME</span><span style="font-family: 宋体;">，可以看到委员会成员多数都不是软件企业。倒是</span><span lang="EN-US">Moto</span><span style="font-family: 宋体;">和</span><span lang="EN-US">Nokia</span><span style="font-family: 宋体;">这类企业非常热心。</span> </p><p style="text-indent: 21pt;"><span lang="EN-US">3</span><span style="font-family: 宋体;">。<strong>高于</strong></span><strong><span lang="EN-US">package</span></strong><strong><span style="font-family: 宋体;">的完整的组件形式</span></strong><span style="font-family: 宋体;">，还包括自从有组件开发以来一直困扰人们的组件版本问题。（这个可不是</span><span lang="EN-US">jar</span><span style="font-family: 宋体;">包啊，</span><span lang="EN-US">jar</span><span style="font-family: 宋体;">包只是</span><span lang="EN-US">bundle</span><span style="font-family: 宋体;">的一种实现&shy;方式。）</span> </p><p style="text-indent: 21pt;"><span lang="EN-US">4</span><span style="font-family: 宋体;">。<strong>推迟发生的依赖关系</strong>。当组件</span><span lang="EN-US">A</span><span style="font-family: 宋体;">（例如含有菜单的窗体）依赖于组件</span><span lang="EN-US">B</span><span style="font-family: 宋体;">（例如菜单所表达的一个功能）时，在语言级上必须先有</span><span lang="EN-US">B</span><span style="font-family: 宋体;">再有</span><span lang="EN-US">A</span><span style="font-family: 宋体;">，但显示中往往是先有</span><span lang="EN-US">A</span><span style="font-family: 宋体;">再有&shy;</span><span lang="EN-US">B</span><span style="font-family: 宋体;">，所以</span><span lang="EN-US">OSGi</span><span style="font-family: 宋体;">为它们提供一种运行时后绑定的机制。</span> </p><p style="text-indent: 21pt;"><span lang="EN-US">5</span><span style="font-family: 宋体;">。<strong>新的软件架构</strong>。</span><span lang="EN-US">OSGi</span><span style="font-family: 宋体;">几乎每个成员都是其所在领域的</span><span lang="EN-US">TOP</span><span style="font-family: 宋体;">，这些领域也都是在未来的数十年中软件大行其到的地方，软件商们（比如</span><span lang="EN-US">IBM</span><span style="font-family: 宋体;">）希望这些领域的软&shy;件架构能够统一一些，甚至是组件可以通用。</span><span lang="EN-US"> </span></p><h2><span lang="EN-US"><font face="Arial">OSGi: <a href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=103&tagname=Eclipse" target="_blank">Eclipse</a></font></span><span style="font-family: 黑体;">的根基</span></h2><p style="text-indent: 21pt;"><span lang="EN-US">OSGi</span><span style="font-family: 宋体;">为网络服务提供了一套标准的</span><span lang="EN-US">, </span><span style="font-family: 宋体;">面向组件的规范</span><span lang="EN-US">. </span><span style="font-family: 宋体;">而网络服务又是</span><span lang="EN-US"><a href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=102&tagname=SOA" target="_blank">SOA</a>(Service Oriented Architecture)</span><span style="font-family: 宋体;">的基础</span><span lang="EN-US">. </span><span style="font-family: 宋体;">使用</span><span lang="EN-US">OSGI</span><span style="font-family: 宋体;">平台</span><span lang="EN-US">, </span><span style="font-family: 宋体;">就可以很轻松的管理软件组件的生命周期</span><span lang="EN-US">, </span><span style="font-family: 宋体;">这组件是可以位于网络中的任何设备上</span><span lang="EN-US">, </span><span style="font-family: 宋体;">而且组件可以动态的安装</span><span lang="EN-US">, </span><span style="font-family: 宋体;">加载</span><span lang="EN-US">, </span><span style="font-family: 宋体;">升级和卸载</span><span lang="EN-US">, </span><span style="font-family: 宋体;">而不用终止和重启设备</span><span lang="EN-US">. </span><span style="font-family: 宋体;">这里的组件是指程序库或者是应用程序</span><span lang="EN-US">, </span><span style="font-family: 宋体;">它们又可以动态的使用别的库和程序</span><span lang="EN-US">.</span></p><p style="text-indent: 21pt;"><span style="font-family: 宋体;">其实</span><span lang="EN-US">OSGi</span><span style="font-family: 宋体;">原本是为了解决家庭网络或者嵌入式设备由于本身的限制</span><span lang="EN-US">(CPU, </span><span style="font-family: 宋体;">内存</span><span lang="EN-US">, </span><span style="font-family: 宋体;">带宽等</span><span lang="EN-US">)</span><span style="font-family: 宋体;">而出的一个解决方案</span><span lang="EN-US">, </span><span style="font-family: 宋体;">是一个轻量级的框架</span><span lang="EN-US">. </span><span style="font-family: 宋体;">但现在</span><span lang="EN-US">OSGi</span><span style="font-family: 宋体;">已经远远的超过了它的原来的的功能</span><span lang="EN-US">. OSGi</span><span style="font-family: 宋体;">已经应用于移动通讯</span><span lang="EN-US">, </span><span style="font-family: 宋体;">汽车</span><span lang="EN-US">, </span><span style="font-family: 宋体;">电信</span><span lang="EN-US">, </span><span style="font-family: 宋体;">嵌入设备</span><span lang="EN-US">, PC</span><span style="font-family: 宋体;">桌面和服务器等众多领域</span><span lang="EN-US">. </span><span style="font-family: 宋体;">由于它的开放和简单的风格</span><span lang="EN-US">, </span><span style="font-family: 宋体;">吸引越来越多的著名公司加入</span><span lang="EN-US">, </span><span style="font-family: 宋体;">使</span><span lang="EN-US">OSGi</span><span style="font-family: 宋体;">也愈加强大和开放</span><span lang="EN-US">.</span></p><p style="text-indent: 21pt;"><span style="font-family: 宋体;">我不了解</span><span lang="EN-US">OSGi</span><span style="font-family: 宋体;">在其他领域的应用</span><span lang="EN-US">, </span><span style="font-family: 宋体;">只是由于要使用</span><span lang="EN-US"><a href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=103&tagname=Eclipse" target="_blank">Eclipse</a>, </span><span style="font-family: 宋体;">所以也只对</span><span lang="EN-US">OSGi</span><span style="font-family: 宋体;">在</span><span lang="EN-US">PC</span><span style="font-family: 宋体;">桌面方面的应用做了些熟悉和了解</span><span lang="EN-US">. </span><span style="font-family: 宋体;">和</span><span lang="EN-US">OSGi</span><span style="font-family: 宋体;">一样</span><span lang="EN-US">, <a href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=103&tagname=Eclipse" target="_blank">Eclipse</a></span><span style="font-family: 宋体;">也是个开放的平台</span><span lang="EN-US">, </span><span style="font-family: 宋体;">它的基础就是</span><span lang="EN-US">OSGi</span><span style="font-family: 宋体;">服务平台</span><span lang="EN-US">(Services Platform), </span><span style="font-family: 宋体;">架构在</span><span lang="EN-US">OSGi</span><span style="font-family: 宋体;">上的</span><span lang="EN-US"><a href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=103&tagname=Eclipse" target="_blank">Eclipse</a></span><span style="font-family: 宋体;">具有融合其他应用和组件的能力</span><span lang="EN-US">, </span><span style="font-family: 宋体;">使不同的组件能够运行在一个</span><span lang="EN-US">JVM(Java Virtual Machine)</span><span style="font-family: 宋体;">上</span><span lang="EN-US">, </span><span style="font-family: 宋体;">使它们之间能够协同工作</span><span lang="EN-US">, </span><span style="font-family: 宋体;">占用较少得内存和</span><span lang="EN-US">CPU</span><span style="font-family: 宋体;">时间</span><span lang="EN-US">, </span><span style="font-family: 宋体;">而且能够由平台管理组件的全生命周期的活动</span><span lang="EN-US">, </span><span style="font-family: 宋体;">可以说一切都在控制之中</span><span lang="EN-US">.</span></p><p style="text-indent: 21pt;"><span style="font-family: 宋体;">在</span><span lang="EN-US">OSGi</span><span style="font-family: 宋体;">中</span><span lang="EN-US">, </span><span style="font-family: 宋体;">每个具体的组件都要继承于</span><span lang="EN-US">Bundle, Bundle</span><span style="font-family: 宋体;">是个接口</span><span lang="EN-US">, </span><span style="font-family: 宋体;">定义了安装</span><span lang="EN-US">, </span><span style="font-family: 宋体;">升级</span><span lang="EN-US">, </span><span style="font-family: 宋体;">卸载</span><span lang="EN-US">, </span><span style="font-family: 宋体;">启动</span><span lang="EN-US">, </span><span style="font-family: 宋体;">停止等操作</span><span lang="EN-US">. </span><span style="font-family: 宋体;">其实</span><span lang="EN-US">, </span><span style="font-family: 宋体;">在</span><span lang="EN-US"><a href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=103&tagname=Eclipse" target="_blank">Eclipse</a></span><span style="font-family: 宋体;">中</span><span lang="EN-US">, </span><span style="font-family: 宋体;">插件</span><span lang="EN-US">(</span><span style="font-family: 宋体;">即上面所说的组件</span><span lang="EN-US">)</span><span style="font-family: 宋体;">并不是从</span><span lang="EN-US">Bundle</span><span style="font-family: 宋体;">继承的</span><span lang="EN-US">, </span><span style="font-family: 宋体;">而是从另外一个重要接口</span><span lang="EN-US">BundleActivator</span><span style="font-family: 宋体;">继承的</span><span lang="EN-US">. </span><span style="font-family: 宋体;">后者只有两个接口函数</span><span lang="EN-US">-Start</span><span style="font-family: 宋体;">和</span><span lang="EN-US">Stop. </span><span style="font-family: 宋体;">从它的名称就可以看出</span><span lang="EN-US">, </span><span style="font-family: 宋体;">它其实是一个控制</span><span lang="EN-US">Bundle</span><span style="font-family: 宋体;">的类</span><span lang="EN-US">. </span><span style="font-family: 宋体;">在</span><span lang="EN-US"><a href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=103&tagname=Eclipse" target="_blank">Eclipse</a></span><span style="font-family: 宋体;">中有大量这样的应用</span><span lang="EN-US">, </span><span style="font-family: 宋体;">一个类负责提供接口满足不同的需要</span><span lang="EN-US">, </span><span style="font-family: 宋体;">而有另外一个类负责操作这个类</span><span lang="EN-US">. </span><span style="font-family: 宋体;">比如</span><span lang="EN-US">IWorkbench</span><span style="font-family: 宋体;">和</span><span lang="EN-US">WorkbenchAdvisor, IWorkbenchWindow</span><span style="font-family: 宋体;">和</span><span lang="EN-US">WorkbenchWindowAdvisor</span><span style="font-family: 宋体;">等</span><span lang="EN-US">, </span><span style="font-family: 宋体;">这样可以避免客户直接和核心类打交道</span><span lang="EN-US">, </span><span style="font-family: 宋体;">也减轻了客户的负担。</span></p><p style="text-indent: 21pt;"><span style="font-family: 宋体;">在</span><span lang="EN-US"><a href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=103&tagname=Eclipse" target="_blank">Eclipse</a></span><span style="font-family: 宋体;">中</span><span lang="EN-US">, </span><span style="font-family: 宋体;">组件都是以</span><span lang="EN-US">Plugin</span><span style="font-family: 宋体;">形式存在的</span><span lang="EN-US">, </span><span style="font-family: 宋体;">几乎每个组件都要有一个类实现</span><span lang="EN-US">(</span><span style="font-family: 宋体;">继承</span><span lang="EN-US">)Plugin</span><span style="font-family: 宋体;">类</span><span lang="EN-US">(</span><span style="font-family: 宋体;">也有例外</span><span lang="EN-US">), </span><span style="font-family: 宋体;">一般都是由</span><span lang="EN-US">Plugin</span><span style="font-family: 宋体;">来控制服务的加载和卸载</span><span lang="EN-US">, </span><span style="font-family: 宋体;">因为</span><span lang="EN-US">Plugin</span><span style="font-family: 宋体;">继承于</span><span lang="EN-US">BundleActivor. </span><span style="font-family: 宋体;">除了</span><span lang="EN-US">Bundle, BundleActivor</span><span style="font-family: 宋体;">外</span><span lang="EN-US">, OSGi</span><span style="font-family: 宋体;">也提供了</span><span lang="EN-US">BundleEvent, BundleListner</span><span style="font-family: 宋体;">等接口</span><span lang="EN-US">. </span><span style="font-family: 宋体;">这些比较简单</span><span lang="EN-US">.</span></p><p style="text-indent: 21pt;"><span style="font-family: 宋体;">另外一个重要的接口是</span><span lang="EN-US">BundleContext, </span><span style="font-family: 宋体;">该接口提供了一个</span><span lang="EN-US">Bundle</span><span style="font-family: 宋体;">所需要的上下文环境</span><span lang="EN-US">, </span><span style="font-family: 宋体;">一个</span><span lang="EN-US">Bundle</span><span style="font-family: 宋体;">对应一个</span><span lang="EN-US">BundleContext, </span><span style="font-family: 宋体;">当</span><span lang="EN-US">Bundle</span><span style="font-family: 宋体;">停止</span><span lang="EN-US">(Stop)</span><span style="font-family: 宋体;">时</span><span lang="EN-US">, </span><span style="font-family: 宋体;">它也就销毁了</span><span lang="EN-US">. BundleContext</span><span style="font-family: 宋体;">提供注册服务工厂</span><span lang="EN-US">(ServiceFactory)</span><span style="font-family: 宋体;">的接口</span><span lang="EN-US">, Bundle</span><span style="font-family: 宋体;">可以注册一些服务工厂接口</span><span lang="EN-US">, </span><span style="font-family: 宋体;">这样其他的</span><span lang="EN-US">Bundle</span><span style="font-family: 宋体;">就可以通过实现这些接口达到扩展的目的</span><span lang="EN-US">. </span><span style="font-family: 宋体;">在</span><span lang="EN-US"><a href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=103&tagname=Eclipse" target="_blank">Eclipse</a></span><span style="font-family: 宋体;">中对应的概念是&rdquo;扩展点</span><span lang="EN-US">(IExtensionPoint)</span><span style="font-family: 宋体;">&rdquo;和&rdquo;扩展</span><span lang="EN-US">(IExtension)</span><span style="font-family: 宋体;">&rdquo;</span><span lang="EN-US">. Bundle</span><span style="font-family: 宋体;">之间的交互是非常重要的</span><span lang="EN-US">, </span><span style="font-family: 宋体;">利用这种技术</span><span lang="EN-US">, </span><span style="font-family: 宋体;">就可以将很大的项目分成多个</span><span lang="EN-US">Bundle, </span><span style="font-family: 宋体;">然后搭积木就可以了</span><span lang="EN-US">.</span></p><p style="text-indent: 21pt;"><span lang="EN-US">eclipse 3.0</span><span style="font-family: 宋体;">并没有用</span><span lang="EN-US">OSGI</span><span style="font-family: 宋体;">替换掉原来的</span><span lang="EN-US">PlugIn</span><span style="font-family: 宋体;">机制。它只是做了与标准兼容的工作：给用户提供了一系列的</span><span lang="EN-US">API</span><span style="font-family: 宋体;">来访问，在这个过程中，就必须要做一些改变</span><span lang="EN-US">(</span><span style="font-family: 宋体;">比如</span><span lang="EN-US">plugin registry</span><span style="font-family: 宋体;">和</span><span lang="EN-US">loading</span><span style="font-family: 宋体;">机制</span><span lang="EN-US">)</span><span style="font-family: 宋体;">来同</span><span lang="EN-US">OSGI</span><span style="font-family: 宋体;">标准完全兼容。最初的</span><span lang="EN-US">Plugin</span><span style="font-family: 宋体;">核心只支持静态的扩展，就是说，如果要改变一个已经存在的</span><span lang="EN-US">Plug</span><span style="font-family: 宋体;">就必须重启</span><span lang="EN-US">core,</span><span style="font-family: 宋体;">也就是要退出</span><span lang="EN-US"><a href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=103&tagname=Eclipse" target="_blank">Eclipse</a></span><span style="font-family: 宋体;">并重启。</span></p><p style="text-indent: 21pt;"><span style="font-family: 宋体;">有很多人问</span><span lang="EN-US"><a href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=103&tagname=Eclipse" target="_blank">Eclipse</a></span><span style="font-family: 宋体;">为什么要兼容</span><span lang="EN-US">OSGI</span><span style="font-family: 宋体;">规范而不是其他的规范呢</span><span lang="EN-US">?</span></p><p style="text-indent: 21pt;"><span style="font-family: 宋体;">在</span><span lang="EN-US"><a href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=103&tagname=Eclipse" target="_blank">Eclipse</a></span><span style="font-family: 宋体;">被捐赠出来以前，</span><span lang="EN-US"><a href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=103&tagname=Eclipse" target="_blank">Eclipse</a></span><span style="font-family: 宋体;">由</span><span lang="EN-US">OTI</span><span style="font-family: 宋体;">来开发，其目标是开发一个嵌入式</span><span lang="EN-US">Java</span><span style="font-family: 宋体;">软件的开发平台。互联网上现在仍然由很多的连接指向</span><span lang="EN-US"> Visual Age Micro Edition (VAME). </span><span style="font-family: 宋体;">这也是</span><span lang="EN-US">SWT</span><span style="font-family: 宋体;">被构思的一个原因，他们想将</span><span lang="EN-US">SWT</span><span style="font-family: 宋体;">使用在嵌入式设备中的用户界面。这种渊源关系解释了当时为什么选择</span><span lang="EN-US">OSGI</span><span style="font-family: 宋体;">规范。</span></p><p style="text-indent: 21pt;"><span style="font-family: 宋体;">另外一个原因是除了</span><span lang="EN-US">OSGI</span><span style="font-family: 宋体;">没有其他的规范。</span><span lang="EN-US">OSGI</span><span style="font-family: 宋体;">规范在轻量级服务架构应用方面被广泛的支持。而且</span><span lang="EN-US">OSGI</span><span style="font-family: 宋体;">被好多电信业的知名公司和一些其他行业的知名公司所支持。他们需要使用</span><span lang="EN-US">OSGI</span><span style="font-family: 宋体;">来同</span><span lang="EN-US">Sun</span><span style="font-family: 宋体;">的</span><span lang="EN-US">J2ME</span><span style="font-family: 宋体;">来抗衡。</span></p><h2><span lang="EN-US"><font face="Arial">JSR277</font></span><span style="font-family: 黑体;">和</span><span lang="EN-US"><font face="Arial">JSR291</font></span></h2><p><span lang="EN-US"><a href="http://www.jcp.org/en/jsr/detail?id=291">http://www.jcp.org/en/jsr/detail?id=291</a></span></p><p align="left" style="line-height: normal; text-align: left;"><span lang="EN-US" style="font-size: 12pt; color: rgb(51, 51, 51); font-family: Arial;">Establish a JCP specification for a dynamic component framework supporting existing Java SE environments based on the OSGi dynamic component model specifications. </span></p><p><span style="font-family: 宋体;">由</span><span lang="EN-US" style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: Arial;">Apache Software Foundation</span><span style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: 宋体;">，</span><span lang="EN-US" style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: Arial;">BEA Systems, Inc.</span><span style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: 宋体;">，</span><span lang="EN-US" style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: Arial;">IBM</span><span style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: 宋体;">，</span><span lang="EN-US" style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: Arial;">Intel Corporation</span><span style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: 宋体;">，</span><span lang="EN-US" style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: Arial;">Nokia</span><span style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: 宋体;">，</span><span lang="EN-US" style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: Arial;">Nortel Networks</span><span style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: 宋体;">，</span><span lang="EN-US" style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: Arial;">Peter Kriens</span><span style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: 宋体;">，</span><span lang="EN-US" style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: Arial;">Richard Hall</span><span style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: 宋体;">，</span><span lang="EN-US" style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: Arial;">SAS Institute, Inc</span><span style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: 宋体;">发起。</span><span lang="EN-US" style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: Arial;">IBM</span><span style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: 宋体;">是</span><span lang="EN-US" style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: Arial;">JSR291</span><span style="font-size: 12pt; color: rgb(51, 51, 51); line-height: 150%; font-family: 宋体;">规范的领导者。</span></p><p><span lang="EN-US"><a href="http://www.jcp.org/en/jsr/detail?id=277">http://www.jcp.org/en/jsr/detail?id=277</a></span></p><p align="left" style="line-height: normal; text-align: left;"><span lang="EN-US" style="font-size: 12pt; color: rgb(51, 51, 51); font-family: Arial;">The specification defines a distribution format and a repository for collections of Java code and related resources. It also defines the discovery, loading, and integrity mechanisms at runtime.</span></p><p align="left" style="line-height: normal; text-align: left;"><span lang="EN-US" style="font-size: 12pt; color: rgb(51, 51, 51); font-family: Arial;"><a href="http://www.jcp.org/en/jsr/detail?id=232">http://www.jcp.org/en/jsr/detail?id=232</a></span></p><p align="left" style="line-height: normal; text-align: left;"><span lang="EN-US" style="font-family: Arial;">Create a predictable management environment for mobile devices capable of installing, executing, profiling, updating, and removing Java</span><sup><span lang="EN-US" style="font-size: 7.5pt; color: rgb(51, 51, 51); font-family: Arial;">TM</span></sup><span lang="EN-US" style="font-family: Arial;"> and associated native components in the J2ME</span><sup><span lang="EN-US" style="font-size: 7.5pt; color: rgb(51, 51, 51); font-family: Arial;">TM</span></sup><span lang="EN-US" style="font-family: Arial;"> Connected Device Configuration.</span></p><h2><span style="font-family: 黑体;">有哪些开源的产品实现了</span><span lang="EN-US"><font face="Arial"> OSGI</font></span><span style="font-family: 黑体;">，他们的侧重点是什么</span></h2><p style="text-indent: 21pt;"><span style="font-family: 宋体;">目前有不少公司对</span><span lang="EN-US">OSGi service platform</span><span style="font-family: 宋体;">推出了自己的实现，象</span><span lang="EN-US">ibm</span><span style="font-family: 宋体;">的</span><span lang="EN-US">smf(Service Management Framework,</span><span style="font-family: 宋体;">嗯，多好的名字，在那么多的</span><span lang="EN-US">platform</span><span style="font-family: 宋体;">实现中，我个人最喜欢这个名字，言简意赅</span><span lang="EN-US">)</span><span style="font-family: 宋体;">。</span></p><p style="text-indent: 21pt;"><span style="font-family: 宋体;">德国的</span><span lang="EN-US">ProSyst</span><span style="font-family: 宋体;">公司</span><span lang="EN-US">(http://www.prosyst.com)</span><span style="font-family: 宋体;">是</span><span lang="EN-US">OSGi Alliance</span><span style="font-family: 宋体;">中非常活跃的推动者，看看他们的产品列表吧</span><span lang="EN-US">http://www.prosyst.com/products/osgi.html(</span><span style="font-family: 宋体;">他们甚至提供了</span><span lang="EN-US">kvm + cldc</span><span style="font-family: 宋体;">的</span><span lang="EN-US">OSGi framework)</span></p><p style="text-indent: 21pt;"><span style="font-family: 宋体;">开源的</span><span lang="EN-US">Oscar(http://oscar.objectweb.org/),Knopflerfish(http://www.knopflerfish.org/)</span></p><p style="text-indent: 21pt;"><span style="font-family: 宋体;">对于</span><span lang="EN-US">OSGi</span><span style="font-family: 宋体;">的成功应用，最有名的应该是</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">了，它就是基于</span><span lang="EN-US">OSGi service platform</span><span style="font-family: 宋体;">的产品。还有</span><span lang="EN-US">Apache</span><span style="font-family: 宋体;">，据说</span><span lang="EN-US">OSGi</span><span style="font-family: 宋体;">将被应用于其新一代的</span><span lang="EN-US">build</span><span style="font-family: 宋体;">工具中。这些都是</span><span lang="EN-US">j2se</span><span style="font-family: 宋体;">和</span><span lang="EN-US">j2ee</span><span style="font-family: 宋体;">的应用，而基于</span><span lang="EN-US">j2me</span><span style="font-family: 宋体;">的，手机（对应</span><span lang="EN-US">OSGi Alliance</span><span style="font-family: 宋体;">的</span><span lang="EN-US">MEG</span><span style="font-family: 宋体;">）和车载设备（对应</span><span lang="EN-US">OSGi Alliance</span><span style="font-family: 宋体;">的</span><span lang="EN-US">VEG</span><span style="font-family: 宋体;">）是</span><span lang="EN-US">OSGi</span><span style="font-family: 宋体;">的主要领域，</span><span lang="EN-US">OSGi Alliance</span><span style="font-family: 宋体;">已经有相应的规范，这些领域的应用相信会更加精彩，让我们拭目以待吧。</span></p><h2><span lang="EN-US"><font face="Arial">OSGI </font></span><span style="font-family: 黑体;">与</span><span lang="EN-US"><font face="Arial"> JMX </font></span><span style="font-family: 黑体;">的关系</span></h2><p align="left" style="line-height: normal; text-align: left;"><span lang="EN-US" style="font-size: 12pt; font-family: 宋体;"><a href="http://nettrace.blogspirit.com/archive/2004/04/java-jmx-java-management-extensions.html"><span>JMX</span></a></span><span lang="EN-US" style="font-size: 12pt; font-family: 宋体;"> </span><span style="font-size: 12pt; font-family: 宋体;">与 </span><span lang="EN-US" style="font-size: 12pt; font-family: 宋体;"><a href="http://en.wikipedia.org/wiki/OSGi"><span>OSGi</span></a></span><span lang="EN-US" style="font-size: 12pt; font-family: 宋体;"> </span><span style="font-size: 12pt; font-family: 宋体;">在功能上的许多重迭之处，在国外已经有人讨论过<span lang="EN-US"> (</span>例如 </span><span lang="EN-US" style="font-size: 12pt; font-family: 宋体;"><a href="http://www.manageability.org/blog/stuff/equinox-eclipse-microkernel"><span></span></a><a href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=103&tagname=Eclipse" target="_blank">Eclipse</a> Embeds OSGi Based MicroKernel</span><span lang="EN-US" style="font-size: 12pt; font-family: 宋体;"> </span><span style="font-size: 12pt; font-family: 宋体;">及 </span><span lang="EN-US" style="font-size: 12pt; font-family: 宋体;"><a href="http://www.laurentm.com/10Goto10/archives/eclipse/000116.html"><span>JMX vs. OSGi - The New Flavor of the </span></a><a href="http://gocom.primeton.com/modules/gSpace/about_onetag.php?tagid=103&tagname=Eclipse" target="_blank">Eclipse</a> Runtime</span><span lang="EN-US" style="font-size: 12pt; font-family: 宋体;">)</span><span style="font-size: 12pt; font-family: 宋体;">。不过我认为重点是：</span></p><ol type="1">    <li style="line-height: normal; text-align: left;"><span lang="EN-US" style="font-size: 12pt; font-family: 宋体;">JMX </span><span style="font-size: 12pt; font-family: 宋体;">本来设计的用途就只为了管理，我们不该把他拿来<span lang="EN-US"> (over use) </span>作为开发应用程序的组件<span lang="EN-US"> (</span>那是<span lang="EN-US"> EJB </span>或<span lang="EN-US"> JavaBeans </span>该做的事<span lang="EN-US">)</span>。但<span lang="EN-US"> OSGi </span>却可以<span lang="EN-US">!</span></span><span lang="EN-US" style="font-size: 12pt; font-family: 宋体;"> </span></li>    <li style="line-height: normal; text-align: left;"><span lang="EN-US" style="font-size: 12pt; font-family: 宋体;">JMX </span><span style="font-size: 12pt; font-family: 宋体;">多数用于<span lang="EN-US"> server </span>系统中，而<span lang="EN-US"> OSGi </span>却不限于所开发的应用程序。你可以用它开发<span lang="EN-US"> embedded </span>系统、<span lang="EN-US">desktop </span>程序，甚至是<span lang="EN-US"> server </span>程序。</span><span lang="EN-US" style="font-size: 12pt; font-family: 宋体;"> </span></li></ol><p align="left" style="line-height: normal; text-align: left;"><span lang="EN-US" style="font-size: 12pt; font-family: 宋体;">OSGi </span><span style="font-size: 12pt; font-family: 宋体;">不但提供了与 </span><span lang="EN-US" style="font-size: 12pt; font-family: 宋体;"><a href="http://nettrace.blogspirit.com/archive/2004/04/java-jmx-java-management-extensions.html"><span>JMX</span></a></span><span lang="EN-US" style="font-size: 12pt; font-family: 宋体;"> </span><span style="font-size: 12pt; font-family: 宋体;">相似的容器管理能力，甚至它本身就是一套精密的<span lang="EN-US"> Framework</span>。<span lang="EN-US">OSGi </span>采用<span lang="EN-US">Micro-Kernel </span>的架构，可以提供无限延伸的功能。<span lang="EN-US">OSGi </span>的<span lang="EN-US"> Bundles </span>在线更新功能、以及应用程序之微量内存执行能力，都是开发应用程序的利基。</span></p><p style="text-indent: 21pt;"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">行文至此，又觉得<span lang="EN-US"> OSGi </span>与 </span><span lang="EN-US" style="font-size: 12pt; line-height: 150%; font-family: 宋体;"><a href="http://nettrace.blogspirit.com/archive/2003/09/java-jcajava-connector-architecture.html" target="_new"><span>JCA</span></a></span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体;">、<span lang="EN-US">JNDI </span>都有一些功能重迭及互补之处。只是<span lang="EN-US"> JMX</span>、<span lang="EN-US">JCA</span>、<span lang="EN-US">EJB</span>、<span lang="EN-US">JNDI</span>都经<span lang="EN-US"> JCP </span>标准，都属于<span lang="EN-US"> J2EE </span>家族成员，但<span lang="EN-US"> OSGi </span>过去屈居于<span lang="EN-US"> Embedded System</span>，声名就不若前述标准响亮<span lang="EN-US">...</span>。我觉得这完全是两种思维模式：<span lang="EN-US">J2EE </span>的思维是<span lang="EN-US"> build on large scale</span>，<span lang="EN-US">OSGi </span>的思维是<span lang="EN-US"> build on dynamic scale</span>。<span lang="EN-US">OSGi </span>以小搏大。</span></p><p style="text-indent: 21pt;"><span style="font-family: 宋体;">为什么要用</span><span lang="EN-US">osgi</span><span style="font-family: 宋体;">，我认为主要是因为</span><span lang="EN-US">java</span><span style="font-family: 宋体;">至今没有出现一个方便易用的组件配置模型。过去，</span><span lang="EN-US">JMX</span><span style="font-family: 宋体;">、</span><span lang="EN-US">ClassLoader</span><span style="font-family: 宋体;">、</span><span lang="EN-US">reflect</span><span style="font-family: 宋体;">都似乎可以做这个事情。但是，</span><span lang="EN-US">JMX</span><span style="font-family: 宋体;">太麻烦了，况且原本为</span><span lang="EN-US">J2EE</span><span style="font-family: 宋体;">准备的</span><span lang="EN-US">JMX</span><span style="font-family: 宋体;">，确实不太易用，走专用的协议，需要专门的客户端，需要</span><span lang="EN-US">adapter</span><span style="font-family: 宋体;">来访问等等</span><span lang="EN-US">.... </span></p><p style="text-indent: 21pt;"><span style="font-family: 宋体;">而</span><span lang="EN-US">ClassLoader</span><span style="font-family: 宋体;">，单独用</span><span lang="EN-US">ClassLoader</span><span style="font-family: 宋体;">，需要自己在其上构建一层包装，否则用起来很麻烦。</span><span lang="EN-US">Reflect</span><span style="font-family: 宋体;">的配置方式和</span><span lang="EN-US">ClassLoader</span><span style="font-family: 宋体;">一样的问题</span> <span style="font-family: 宋体;">。</span></p><p style="text-indent: 21pt;"><span style="font-family: 宋体;">但是，所有</span><span lang="EN-US">java</span><span style="font-family: 宋体;">的组件配置方式，包括使用</span><span lang="EN-US">classloader</span><span style="font-family: 宋体;">的</span><span lang="EN-US">osgi</span><span style="font-family: 宋体;">在内共有的一个问题就是，被替换组件的回收时间无法控制。</span><span lang="EN-US"> </span></p><h2><span lang="EN-US"><font face="Arial">OSGI </font></span><span style="font-family: 黑体;">在</span><span lang="EN-US"><font face="Arial"> Server </font></span><span style="font-family: 黑体;">端发挥作用</span></h2><p style="text-indent: 21pt;"><span lang="EN-US">osgi</span><span style="font-family: 宋体;">是对</span><span lang="EN-US">j2se</span><span style="font-family: 宋体;">的增强，可以作为</span><span lang="EN-US">j2ee</span><span style="font-family: 宋体;">的基础。</span><span lang="EN-US">jboss</span><span style="font-family: 宋体;">之所以在</span><span lang="EN-US">jcp</span><span style="font-family: 宋体;">投</span><span lang="EN-US">osgi</span><span style="font-family: 宋体;">的反对票，是因为</span><span lang="EN-US">jboss</span><span style="font-family: 宋体;">的核心（新项目名为</span><span lang="EN-US">microco</span><span style="font-family: 宋体;">&shy;</span><span lang="EN-US">ntainer</span><span style="font-family: 宋体;">）实际上与</span><span lang="EN-US">osgi</span><span style="font-family: 宋体;">做的是同一件事情，都是要实现组件的动态部署和配置，不同的是他们用的是</span><span lang="EN-US">JMX</span><span style="font-family: 宋体;">。</span><span lang="EN-US">Geronimo</span><span style="font-family: 宋体;">选用的是</span><span lang="EN-US">JMX+IoC</span><span style="font-family: 宋体;">这种&shy;方案作为内核。</span><span lang="EN-US">Oracle</span><span style="font-family: 宋体;">的产品也是这种发展方向。所以我认为</span><span lang="EN-US">osgi</span><span style="font-family: 宋体;">可以用作</span><span lang="EN-US">j2ee</span><span style="font-family: 宋体;">应用服务器的内核，与</span><span lang="EN-US">j2ee</span><span style="font-family: 宋体;">标准没有冲突。最好的证明是</span><span lang="EN-US">Equiox</span><span style="font-family: 宋体;">&shy;项目将会</span><span lang="EN-US">release</span><span style="font-family: 宋体;">一个</span><span lang="EN-US">osgi</span><span style="font-family: 宋体;">环境的</span><span lang="EN-US">Web/Servlet Container</span><span style="font-family: 宋体;">。</span></p><p style="text-indent: 21pt;"><span style="font-family: 宋体;">我认为</span><span lang="EN-US">osgi</span><span style="font-family: 宋体;">可以在</span><span lang="EN-US">j2ee</span><span style="font-family: 宋体;">上提供一个支撑平台的解决方案。很多</span><span lang="EN-US">j2ee</span><span style="font-family: 宋体;">容器都是通过自定义</span><span lang="EN-US">classloader</span><span style="font-family: 宋体;">来实现装载的，其实我觉得</span><span lang="EN-US">EJB</span><span style="font-family: 宋体;">的组建模型不过就是</span><span lang="EN-US">classloader</span><span style="font-family: 宋体;">上的噱头。</span></p><p style="text-indent: 21pt;"><span style="font-family: 宋体;">而</span><span lang="EN-US">osgi</span><span style="font-family: 宋体;">则给出了一个完善的</span><span lang="EN-US">classloader</span><span style="font-family: 宋体;">体系，不再象过去，使用</span><span lang="EN-US">j2ee</span><span style="font-family: 宋体;">的标准只见</span><span lang="EN-US">EJB</span><span style="font-family: 宋体;">不见</span><span lang="EN-US">classloader</span><span style="font-family: 宋体;">，于是各个场上自己搞自己的。</span><span lang="EN-US"> JMX</span><span style="font-family: 宋体;">比较起来还是太麻烦了。</span></p><h2><span lang="EN-US"><font face="Arial">OSGI </font></span><span style="font-family: 黑体;">在</span><span lang="EN-US"><font face="Arial"> EOS </font></span><span style="font-family: 黑体;">中的应用</span></h2><p align="left" style="line-height: normal; text-align: left;"><span style="font-size: 12pt; color: rgb(51, 51, 51); font-family: 宋体;">。。。</span></p><p><br /> </p>&nbsp;<br><br><p id="TBPingURL"></p></td></tr></table>
    <br/>
    
    
        <br/><br/>
    <span style="color:red;"><a href="
    
   
    http://yuping.javaeye.com/blog/115875
    
" style="color:red;">《 OSGI学习 》 的评论也很精彩，欢迎您也添加评论。查看详细 >></a></span>


    <br/><br/>
    
    
     
    <br/><br/><br/><br/>

         
                           
            <span style="color:#E28822;">JavaEye推荐</span><br/>
            <a href="http://www.javaeye.com/topic/113150" target="_blank" >上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师</a><br/>
            <a href="http://ad.cn.doubleclick.net/clk;119879986;18083637;h?http://www.ibm.com/developerworks/cn/downloads/?S_TACT=105AGX52&S_CMP=dta-jeye" target="_blank" >免费下载IBM社区版软件--它基于开放的标准，支持广泛的开发类型，让您的开发高效自主！</a><br/>
            <a href="http://www.soa2007.org/soainaction/?referer=javaeye&utm_campaign=soainaction&utm_source=javaeye&utm_medium=hplks" target="_blank" >京沪穗蓉四地免费注册，SOA技术高手汇聚交锋.</a><br/>
            
            
            <a href="http://www.JavaEye.com/topic/101933" >上海：优秀公司德比：高薪诚聘 资深Java工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92740" > 广州：优易公司：诚聘Java工程师，开发经理  </a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92797" >上海：尤恩斯国际集团：诚聘开发工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/69984" >北京：优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA</a><br/>
                           
        
    
    <br/><br/>
    <br>文章来源:<a href='

   
    http://yuping.javaeye.com/blog/115875
    

'>

   
    http://yuping.javaeye.com/blog/115875
    

</a><img src ="http://www.blogjava.net/yuping322/aggbug/139622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuping322/" target="_blank">fengzhi</a> 2007-08-20 14:25 <a href="http://www.blogjava.net/yuping322/archive/2007/08/20/139622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]国内的CMS集合</title><link>http://www.blogjava.net/yuping322/archive/2007/08/14/139623.html</link><dc:creator>fengzhi</dc:creator><author>fengzhi</author><pubDate>Tue, 14 Aug 2007 00:41:00 GMT</pubDate><guid>http://www.blogjava.net/yuping322/archive/2007/08/14/139623.html</guid><wfw:comment>http://www.blogjava.net/yuping322/comments/139623.html</wfw:comment><comments>http://www.blogjava.net/yuping322/archive/2007/08/14/139623.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuping322/comments/commentRss/139623.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuping322/services/trackbacks/139623.html</trackback:ping><description><![CDATA[
<br/>



网站：<a href="http://www.JavaEye.com">JavaEye</a>  作者：<a href="http://yuping.JavaEye.com/">yuping322</a> 
发表时间: 2007-08-14 08:41  此文章来自于 <a href="http://www.JavaEye.com">http://www.JavaEye.com</a> 

 

   
<br/>声明：本文系JavaEye网站原创文章，未经JavaEye网站或者作者本人书面许可，任何其他网站严禁擅自发表本文，否则必将追究法律责任！<br/>


原文链接：<a href="
    
   
    http://yuping.javaeye.com/blog/115847
    
" style="color:red;">
    
   
    http://yuping.javaeye.com/blog/115847
    
</a><br/><br/>
 
    
    <table width="100%"><tr><td><p><div class="t_msgfont"><strong>国内AspCms</strong></div><div class="t_msgfont"><strong></strong><br />淘特:<a href="http://www.totcms.com/" target="_blank"><font color="#800080">http://www.totcms.com </font></a><br />动易:<a href="http://www.powereasy.net/" target="_blank">http://www.powereasy.net</a><br />风讯:<a href="http://www.foosun.net/" target="_blank">http://www.foosun.net</a><br />科汛:<a href="http://www.kesion.com/" target="_blank">http://www.kesion.com</a><br />新云:<a href="http://www.newasp.net/" target="_blank">http://www.newasp.net/</a><br />乔客:<a href="http://www.joekoe.com/" target="_blank">http://www.joekoe.com</a><br />渐飞:<a href="http://www.xunt.net/" target="_blank"><font color="#800080">http://www.xunt.net/</font></a></div><div class="t_msgfont"><br /><strong>国内PhpCms</strong></div><strong></strong><div class="t_msgfont"><br />帝国:<a href="http://www.phome.net/" target="_blank">http://www.phome.net/</a><br />dede:<a href="http://www.dedecms.com/" target="_blank">http://www.dedecms.com/</a><br />hbcms:<a href="http://www.hbcms.com/" target="_blank">http://www.hbcms.com/</a><br />phpcms:<a href="http://www.phpcms.cn/" target="_blank"><font color="#800080">http://www.phpcms.cn/</font></a><br />CMSware:<a href="http://www.cmsware.com/" target="_blank"><font color="#800080">http://www.cmsware.com/</font></a><br />VeryCMS:<a href="http://www.phpwind.com/" target="_blank"><font color="#800080">http://www.phpwind.com/</font></a></div><div class="t_msgfont"><br /><strong>国内JspCms</strong> </div><div class="t_msgfont"><br />淘特:<a href="http://www.totcms.com/" target="_blank"><font color="#800080">http://www.totcms.com</font></a></div><div class="t_msgfont"><br /><strong>国内.NetCms</strong></div><div class="t_msgfont"><br />iwms:<a href="http://www.xmlasp.net/" target="_blank"><font color="#800080">http://www.xmlasp.net/</font></a>&nbsp;</div><br><br><p id="TBPingURL"></p></td></tr></table>
    <br/>
    
    
        <br/><br/>
    <span style="color:red;"><a href="
    
   
    http://yuping.javaeye.com/blog/115847
    
" style="color:red;">《 国内的CMS集合 》 的评论也很精彩，欢迎您也添加评论。查看详细 >></a></span>


    <br/><br/>
    
    
     
    <br/><br/><br/><br/>

         
                           
            <span style="color:#E28822;">JavaEye推荐</span><br/>
            <a href="http://www.javaeye.com/topic/113150" target="_blank" >上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师</a><br/>
            <a href="http://ad.cn.doubleclick.net/clk;119879986;18083637;h?http://www.ibm.com/developerworks/cn/downloads/?S_TACT=105AGX52&S_CMP=dta-jeye" target="_blank" >免费下载IBM社区版软件--它基于开放的标准，支持广泛的开发类型，让您的开发高效自主！</a><br/>
            <a href="http://www.soa2007.org/soainaction/?referer=javaeye&utm_campaign=soainaction&utm_source=javaeye&utm_medium=hplks" target="_blank" >京沪穗蓉四地免费注册，SOA技术高手汇聚交锋.</a><br/>
            
            
            <a href="http://www.JavaEye.com/topic/101933" >上海：优秀公司德比：高薪诚聘 资深Java工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92740" > 广州：优易公司：诚聘Java工程师，开发经理  </a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92797" >上海：尤恩斯国际集团：诚聘开发工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/69984" >北京：优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA</a><br/>
                           
        
    
    <br/><br/>
    <br>文章来源:<a href='

   
    http://yuping.javaeye.com/blog/115847
    

'>

   
    http://yuping.javaeye.com/blog/115847
    

</a><img src ="http://www.blogjava.net/yuping322/aggbug/139623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuping322/" target="_blank">fengzhi</a> 2007-08-14 08:41 <a href="http://www.blogjava.net/yuping322/archive/2007/08/14/139623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]关于外包</title><link>http://www.blogjava.net/yuping322/archive/2007/08/07/139624.html</link><dc:creator>fengzhi</dc:creator><author>fengzhi</author><pubDate>Tue, 07 Aug 2007 14:57:00 GMT</pubDate><guid>http://www.blogjava.net/yuping322/archive/2007/08/07/139624.html</guid><wfw:comment>http://www.blogjava.net/yuping322/comments/139624.html</wfw:comment><comments>http://www.blogjava.net/yuping322/archive/2007/08/07/139624.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yuping322/comments/commentRss/139624.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yuping322/services/trackbacks/139624.html</trackback:ping><description><![CDATA[
<br/>



网站：<a href="http://www.JavaEye.com">JavaEye</a>  作者：<a href="http://yuping.JavaEye.com/">yuping322</a> 
发表时间: 2007-08-07 22:57  此文章来自于 <a href="http://www.JavaEye.com">http://www.JavaEye.com</a> 

 

   
<br/>声明：本文系JavaEye网站原创文章，未经JavaEye网站或者作者本人书面许可，任何其他网站严禁擅自发表本文，否则必将追究法律责任！<br/>


原文链接：<a href="
    
   
    http://yuping.javaeye.com/blog/115880
    
" style="color:red;">
    
   
    http://yuping.javaeye.com/blog/115880
    
</a><br/><br/>
 
    
    <table width="100%"><tr><td><p>&nbsp;&nbsp;<div style="TEXT-INDENT: 21pt">毕业的时候什么都不懂，所以找工作的时候胡乱找了一个，现在终于明白了，我从事的行业是对日外包，这个让我痛苦了很久，一直都想逃跑，不过现在看起来不太现实了，看来有的东西比如命运我们自己没有办法控制，那就这样吧。</div><div style="TEXT-INDENT: 21.75pt">两年多的工作经历，终于对这个行业有一点点的认识，其实真的是什么都不懂，在如今房价飞涨，很多和我一样的凡人，都在为一口饭和一个窝奔波烦恼，真的有时候我们容易在繁忙和压力下迷失自己，停下来想想也是非常重要的。</div><div style="TEXT-INDENT: 21.75pt">最近去日本出差回来，休息了几天，想到了很多关于工作的问题，总结了一下，与和我一样在人世间忙碌的凡人共勉。</div><div style="TEXT-INDENT: 21.75pt">关于对日外包，见过很多形式，从最低级的纯体力劳动到需求分析，这些都有，而且我想现在的发展趋势是外包方参与的程度会越来越大，对于从事这个行业的人来讲，我感觉注意一下三点非常有必要：</div><div style="MARGIN-LEFT: 39.75pt; TEXT-INDENT: -18pt"><span>1．&nbsp;</span>外语</div><div style="MARGIN-LEFT: 39.75pt">日语当然很重要，因为要和客户讨论各种各样的问题。</div><div style="MARGIN-LEFT: 39.75pt">但是有一个很明显的问题，在国内即使考过去国际一级，也未必能和他们没有障碍地交流，所以和他们交流的机会非常重要。</div><div style="MARGIN-LEFT: 39.75pt">我们很多时候做的项目都是国际化的项目，所以英语也很重要。</div><div style="MARGIN-LEFT: 39.75pt">往往是注重技术的人不喜欢外语，不过从我们挣钱的角度来说，学吧！</div><div style="MARGIN-LEFT: 39.75pt; TEXT-INDENT: -18pt"><span>2．&nbsp;</span>行业经验</div><div style="MARGIN-LEFT: 39.75pt">对于一些公司来讲，都有一个稳定的团队针对固定的业务，所以时间长了就能够积累对这个业务的经验，这次就非常有感触，如果没有相关的业务背景，很多东西根本没有办法看懂。</div><div style="MARGIN-LEFT: 39.75pt; TEXT-INDENT: -18pt"><span>3．&nbsp;</span>技术能力</div><div style="MARGIN-LEFT: 39.75pt">技术能力当然是我们的根本，即使对于我们个人来讲，这个是我们吃饭的工具，而且我感觉不管什么时候，对于公司都应该&ldquo;卖艺不卖身&rdquo;。 </div><div style="MARGIN-LEFT: 21.75pt">其实这三者缺一不可，哪个方面强都会产生&rdquo;木桶效应&rdquo;。不过很多公司现在不怎么注重人的培养，还是以廉价的劳动力从事低级的开发活动来挣钱，人员的流失严重，可能是受到中国现在的大环境的影响，没有什么长远的意识，或者有却没有办法去做。</div><div style="MARGIN-LEFT: 21.75pt">&nbsp;</div><div style="TEXT-INDENT: 21pt">这次出差参与了很多从来没有参与过的过程，发现自己能力和资历都很低，当然这些需要时间，加油吧！</div><br><br><p id="TBPingURL"></p></td></tr></table>
    <br/>
    
    
        <br/><br/>
    <span style="color:red;"><a href="
    
   
    http://yuping.javaeye.com/blog/115880
    
" style="color:red;">《 关于外包 》 的评论也很精彩，欢迎您也添加评论。查看详细 >></a></span>


    <br/><br/>
    
    
     
    <br/><br/><br/><br/>

         
                           
            <span style="color:#E28822;">JavaEye推荐</span><br/>
            <a href="http://www.javaeye.com/topic/113150" target="_blank" >上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师</a><br/>
            <a href="http://ad.cn.doubleclick.net/clk;119879986;18083637;h?http://www.ibm.com/developerworks/cn/downloads/?S_TACT=105AGX52&S_CMP=dta-jeye" target="_blank" >免费下载IBM社区版软件--它基于开放的标准，支持广泛的开发类型，让您的开发高效自主！</a><br/>
            <a href="http://www.soa2007.org/soainaction/?referer=javaeye&utm_campaign=soainaction&utm_source=javaeye&utm_medium=hplks" target="_blank" >京沪穗蓉四地免费注册，SOA技术高手汇聚交锋.</a><br/>
            
            
            <a href="http://www.JavaEye.com/topic/101933" >上海：优秀公司德比：高薪诚聘 资深Java工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92740" > 广州：优易公司：诚聘Java工程师，开发经理  </a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/92797" >上海：尤恩斯国际集团：诚聘开发工程师</a><br/>
                           
        
            
            <a href="http://www.JavaEye.com/topic/69984" >北京：优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA</a><br/>
                           
        
    
    <br/><br/>
    <br>文章来源:<a href='

   
    http://yuping.javaeye.com/blog/115880
    

'>

   
    http://yuping.javaeye.com/blog/115880
    

</a><img src ="http://www.blogjava.net/yuping322/aggbug/139624.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuping322/" target="_blank">fengzhi</a> 2007-08-07 22:57 <a href="http://www.blogjava.net/yuping322/archive/2007/08/07/139624.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>