yuping322

 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与

留言簿(2)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔档案

  • 2007年8月 (10)

搜索

  •  

最新评论

阅读排行榜

  • 1. [导入] xml文件解析-DOM4J (534)
  • 2. [导入]ext 学习笔记(471)
  • 3. [导入]OSGI学习(386)
  • 4. [导入]Java中类与类的关系(377)
  • 5. [导入]信息采集系统的技术实现(366)

评论排行榜

  • 1. [导入]信息采集系统的技术实现(0)
  • 2. [导入]行业搜索、垂直搜索(0)
  • 3. [导入]Web数据挖掘(0)
  • 4. [导入]ext 学习笔记(0)
  • 5. [导入]掌握JDK1.5枚举类型(0)

Powered by: 博客园
模板提供:沪江博客
BlogJava | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理

2007年8月21日

[导入]信息采集系统的技术实现

网站:JavaEye 作者:yuping322 发表时间: 2007-08-24 20:26 此文章来自于 http://www.JavaEye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接: http://yuping.javaeye.com/blog/116248

信息采集系统的技术实现


        信息采集系统指的是按标准格式采集指定网络信息,同搜索引擎的区别在于其采集的目的性更强,采集源范围也比较小。这里简单介绍一下信息采集系统实现上的几个关键问题:


1) 采集网页数据

        VC,Java,VB的网络通讯功能都足够实现信息采集,VC中的Get/Post方式可采集网页信息,也可以直接用socket方式采集,但一般用前一种模式,另外为了提高采集效率都采用多线程技术,在网上的一些Spider程序都是多线程的,可以借鉴.


2) 如何按关键字来信息

        信息采集的一大特点是按多个关键字将信息拆分出来,例如供求信息中的商机标题、联系人、电话、Email、内容等,实现时需要事先定义好这些关键字,然后在网页中搜索,将夹在两个关键字当中的信息采集出来,另外还要注意,网页中的许多关键字是包含空格的,空格数量也不能确定,例如"邮   件",这就要求在查找关键字时要把关键字按单个汉字拆开来匹配,遇到中间的空格要跳过去.这一步实现了,信息就会变的非常有规则,也就可以导入本地库了.


3) 网页中的链结获取算法

        了解HTML的应该清楚,网页中的链结都是通过的标签定义的,但也会分很多情况,例如:  < a href = "...">  这是常见的链结格式,但要注意采集出来的链结可能是完整的http://...,也可能是相对路径,要分别处理;  < a href = ''> 用单引号分隔的,所以用算法获取链结的时候要根据双引号和单引号两种标记来分隔;< a href = .. onclick = javascript:view('..','')> 通过javascript的函数处理链结,算法上就麻烦了许多。


4) 无效数据的过滤

        即使通过关键字的方式摒弃了许多广告信息,但在关键字信息中也会有不少无效数据,包括一些信息开头的空格


5) 特定数据的获取算法

        Email,电话等数据符合一定的规范,一般可以用一些算法提取出来,也可以用正则表达式技术来获取,在网络上有不少此类算法.在信息采集中,Email和电话等关键信息是比较分散的,需要用提取算法把这些信息提取出来放在正确的位置.这是非常有必要的,因为信息采集系统往往会有邮件群发的功能.


信息采集的整个流程可总结如下:


 a) 首先,获取网页的完整信息

 b) 用算法获取网页中的正文信息,即抛弃HTML的标签文本

 c) 去除多余的空行

 d) 按定义好的关键字将信息分隔开

 e) 对信息进行无效数据过滤

 f) 信息入本地库

 g) 获取网页中的链结,对该链结从a)步骤开始重复,但注意网页中的许多链结是广告或无效的,因此要事先定义好一些链结关键字,只有包含关键字的链结才处理




《 信息采集系统的技术实现 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>





JavaEye推荐
上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师
免费下载IBM社区版软件--它基于开放的标准,支持广泛的开发类型,让您的开发高效自主!
京沪穗蓉四地免费注册,SOA技术高手汇聚交锋.
上海:优秀公司德比:高薪诚聘 资深Java工程师
广州:优易公司:诚聘Java工程师,开发经理
上海:尤恩斯国际集团:诚聘开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA



文章来源: http://yuping.javaeye.com/blog/116248
posted @ 2007-08-24 20:26 fengzhi 阅读(366) | 评论 (0) | 编辑 收藏
 
[导入]行业搜索、垂直搜索

网站:JavaEye 作者:yuping322 发表时间: 2007-08-24 20:05 此文章来自于 http://www.JavaEye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接: http://yuping.javaeye.com/blog/116244

行业搜索、垂直搜索引擎。


行业搜索:搜索对象针对所在的行业,采用类似传统通用搜索引擎的分词索引技术,返回关键词最匹配的结果。


垂直搜索:搜索对象针对所在的行业,采用数据采集、数据挖掘、数据整理等技术,返回经过加工处理的结果。


一、综合搜索


酷讯www.kooxoo.com :招聘、房产、汽车、火车票、机票、餐饮、交友、购物、旅游


奇虎www.qihoo.com :论坛、博客、新闻、招聘、房产、视频、音乐、图片、火车票、餐饮、经验?、折扣


cgogo搜个够www.cgogo.com :社区、招聘、票务、住房、视频、本地(地图)、博客、无线


我酷网 www.wooqoo.com                  (五花八门,该有都有)


开拓搜索www.kaitoo.com                  (五花八门,该有都有)


每步搜索 http://cnc.meibu.com/ (综合)


八百搜www.800so.com (五花八门,该有都有,站内搜索和站外搜索并列)


酷爱 www.koooi.com (网页 MP3 房产 餐饮 交友 搜人 资源)


soso88   www.soso88.net (政府采购 人才职位 房源地产 建材装饰)



二、求职招聘: (18)


职友集   www.jobbui.com


搜职网  www.globehr.com


南京搜职网  www.sozhi.cn


托托搜索 www.totojob.com


1010job精英招聘 www.1010job.com


牛耳搜职网 www.newerjob.com


数字英才(职通车) www.01hr.com


深度搜索 www.deepdo.com


淘职网 www.go2work.com.cn


我搜网 www.alsox.com


校园招聘 www.zhaopinbbs.com


易聘  www.yipin.cc


找工作 www.meijob.com


热职工作引擎 www.rezhi.com


职场快线 www.jobems.com


职脉搜索 www.jobmet.com


高八斗 www.gao8dou.com         区域搜索引擎联合,在各地都有独立一级域名,单一数据库。


安徽人才总网 www.ah668.com/rc/ (安徽区域搜索)





三、房屋房产 (9)


搜房引擎 search.soufun.com


房老大 www.fanglaoda.com


焦点房产seek.focus.cn


家家看网 www.jjto.com


我住网 www.wozhu.com


搜房网 www.sofang.com.cn


寻捕房 www.xpfang.com



房网搜索 www.house163.com


百房 www.100fang.com




四:商务商机、人文 (20)


联络家  http://www.linkist.com/


优库  www.ucloo.com        (搜人 公司 学校 )


Anyso商业搜索引擎  www.anyso.com


accoona  www.accoona.cn


国通网 www.guton.com


享者  www.hengzhe.com


品搜 www.pinsou.com


品通 www.joingoo.com


搜商 www.bseek.cn


商搜 www.shangsou.com


商宝 www.b2b8.com


jow  http://jqw.com/


企业门户 www.yie.cn


搜库网 www.souku.com.cn


伊索  http://china.eceel.com/


天网商搜 http://china.eceel.com/


信援 www.xinsos.com


一呼百应 www.youboy.com


易购搜索 www.ego321.com


浙搜 http://zhesou.com/ (区域性搜索)


五、生活、购物消费 (17)


8848(比较购物)http://esearch.8848.com/


丫丫比较购物 http://askyaya.com/


大拿网(比较购物) http://www.danawa.com.cn/


普加 Pojaa http://www.pojaa.com/




搜狗 http://shopping.sogou.com/


购物搜索www.gobygo.com

中搜
http://shopping.zhongsou.com/


Soaso http://www.soaso.com/


搜评网 http://www.souping.com/


无忧城市网 http://www.51city.com


亿起搜  http://www.eqiso.com/


365.com  www.365.com (生活搜索综合)


快搜测评网 www.ksou.com.cn (IT硬件相关)


搜教网 www.soojoo.cn (教育资源相关)


乐逊外卖搜索 www.lexun.com.cn


友买网 www.uobuy.com


马可波罗 www.makepolo.com/


易购搜索 www.ego321.com



六、地图公交、出行 (15)


公交查询 http://www.8684.cn/


瘦驴旅游搜索引擎  http://www.souluu.com/


E都市 http://www.edushi.com/


Mapabc地图 http://www.mapabc.com/


图吧  http://main.mapbar.com/


UUMAP http://www.uumap.com/


城市通 http://www.52tong.com/


华夏图网 http://www.map2china.com/


都市圈-三维地图 http://www.o.cn/


第1搜 http://www.d1so.com/


都市吧 http://www.city8.com/


活图网 http://www.livemap.cn/


我要地图 http://www.51ditu.com/


丁丁地图 www.ddmap.com


坐车网 http://www1.zuoche.com/ (广州区域搜索)


google、百度、搜狗、MSN虚拟地球http://virtualearth.msn.com/


七、医疗健康


康Q www.kangq.com


Souvv http://search.souvv.com/


医搜 http://www.yiso.cc/


放心医苑网 http://www.120so.com/


博睿  http://search.chinamtcm.com


八、图书搜索


爱搜书网 http://www.isoshu.com/


读秀知识库 http://www.duxiu.com/



九、分类信息


国通网http://www.guton.com



十、手机搜索引擎


悠悠村  http://www.uucun.com/


儒豹手机搜索 http://www.roboo.com/




十一、软件IT、BT资源


迅雷资源搜索 http://so.xunlei.com


BT联盟搜索引擎 http://search.btchina.net/


BT全球搜索 http://bt.it.com.cn/


BT特工 http://bt.souyo.com/


飞客BT搜索 http://bt.fkee.com/


天天BT 电影 http://www.ttbt.cn/


网游搜索 www.37ss.com


FTP搜索引擎 www.tooooold.com



十二、娱乐综合、电影、音乐等


搜刮  http://www.sogua.com/


易搜 http://bt.souyo.com/               (娱乐综合、软件IT、游戏、电影)


狗载社区 http://www.ppgou.com/

OpenV开放视频 http://www.openv.tv/


第九频道 www.tvix.cn


动漫搜索 http://share.greedland.net/


奇客网 http://v.qirss.com/


CCTV视频搜索 http://vsearch.cctv.com/


优酷视频搜索  http://www.youku.com/



十三、电视节目


电视猫  www.tvmao.com


e准 - 电视节目预告 www.ezhun.com


搜视网 http://www.tvsou.com/


我爱电视剧 http://www.5idsj.com/ (剧情搜索)



十四、博客、论坛搜索


贴易 http://search.teein.com/


Souyo http://www.souyo.com/


博狗 http://www.blogool.com/


大旗 http://search.chinabbs.com/


博客查号台  http://www.blog114.com.cn/


博搜 http://www.booso.com/


中文RSS搜索 http://www.booso.com/


名人博客 http://www.starlogs.com/


中国博客网搜索 http://search.blogcn.com/



十五、其它


搜农 www.sounong.net (来自安徽的和农业相关综合搜索引擎)


农搜 www.agrisou.com


性搜 http://www.sinsoo.com/


中国建筑黄页 www.agoo.com.cn


搜网(图片搜索) http://home.souwang.com/


金聚网(游戏搜索) http://www.jj160.com/




游戏网(搜索引擎?)http://ks.pcgames.com.cn/


乐虎网(手机图片) http://www.joyhoo.com/


全国驾校搜索 www.jxedt.com

个性搜索       www.deyeb.cn




《 行业搜索、垂直搜索 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>





JavaEye推荐
上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师
免费下载IBM社区版软件--它基于开放的标准,支持广泛的开发类型,让您的开发高效自主!
京沪穗蓉四地免费注册,SOA技术高手汇聚交锋.
上海:优秀公司德比:高薪诚聘 资深Java工程师
广州:优易公司:诚聘Java工程师,开发经理
上海:尤恩斯国际集团:诚聘开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA



文章来源: http://yuping.javaeye.com/blog/116244
posted @ 2007-08-24 20:05 fengzhi 阅读(206) | 评论 (0) | 编辑 收藏
 
[导入]Web数据挖掘

网站:JavaEye 作者:yuping322 发表时间: 2007-08-24 19:52 此文章来自于 http://www.JavaEye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接: http://yuping.javaeye.com/blog/116243

   引言

数据挖掘(Data Mining,DM)是从大量数据中提取或“挖掘”知识,是从存放在数据库、数据仓库或其他信息库中的大量数据中挖掘有趣知识的过程。[1] 随着网络的不断发展,因特网目前已成为一个巨大的、分布广泛的和全球性的信息服务中心。从海量的网络信息中寻找有用的知识,早已成为人们的迫切需求。各种类似Google、Baidu等的搜索引擎也层出不穷,Web数据挖掘的应用在现实中不断体现。

Web数据挖掘建立在对大量的网络数据进行分析的基础上,采用相应的数据挖掘算法,在具体的应用模型上进行数据的提取、数据筛选、数据转换、数据挖掘和模式分析,最后做出归纳性的推理、预测客户的个性化行为以及用户习惯,从而帮助进行决策和管理,减少决策的风险。

Web数据挖掘涉及多个领域,除数据挖掘外,还涉及计算机网络、数据库与数据仓储、人工智能、信息检索、可视化、自然语言理解等技术。


2   Web数据挖掘面临的问题

Web的巨大、分布广泛和内容多样使得目前的Web挖掘面临着众多问题和挑战。首先,对有效的数据仓库和数据挖掘来说,Web上的数据过于庞大。而且,Web上的数据具有极强的动态性,不仅数量增长快而且更新十分迅速。但是面对如此大量的Web上的信息,有调查却表明:99%的Web信息对于99%的用户是无用的。这样看来,面对网络上形形色色各式各样的用户群体,许多由Web搜索引擎所检索到的资料将会被淹没。

另外,由于Web页面缺乏同一的结构,其结构又比任何传统文本文档都要复杂,所以要实现基于Web的数据挖掘和信息检索在目前来说是非常具有挑战性的。


 


3   Web数据挖掘的分类

Web数据挖掘是一项具有挑战性的课题。它实现对Web存取模式,Web结构和规则,以及动态的Web内容的查找。一般来说,Web数据挖掘可分为四类:Web内容挖掘、Web结构挖掘、Web使用记录挖掘和Web用户性质挖掘。其中,Web内容挖掘、Web结构挖掘和Web使用记录挖掘是Web1.0时代就已经有了的,而Web用户性质挖掘则是伴随着Web2.0的出现而出现的。


3.1 Web内容挖掘

Web内容挖掘主要包括文本挖掘和多媒体挖掘两类,其对象包括文本、图像、音频、视频、多媒体和其他各种类型的数据。这些数据一般由非结构化的数据(如文本) 、半结构化的数据(如HTML 文档) 和结构化的数据(如表格) 构成。对非结构化文本进行的Web挖掘,称为文本数据挖掘或文本挖掘,是Web挖掘中比较重要的技术领域。Web挖掘中另一个比较重要的技术领域是Web多媒体数据挖掘。

目前,关于Web内容挖掘的研究大体以Web文本内容挖掘为主。Web内容挖掘一般从资源查找和数据库两个不同的方面进行研究。

从资源查找的方面来看,Web内容挖掘的任务是从用户的角度出发,怎样提高信息质量和帮助用户过滤信息。主要是对非结构化文档和半结构化文档的挖掘。非结构化文档主要指Web上的自由文本,如小说、新闻等。Web上的半结构化文档挖掘指在加入了HTML、超链接等附加结构的信息上进行挖掘,其应用包括超链接文本的分类、聚类、发现文档之间的关系、提出半结构化文档中的模式和规则等。

从数据库的观点进行Web内容挖掘主要是试图建立Web站点的数据模型并加以集成, 以支持复杂查询,而不只是简单的基于关键词的搜索。这要通过找到Web文档的模式、建立Web知识库来实现。

对文本数据进行挖掘的文档分类和模型质量评价方法与传统的数据挖掘方法相类似,分类算法主要应用朴素贝叶斯(Naive Bayes Classifier)。对模型的质量评价主要有分类的正确率(Classification Accuracy)、准确率( Precision)和信息估值( Information Score)。 SAAS

Web多媒体数据挖掘从多媒体数据库中提取隐藏的知识、多媒体数据关联、或者是其他没有直接储存在多媒体数据库中的模式。多媒体数据挖掘包括对图像、视频和声音的挖掘。多媒体挖掘首先进行特征提取,然后再应用传统的数据挖掘方法进行进一步的信息挖掘。对网页中的多媒体数据进行特征的提取,应充分利用HTML的标签信息。[3]

3.2 Web结构挖掘

由于有用的知识不仅包含在Web页面的内容中,而且也包含在页面的结构中。所以Web结构挖掘是从站点的组织结构和页面结构中推导出知识,对Web页面间的结构进行挖掘,找出数据链的结构进行分类、聚类,从而发现页面间的关系,进而改进搜索引擎的性能。

Web结构挖掘的对象是Web本身的超链接,即对Web文档的结构进行挖掘。Web结构挖掘的基本思想是将Web看作一个有向图,他的顶点是Web页面,页面间的超链就是图的边。然后利用图论对Web的拓扑结构进行分析。常见的算法有HITS ( Hypertext Induced Topic Search) 、PageRank、发现虚拟社区的算法、发现相似页面的算法、发现地理位置的算法和页面分类算法。Web结构挖掘的算法一般可分为查询相关算法和查询无关算法两类。查询相关算法需要为每一个查询进行一次超链分析从而进行一次值的指派;而查询独立算法则为每个文档仅进行一次值的指派,对所有的查询都使用此值。HITS和PageRank分别是查询相关算法和查询独立算法的代表。




3.3 Web使用记录挖掘

Web使用记录挖掘也叫Web日志挖掘或Web访问信息挖掘。它是通过挖掘相关的Web日志记录,来发现用户访问Web页面的模式,通过分析日志记录中的规律,可以识别用户的喜好、满意度,可以发现潜在用户,增强站点的服务竞争力。

Web使用记录数据除了服务器的日志记录外, 还包括代理服务器日志、浏览器端日志、注册信息、用户会话信息、交易信息、Cookie中的信息、用户查询、等一切用户与站点之间可能的交互记录。

Web使用记录挖掘方法主要有以下两种:

(1) 将网络服务器的日志文件作为原始数据,应用特定的预处理方法进行处理后再进行挖掘;

(2) 将网络服务器的日志文件转换为图表,然后再进行进一步的数据挖掘。通常,在对原始数据进行预处理后就可以使用传统的数据挖掘方法进行挖掘。



3.4 Web用户性质挖掘

Web用户性质挖掘是伴随着Web2.0的出现而出现的。基于RSS、Blog、SNS、Tag以及WiKi等互联网软件的广泛应用,Web2.0帮助人们从Web1.0时代各大门户网站“填鸭”式的信息轰炸,过渡到了“人人对话”,每个普通用户既是信息的获取者,也是信息的提供者。[4]面对Web2.0的诞生,Web数据挖掘技术又面临着新的挑战。

如果说Web使用记录挖掘是挖掘网站访问者在各大网站上留下的痕迹,那么Web用户性质挖掘则是要去Web用户的老巢探寻究竟。在Web2.0时代,网络彻底个人化了,它完全允许客户用自己的方式、喜好和个性化的定制服务创造自己的互联网,它一方面给予互联网用户最大的自由度,另一方面给予有心商家有待发掘的高含金量信息数据。通过对Web用户自建的RSS、Blog等Web2.0功能模块下客户信息的统计分析,能够帮助运营商以较低成本获得准确度较高的客户兴趣倾向、个性化需求以及新业务发展趋势等信息。有关Web2.0下的数据挖掘正在进一步的研究中。

相关研究方向

 


4   结束语

Web数据挖掘是当今世界上的热门研究领域,其研究具有广阔的应用前景和巨大的现实意义。目前国内的Web数据挖掘尚处于学习、跟踪和探索阶段。Web数据挖掘有许多问题有待于进一步的研究和深化。Web2.0的出现给Web数据挖掘提出了新的要求。基于Web2.0的数据挖掘目前还处于起步阶段,它必将成为Web数据挖掘中很重要的一个研究领域。




《 Web数据挖掘 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>





JavaEye推荐
上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师
免费下载IBM社区版软件--它基于开放的标准,支持广泛的开发类型,让您的开发高效自主!
京沪穗蓉四地免费注册,SOA技术高手汇聚交锋.
上海:优秀公司德比:高薪诚聘 资深Java工程师
广州:优易公司:诚聘Java工程师,开发经理
上海:尤恩斯国际集团:诚聘开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA



文章来源: http://yuping.javaeye.com/blog/116243
posted @ 2007-08-24 19:52 fengzhi 阅读(266) | 评论 (0) | 编辑 收藏
 
[导入]ext 学习笔记

网站:JavaEye 作者:yuping322 发表时间: 2007-08-23 09:06 此文章来自于 http://www.JavaEye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接: http://yuping.javaeye.com/blog/115874


Ext,在最开始的时候,是作为YUI的一个扩展存在的,所以那个时候它的名称是YUI.Ext,后来,Ext作为一个独立的项目进行开发,并 不再依赖于YUI,在使用Ext的过程当中,你可以使用Ext-base, Prototype+script.aculo.us,jQuey和YUI四种中的一种,我因为比较习惯使用prototype,所以会选择 Prototype+script.aculo.us的组合。jQuery也是一个写得很优美的框架,没有用过,以后抽空看看代码,应该获益匪浅。
 
Ext官方网站:http://www.extjs.com
JSEclipse:http://www.adobe.com/cfusion/entitlement/index.cfm?e=labs_jseclipse
Firebug:http://www.getfirebug.com
 
从Ext的站点上下载最新版本的文件,解压什么的我就不说,我想说一下这个文档的结构:
├─adapter           存放所有adapter的文件夹
├─build               经过压缩(build)过的文件
├─docs               文档
├─examples         DEMO
├─package          按包分类的文件
├─resources        资源文件,包括CSS和一些图片
└─source            源代码
使用过程当中,除非你特别介意JS文件的加载是否影响速度,大可只引入ext-all.js和ext-all.css两个文件,Ext在包管理方面,我觉得应该向Dojo学习下。
 
JS和CSS引入的顺序:
<link rel="stylesheet" type="text/css" href="js/ext/resources/css/ext-all.css" />         必须引入
<link rel="stylesheet" type="text/css" href="js/ext/resources/css/xtheme-aero.css" /> 可选,用来控制主题,并且有其他两个可选值,xtheme-gray.css、xtheme-vista.css。
 
引入JS:按照底层依赖的不同:

Ext Stand-alone:
ext-base.js
ext-all.js (or your choice of files)

Yahoo! UI (.12+):
yui-utilities.js
ext-yui-adapter.js
ext-all.js (or your choice of files)

jQuery (1.1+):
jquery.js
jquery-plugins.js // required jQuery plugins
ext-jquery-adapter.js
ext-all.js (or your choice of files)

Prototype (1.5+) / Scriptaculous (1.7+):
prototype.js
scriptaculous.js?load=effects  (or whatever you want to load)
ext-prototype-adapter.js
ext-all.js (or your choice of files)

把相应的文件引入到HTML的head里后,你就可以写你自己的第一Ext的Demo了。
<script type="text/javascript">
function InitDialog() {
  var dialog = new Ext.BasicDialog("hello-dlg", {
          id: "hello-dialog",
            title: "Hello",
          autoTabs:true,
          width:500,
          height:300,
          shadow:true,
          minWidth:300,
          minHeight:250,
          proxyDrag: true
  });
  dialog.addKeyListener(27, dialog.hide, dialog);
  dialog.addButton('Submit', dialog.hide, dialog).disable();
  dialog.addButton('Close', dialog.hide, dialog);
  
  Ext.ComponentMgr.register(dialog);
}
function OnButtonClick() {
  var dialog = Ext.getCmp("hello-dialog");
  dialog.show();
}
Ext.onReady(InitDialog);
</script>
 
<button onClick="OnButtonClick();">Show</button>
<div id="hello-dlg"></div>             渲染DIV用到的层
这里有四处要注意一下:
id: "hello-dialog", Compoent的ID,有了这个ID才能用ComponentMgr.register来在全局进行注册
Ext.ComponentMgr.register(dialog); 注册组件
var dialog = Ext.getCmp("hello-dialog"); 根据ID来得到组件
Ext.onReady(InitDialog); Ext.onRead是注册一个在整个页面的DOM构建完成会被执行的函数

呵呵,第一个例子就出来了,试试看吧~

 




《 ext 学习笔记 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>





JavaEye推荐
上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师
免费下载IBM社区版软件--它基于开放的标准,支持广泛的开发类型,让您的开发高效自主!
京沪穗蓉四地免费注册,SOA技术高手汇聚交锋.
上海:优秀公司德比:高薪诚聘 资深Java工程师
广州:优易公司:诚聘Java工程师,开发经理
上海:尤恩斯国际集团:诚聘开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA



文章来源: http://yuping.javaeye.com/blog/115874
posted @ 2007-08-23 09:06 fengzhi 阅读(471) | 评论 (0) | 编辑 收藏
 
[导入]掌握JDK1.5枚举类型

网站:JavaEye 作者:yuping322 发表时间: 2007-08-22 22:35 此文章来自于 http://www.JavaEye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接: http://yuping.javaeye.com/blog/115860

Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class, 它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。 当我们在声明一个enum类型时,我们应该注意到enum类型有如下的一些特征。 

  1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。 

  2.所有枚举值都是public , static , final的。注意这一点只是针对于枚举值,我们可以和在普通类里面定义 变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。 

  3.Enum默认实现了java.lang.Comparable接口。 

  4.Enum覆载了了toString方法,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue”. 

  5.Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点,一把来说应该相对应地重写valueOf方法。 

  6.Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值。 

  7.Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定,这里Color.Red.ordinal()返回0。 

  了解了这些基本特性,我们来看看如何使用它们。 

  1.遍历所有有枚举值. 知道了有values方法,我们可以轻车熟路地用ForEach循环来遍历了枚举值了。 

  for (Color c: Color.values()) 
  System.out.println(“find value:” + c); 


  2.在enum中定义方法和变量,比如我们可以为Color增加一个方法随机返回一个颜色。 

  public enum Color { 
  Red, 
  Green, 
  Blue; 

  /* 
  *定义一个变量表示枚举值的数目。 
  *(我有点奇怪为什么sun没有给enum直接提供一个size方法). 
  */ 
  private static int number = Color.values().length ; 

  /** 
  * 随机返回一个枚举值 
  @return a random enum value. 
  */ 
  public static Color getRandomColor(){ 
  long random = System.currentTimeMillis() % number; 
  switch ((int) random){ 
   case 0: 
    return Color.Red; 
   case 1: 
    return Color.Green; 
   case 2: 
    return Color.Blue; 
   default : return Color.Red; 
  } 
  } 
  }
 

  可以看出这在枚举类型里定义变量和方法和在普通类里面定义方法和变量没有什么区别。唯一要注意的只是变量和方法定义必须放在所有枚举值定义的后面,否则编译器会给出一个错误。 

  3.覆载(Override)toString, valueOf方法 

  前面我们已经知道enum提供了toString,valueOf等方法,很多时候我们都需要覆载默认的toString方法,那么对于enum我们怎么做呢。其实这和覆载一个普通class的toString方法没有什么区别。 

  …. 
  public String toString(){ 
  switch (this){ 
  case Red: 
   return "Color.Red"; 
  case Green: 
   return "Color.Green"; 
  case Blue: 
   return "Color.Blue"; 
  default: 
   return "Unknow Color"; 
  } 
  } 
  …. 

  这时我们可以看到,此时再用前面的遍历代码打印出来的是 

  Color.Red 
  Color.Green 
  Color.Blue 

  而不是 

  Red 
  Green 
  Blue. 

  可以看到toString确实是被覆载了。一般来说在覆载toString的时候我们同时也应该覆载valueOf方法,以保持它们相互的一致性。 

  4.使用构造函数 

  虽然enum不可以有public的构造函数,但是我们还是可以定义private的构造函数,在enum内部使用。还是用Color这个例子。 

  public enum Color { 
  Red("This is Red"), 
  Green("This is Green"), 
  Blue("This is Blue"); 

  private String desc; 

  Color(String desc){ 
  this.desc = desc; 
  } 

  public String getDesc(){ 
  return this.desc; 
  } 

  } 


  这里我们为每一个颜色提供了一个说明信息, 然后定义了一个构造函数接受这个说明信息。 

  要注意这里构造函数不能为public或者protected, 从而保证构造函数只能在内部使用,客户代码不能new一个枚举值的实例出来。这也是完全符合情理的,因为我们知道枚举值是public static final的常量而已。 

  5.实现特定的接口 

  我们已经知道enum可以定义变量和方法,它要实现一个接口也和普通class实现一个接口一样,这里就不作示例了。 

  6.定义枚举值自己的方法。 

  前面我们看到可以为enum定义一些方法,其实我们甚至可以为每一个枚举值定义方法。这样,我们前面覆载 toString的例子可以被改写成这样。 

  public enum Color { 
  Red { 
  public String toString(){ 
   return "Color.Red"; 
  } 
  }, 
  Green { 
  public String toString(){ 
   return "Color.Green"; 
  } 
  }, 
  Blue{ 
  public String toString(){ 
   return "Color.Blue"; 
  } 
  }; 
  } 


  从逻辑上来说这样比原先提供一个“全局“的toString方法要清晰一些。 

  总的来说,enum作为一个全新定义的类型,是希望能够帮助程序员写出的代码更加简单易懂,个人觉得一般也不需要过多的使用enum的一些高级特性,否则就和简单易懂的初衷想违背了。  

引自:http://www.it.com.cn/f/edu/053/29/93843.htm






《 掌握JDK1.5枚举类型 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>





JavaEye推荐
上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师
免费下载IBM社区版软件--它基于开放的标准,支持广泛的开发类型,让您的开发高效自主!
京沪穗蓉四地免费注册,SOA技术高手汇聚交锋.
上海:优秀公司德比:高薪诚聘 资深Java工程师
广州:优易公司:诚聘Java工程师,开发经理
上海:尤恩斯国际集团:诚聘开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA



文章来源: http://yuping.javaeye.com/blog/115860
posted @ 2007-08-22 22:35 fengzhi 阅读(160) | 评论 (0) | 编辑 收藏
 
[导入] xml文件解析-DOM4J

网站:JavaEye 作者:yuping322 发表时间: 2007-08-22 18:10 此文章来自于 http://www.JavaEye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接: http://yuping.javaeye.com/blog/115336

 1.   读取并解析XML文档:
读写XML文档主要依赖于org.dom4j.io包,其中提供DOMReader和SAXReader两类不同方式,而调用方式是一样的。这就是依靠接口的好处。








 

    // 从文件读取XML,输入文件名,返回XML文档

    public Document read(String fileName) throws MalformedURLException, DocumentException {

       SAXReader reader = new SAXReader();

       Document document = reader.read(new File(fileName));

       return document;

    }

 


其中,reader的read方法是重载的,可以从InputStream, File, Url等多种不同的源来读取。得到的Document对象就带表了整个XML。

根据本人自己的经验,读取的字符编码是按照XML文件头定义的编码来转换。如果遇到乱码问题,注意要把各处的编码名称保持一致即可。

 

2.  取得Root节点

读取后的第二步,就是得到Root节点。熟悉XML的人都知道,一切XML分析都是从Root元素开始的。








 

  public Element getRootElement(Document doc){

       return doc.getRootElement();

    }

 


2.2访问节点


List childrenList = elt.elements();


List childrenList = elt.elements("student");


Element eltChild = elt.element("student");


2.3.访问属性


List  attrList = elt.attributes();


Attribute attr = elt.attribute("sn");


String attrValue = elt.attributeValue("sn");


2.4.删除元素和属性


Element eltStu = root.element("student");


root.remove(eltstu);


--------------------------------


etl.remove(elt.attribute("sn"));


3.    遍历XML树


DOM4J提供至少3种遍历节点的方法:

1) 枚举(Iterator)








 

    // 枚举所有子节点

    for ( Iterator i = root.elementIterator(); i.hasNext(); ) {

       Element element = (Element) i.next();

       // do something

    }

    // 枚举名称为foo的节点

    for ( Iterator i = root.elementIterator("foo"); i.hasNext();) {

       Element foo = (Element) i.next();

       // do something

    }

    // 枚举属性

    for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {

       Attribute attribute = (Attribute) i.next();

       // do something

    }


2)递归


递归也可以采用Iterator作为枚举手段,但文档中提供了另外的做法








 

    public void treeWalk() {

       treeWalk(getRootElement());

    }

    public void treeWalk(Element element) {

       for (int i = 0, size = element.nodeCount(); i < size; i++)     {

           Node node = element.node(i);

           if (node instanceof Element) {

              treeWalk((Element) node);

           } else { // do something....

           }

       }

}

 


 

3) Visitor模式

最令人兴奋的是DOM4J对Visitor的支持,这样可以大大缩减代码量,并且清楚易懂。了解设计模式的人都知道,Visitor是GOF设计模式之一。其主要原理就是两种类互相保有对方的引用,并且一种作为Visitor去访问许多Visitable。我们来看DOM4J中的Visitor模式(快速文档中没有提供)

只需要自定一个类实现Visitor接口即可。








 

        public class MyVisitor extends VisitorSupport {

           public void visit(Element element){

               System.out.println(element.getName());

           }

           public void visit(Attribute attr){

               System.out.println(attr.getName());

           }

        }

 

        调用:  root.accept(new MyVisitor())


    Visitor接口提供多种Visit()的重载,根据XML不同的对象,将采用不同的方式来访问。上面是给出的Element和Attribute的简单实现,一般比较常用的就是这两个。VisitorSupport是DOM4J提供的默认适配器,Visitor接口的Default Adapter模式,这个模式给出了各种visit(*)的空实现,以便简化代码。

    注意,这个Visitor是自动遍历所有子节点的。如果是root.accept(MyVisitor),将遍历子节点。我第一次用的时候,认为是需要自己遍历,便在递归中调用Visitor,结果可想而知。

 

4. XPath支持

    DOM4J对XPath有良好的支持,如访问一个节点,可直接用XPath选择。








 

   public void bar(Document document) {

        List list = document.selectNodes( "//foo/bar" );

        Node node = document.selectSingleNode("//foo/bar/author");

        String name = node.valueOf( "@name" );

     }

 


    例如,如果你想查找XHTML文档中所有的超链接,下面的代码可以实现:








 

    public void findLinks(Document document) throws DocumentException {

        List list = document.selectNodes(" //a/@href ");

        for (Iterator iter = list.iterator(); iter.hasNext(); ) {

            Attribute attribute = (Attribute) iter.next();

            String url = attribute.getValue();

        }

     }

 


5. 字符串与XML的转换


有时候经常要用到字符串转换为XML或反之,








 

    // XML转字符串

 Document document = ...;

    String text = document.asXML();

// 字符串转XML

    String text = "<person> <name>James</name> </person>";

    Document document = DocumentHelper.parseText(text);

 


6 用XSLT转换XML









 

   public Document styleDocument(

       Document document,

       String stylesheet

    ) throws Exception {

    // load the transformer using JAXP

    TransformerFactory factory = TransformerFactory.newInstance();

    Transformer transformer = factory.newTransformer(

       new StreamSource( stylesheet )

    );

    // now lets style the given document

    DocumentSource source = new DocumentSource( document );

    DocumentResult result = new DocumentResult();

    transformer.transform( source, result );

    // return the transformed document

    Document transformedDoc = result.getDocument();

    return transformedDoc;

}

 


 

7. 创建XML

 一般创建XML是写文件前的工作,这就像StringBuffer一样容易。








 

    public Document createDocument() {

       Document document = DocumentHelper.createDocument();

       Element root = document.addElement(root);

       Element author1 =

           root

              .addElement("author")

              .addAttribute(name, "James")

              .addAttribute("location", "UK")

              .addText("James Strachan");

       Element author2 =

           root

              .addElement("author")

              .addAttribute("name", Bob")

              .addAttribute("location", "US")

              .addText("Bob McWhirter");

       return document;

    }

 


 

8. 文件输出

    一个简单的输出方法是将一个Document或任何的Node通过write方法输出








 

    FileWriter out = new FileWriter( "foo.xml");

    document.write(out);

 


 如果你想改变输出的格式,比如美化输出或缩减格式,可以用XMLWriter类








 

    public void write(Document document) throws IOException {

       // 指定文件

       XMLWriter writer = new XMLWriter(

           new FileWriter( "output.xml" )

       );

       writer.write( document );

       writer.close();

       // 美化格式

       OutputFormat format = OutputFormat.createPrettyPrint();

       writer = new XMLWriter( System.out, format );

       writer.write( document );

       // 缩减格式

       format = OutputFormat.createCompactFormat();

       writer = new XMLWriter( System.out, format );

       writer.write( document );

    }

 





《 xml文件解析-DOM4J 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>





JavaEye推荐
上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师
免费下载IBM社区版软件--它基于开放的标准,支持广泛的开发类型,让您的开发高效自主!
京沪穗蓉四地免费注册,SOA技术高手汇聚交锋.
上海:优秀公司德比:高薪诚聘 资深Java工程师
广州:优易公司:诚聘Java工程师,开发经理
上海:尤恩斯国际集团:诚聘开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA



文章来源: http://yuping.javaeye.com/blog/115336
posted @ 2007-08-22 18:10 fengzhi 阅读(534) | 评论 (0) | 编辑 收藏
 
[导入]Java中类与类的关系

网站:JavaEye 作者:yuping322 发表时间: 2007-08-21 23:00 此文章来自于 http://www.JavaEye.com
声明:本文系JavaEye网站原创文章,未经JavaEye网站或者作者本人书面许可,任何其他网站严禁擅自发表本文,否则必将追究法律责任!
原文链接: http://yuping.javaeye.com/blog/115876

yaogao@gmail.com

类与类之间存在以下关系:

1、 泛化(Generalization)

很简单,就是我们常说的继承。是说子类获得父类的功能的同时,还可以扩展自己的功能。

如图:

Java代码中表现为:extends 和 implements

2、 依赖(Dependency)

两个相对独立的咚咚(A和B),当A负责构造B时,A与B形成依赖关系,即A使用B。

如图:

Java代码中的表现为局部变量,方法的参数,以及对静态方法的调用

3、 关联(Association)

   两个相对独立的咚咚(A和B),当A对象持有B对象的时候,形成关联关系。

关于分为有两种特殊的形式,聚合(Aggregation)和组合(Composition),聚合和组合只有概念上的区别,在Java中的代码实现上没有区别。

聚合:指的是整体与部分的关系,如图:

组合:表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期,即整体对象不存在,部分对象也将不存在,如图:

Java代码中,表现为成员变量。

4、 总结

在Java中,应该尽量优先使用组合,而不是继承,因为继承会使得类关系过于复杂化,破坏了封装性,使用组合一样可以获得已有类的功能,而且会使新类更加稳固。

实际上,从依赖 -----〉聚合--------〉组合,类与类之间的关系更加紧密,互相之间的影响越来越大,其实我们平常比较少去区分这些关系,而且事实上这东西的定义不太好理解,所以肯定会导致认识上的偏差,所以我们使用这些东西的时候,尽量靠近大家都认同的做法,这样容易让别人理解。

 




《 Java中类与类的关系 》 的评论也很精彩,欢迎您也添加评论。查看详细 >>





JavaEye推荐
上海乐福狗信息技术有限公司:诚聘技术经理和开发工程师
免费下载IBM社区版软件--它基于开放的标准,支持广泛的开发类型,让您的开发高效自主!
京沪穗蓉四地免费注册,SOA技术高手汇聚交锋.
上海:优秀公司德比:高薪诚聘 资深Java工程师
广州:优易公司:诚聘Java工程师,开发经理
上海:尤恩斯国际集团:诚聘开发工程师
北京:优秀公司NHNChina招聘:WEB开发,系统管理,JAVA开发, DBA



文章来源: http://yuping.javaeye.com/blog/115876
posted @ 2007-08-21 23:00 fengzhi 阅读(377) | 评论 (0) | 编辑 收藏