游戏搜索引擎 --搜索引擎DEMO系统中Lucene索引的实现---毕业论文_第1页
游戏搜索引擎 --搜索引擎DEMO系统中Lucene索引的实现---毕业论文_第2页
游戏搜索引擎 --搜索引擎DEMO系统中Lucene索引的实现---毕业论文_第3页
游戏搜索引擎 --搜索引擎DEMO系统中Lucene索引的实现---毕业论文_第4页
游戏搜索引擎 --搜索引擎DEMO系统中Lucene索引的实现---毕业论文_第5页
免费预览已结束,剩余41页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本 科 毕 业 论 文 题目:游戏搜索引擎-搜索引擎DEMO系统中Lucene索引的实现Theme: Game Search Engine-Explore and Research SearchEngine based on game姓 名: 学 号:学院:软件学院系:软件工程专 业:软件工程年 级:指导教师: 年 月摘要网络中的资源非常丰富,但是如何有效的搜索信息是一件很困难的事情。建立搜索引擎是解决问题的最好方法。本文通过讲解如何使用Heritrix和Lucene,Web开发,逐步地带领读者亲手构建搜索引擎网站。为了深刻的理解这些技术,本人还实现了一个自己的搜索引擎游戏搜索引擎。游戏搜索引擎是一个基于游戏产业的搜索引擎。游戏搜索引擎由三大部分组成:抓取系统,索引系统和搜索系统。抓取系统,其实也就是网络爬虫,负责从指定的WEB页面按照超连接进行解析、抓取数据,为后续阶段提供数据;索引系统,把抓来的信息建立类似书目的数据文件,以便于实现高速检索;搜索系统,就是以WEB的形式为用户提供检索的功能。本设计使用MyEclipse开发工具在网络上搭建一个为用户提供查询游戏信息的web网站。论文首先介绍了搜索引擎的相关知识,以及系统设计所使用到的技术原理和工具。在系统的总体设计中描述了系统的主要功能模块,以及各个模块的一些相关的知识,如如何使用Heritrix来抓取网页等。在详细设计中具体描述了各个子模块的功能,以及这些模块的构建,基本上包含了一个搜索引擎的开发流程。之后,给出了系统的运行结果系统的欢迎界面、关键字提示信息和系统的检索结果。论文在最后做出了设计的总结,并列出了参考资料。关键词:搜索引擎;HeritrixAbstractResources is very rich in network, but how to effectively search information is a very difficult task. The establishment of a search engine is the best way to solve the problem. In this paper, on the use of Heritrix and Lucene, Web development, leading the reader step by step to building a search engine site personally. In order to deeply understand the technology, I also realized its own search engine - game search engine. Game search engine is a search engine based on the game industry. Game search engine has three major components: system crawling, indexing and search system. The crawling system is, in fact, is the network of reptiles, is responsible for the WEB page from the specified connection in accordance with the super-resolution, crawl data, provide data for follow-up phase; index system to bibliographic information of the establishment of similar data files in order to achieve high-speed retrieval; search system, the form of WEB is to provide users with search function.The MyEclipse development tools designed for use on the network built to provide users with a query of the web site the game information. Paper first introduced the relevance of search engine knowledge, and system design technology used in the principles and tools. In the system described in the overall design of the main functions of the system modules, each module as well as some relevant knowledge, such as how to use Heritrix to crawl web pages. In the detailed description of the design of the specific functions of the various sub-modules, as well as the construction of these modules, basically includes a search engines development process. After the system is given the results - the system welcomes the interface, keyword information and the system prompts the search results. Paper made in the final summary of the design, and a list of references.Key words:search engine; Heritrix目录第一章 引言1第二章 系统的总体设计22.1 项目简介22.1.1需求分析22.1.2技术实现要点22.1.3运行环境32.2 系统模块结构32.2.1 系统总体结构模块图32.2.2 网页抓取模块32.2.3 建立索引和数据库模块82.2.4 游戏产品查询模块82.3 系统模块数据流图9第三章 系统的详细设计103.1 网页抓取模块设计103.1.1 选择网站103.1.2 分析网站内容103.1.3 开发抓取所需的定制类123.1.4 开始抓取133.2建立索引和数据库模块设计143.2.1 创建myeclipse工程143.2.2 设定配置文件163.2.3 数据库和索引结构设计173.2.4 数据库处理和索引处理183.2.5 网页解析及数据处理183.3 游戏查询模块设计203.3.1 为工程添加WebWork配置文件203.3.2 为工程创建后台处理类223.3.3 为工程创建JSP前台页面23第四章 系统的运行结果25结束语28致谢29参考文献30附录31CONTENTSChapter 1 Preface1Chapter 2 System General Design22.1 Project Brief Introduction22.1.1 Require Analysis22.1.2 Kernel Technology22.1.3 Runtime Condition32.2 System Module Structure32.2.1 System Module Structure Chart32.2.2 Crawling Module32.2.3 Index And Database Module82.2.4 Game Query Module82.3 System Module DataStream Chart9Chapter 3 System Particular Design103.1 Crawing Module Design103.1.1 Select WebSite103.1.2 Analyse Page103.1.3 Class For Analysis123.1.4 Start Crawling133.2 Index And Database Module Design143.2.1 Establish MyEclipse Project143.2.2 Configuration163.2.3 Struture of Index and Database173.2.4 Index and Database Operation183.2.5 Analyse webfile and Data dealing183.3 Game Query Module Design203.3.1 WebWork Configuration203.3.2 Action Class223.3.3 JSP Page23Chapter 4 Runtime Result25Summary28Thanks29Bibliography30Appendix31游戏搜索引擎搜索引擎DEMO系统中Lucene索引的实现第一章 引言面对浩瀚的网络资源,每个人都希望能尽快找到自己想要的东西,但是网络资源太多,通过人工浏览的方法根本是不可能的,搜索引擎很好的解决了这个问题。可以这样说,现在上网除了e-mail外,用的最广的就是搜索引擎了。搜索引擎应人们的迫切需求出现以后经历了从简单的机器人搜索软件,独立搜索引擎到专业搜索引擎,元搜索引擎的发展历程成为人们寻找信息不可或缺的工具。搜索引擎为所有网上冲浪的用户提供了一个入口,毫不夸张的说,所有的用户都可以从搜索出发到达自己想去的网上任何一个地方。因此它也成为除了电子邮件以外最多人使用的网上服务。但是,由于通用搜索引擎查找之后的信息不准确、查找深度不够,对于某一特定领域的或某一特定需求的人群,它提供的查询结果不符合他们的要求。于是便出现了具有行业色彩的新的搜索引擎服务模式垂直搜索引擎,它相对于通用搜索引擎来说,具有更加专注、具体和深入。垂直搜索和目前的google,baidu等通用搜索从定位,内容,用户,市场策略等都是不同的。用户使用google,baidu等通用搜索引擎的方式是通过关键字的方式实现的,是语义上的搜索,返回的结果倾向于知识成果,比如文章,论文,新闻等;垂直搜索也是提供关键字来进行搜索的,但被放到了一个行业知识的上下文中,返回的结果更倾向于信息,消息,条目等。如今,中国网络游戏蓬勃发展,目前有几百款网络游戏在中国运营,从事游戏开发和运营的公司、游戏玩家数量越来越多,游戏产业、游戏周边产业从无到有,游戏产品和游戏产业的社会影响力越来越大。但是,面对浩瀚的、各种各样的游戏,如何有效的搜索信息却是一件非常困难的事情,建立搜索引擎是解决这个问题的最好方法。本人通过构建一个游戏产业的垂直搜索引擎,来向大家演示一个属于自己的搜索引擎的构建。第二章 系统的总体设计2.1 项目简介2.1.1需求分析开发游戏行业的具有全文检索的垂直搜索引擎系统。采用Heritrix网络爬虫和Lucene搜索引擎开发工具进行搜索,完成一个游戏行业的垂直搜索引擎,根据收录的及格信息格式相对单一的垂直门户和论坛,通过分析工具分析其信息特点和关键词分布状况,然后基于现有的信息格式建立索引库,以及相应的数据库。用户通过网页的方式查询,查询后的结果也以网页的方式显示。做这个项目的目的是为了掌握和了解小规模搜索引擎技术,了解垂直搜索引擎的发展情况,垂直搜索引擎和百度Google等综合搜索引擎相比起来,具有面向特定领域或对象、面向特定需求、全面、深入、准确、及时和机构化等特点,有它一定的存在价值和发展前景,这个项目对我们以后从事此项领域也是个很好的锻炼和学习。2.1.2技术实现要点 通过Heritrix抓取网页文件Heritrix是一个爬虫框架,可加如入一些可互换的组件。它的执行是递归进行的,主要有以下几步:1、在预定的URI中选择一个。2、获取URI。 3、分析,归档结果。4、选择已经发现的感兴趣的URI,加入预定队列。5、标记已经处理过的URI。在Heritrix抓取页面中可设置各种处理链,并将抓取结果的镜象文件存放于硬盘中。 使用Lucene将网页生成索引文件Lucene不是一个完整的全文索引应用,而是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。Lucene在不断创建新的索引文件的同时,并且定期的把这些新的小索引文件合并到原先的大索引中(针对不同的更新策略,批次的大小可以调整),这样在不影响检索的效率的前提下,提高了索引的效率。2.1.3运行环境 采用B/S结构 客户端:无要求 硬件:内存512M,奔腾处理器,硬盘80G 操作系统平台:WINDOWS操作系统 数据库:MYSQL WEB服务器:TOMCAT 5.x 浏览器:IE 5.0以上 开发工具:MYECLIPSE 6.0,Dreamwear,Photoshop2.2 系统模块结构2.2.1 系统总体结构模块图如图2-1所示:游戏搜索引擎 Soyou网页抓取模块建立索引和数据库模块游戏产品查询模块图2-1 总体结构模块图2.2.2 网页抓取模块网页抓取模块的功能:主要负责从网络上抓取需要的资源。由于Heritrix的扩展性良好,我们可以扩展它的各个组件,来实现我们抓取网页的抓取逻辑。要运行Heritrix,必须进行一些相关的配置。配置好后,可以通过Heritrix的WEBUI界面,来建立抓取网页的任务。Heritrix的主类为org.archive.crawler. Heritrix,运行它,就可以启动Heritrix。然后通过浏览器访问http:/localhost:8080,就可以打开Heritrix的WEBUI界面了。下图为登陆后的界面:图2-2 登陆后的界面在该界面中央有一道状态栏,用于标识当前正在运行的抓取任务。单击WEBUI菜单栏上的“jobs”标签,就可以进入任务创建页面了,在创建页面中有4种创建任务的方式:Based on existing job、Based on a recovery、Based on a profile、With defaults,我们使用最简单的With defaults来生成一个任务,单击With defaults连接,创建一个新的抓取任务,如图2-3所示。图2-3 新的抓取任务从图2-3中可以看到一排按钮,单击“Modules”按钮,就进入配置抓取时处理链的页面,如图2-4所示。从图中可以看到需要配置的内容共有7项,其中CrawlScope和Frontier是两个最重要的组件。CrawlScope用于配置当前应该在什么范围抓取网页连接。Frontier是一个URL的处理器,它决定下一个被处理的URL是什么。同时,它还会将经由处理器链解析出来的URL加入到等待处理的队列中去。PreProcessor是整个处理链的入口,在这个队列中,所有的处理器都是用来对抓取时的一些先决条件进行判断。Fetcher用于解析网络传输协议,比如DNS、HTTP等。Extractor主要用于解析当前获取的服务器返回内容,这些内容通常都是以字符串形式缓存的。在这个队列中,包括了一系列的工具,如解析HTML、CSS等。解析完毕,取出页面中的URL,将它们放入队列中,等待下次抓取。我们可扩展该类,实现我们的抓取目标。Writer用于将抓取到的信息写入到磁盘中,通常采用镜象方式写入。PostProcessor在整个抓取解析过程结束后,进行一些扫尾工作。需要特别注意的是,在处理链的设置过程中,每个队列的处理器都是要分先后顺序的,信息的处理流程是不可逆的。图2-4 配置处理链的页面在设置完处理链后,在页面顶部后底部都可以找到如图2-5所示的菜单项,单击“settings”连接,就进入了设置属性的页面。图2-5 进入“settings”在使用Heritrix时,所需要设置的参数并不多,以默认设置为主。真正需要设置的是http-headers,图2-6和图2-7分别为默认设置和正确配置。图2-6 默认的设置图2-7 正确的设置其中,“VERSION”需要被替换成Heritrix的版本信息,“PROJECT_URL_HERE”替换成一个完整的URL地址即可,“from”属性中只要是格式正确的邮件地址就可以。处理链设置完后,单击图2-8中“Submit job”连接后。回到“Console”界面,单击“Start”连接,就可以开始抓取任务了,抓取过程如图2-9所示。图2-8 提交任务“Sumbit job”图2-9 抓取任务开始抓取任务完成后,就进入索引和数据库的建立阶段了。2.2.3 建立索引和数据库模块在该模块中,使用Lucene索引工具来建立索引文件。建立索引和数据库模块的功能:主要是对前期网络爬虫抓取的信息进行提取,进而分析网页里的游戏信息,建立索引文件和相关的游戏信息的数据库内容。在该模块中,很重要的内容就是使用HTMLParser来从复杂的HTML页面中解析出需要的文本信息。从网页中提取信息,有两种方法使用正则表达式或HTMLParser工具包。正则表达式通过自定义的正则模式去精确地提取文本信息,但需要写大量的正则表达式,对于不熟悉正则表达式的我们来说,编写和调试正则表达式是一个繁琐的过程。而HTMLParser提供了提取文本信息的API,我们只需要通过这写API就可以很方便的提取特定文本,极大地提高了工作效率。2.2.4 游戏产品查询模块在经过了复杂的资源处理后,就有了一个拥有众多产品的数据库和Lucene索引。现在需要的就是搭建一个合理的WEB平台,将其构建成一个真正的基于WEB的搜索引擎。游戏产品查询模块就是负责完成这项任务的。整个WEB系统是由WEBWORK + JDBC来实现的,并且具有分页功能。2.3 系统模块数据流图如下图所示为系统的数据流图:图2-10 系统模块数据流图构建一个游戏搜索引擎程序,必须经历的3个步骤:1.先从网页抓取模块抓取网页,生成网页镜象文件,或者是网页压缩文件。2.建立索引和数据库模块,从网页镜象文件或网页压缩文件中,提取产品信息,然后将这些产品信息存储到数据库,返回记录ID既主键,最后通过Lucene索引工具将记录ID和产品信息一并生成索引文件。3.游戏产品查询模块则是通过WEB的方式,获取客户的查询关键字,也是通过Lucene索引工具检索索引文件,获取游戏信息记录在数据库中的ID,通过ID获取游戏信息,并将这些信息显示在页面中。第三章 系统的详细设计3.1 网页抓取模块设计3.1.1 选择网站在之前的总体设计中,介绍了如何使用Heritrix爬虫来创建抓取任务,在本章中将介绍在Heritrix中自定义抓取所需的类。在抓取前得先选择适合的网站进行抓取,从技术角度看,选择网站主要有以下几个依据: 网站能够被Heritrix爬虫抓取。因为有的网站使用了反爬虫技术,防止未经授权的爬虫 对网站进行抓取。 网站的信息不是使用javascript动态的生成的。由于web2.0方式的普及,越来越多的网站使用ajax技术,利用javascript来动态生成内容。这种动态的内容需要在浏览器中运行生成,是爬虫无法获取得。 网站的页面结构不应当经常变化,最好是使用一种模板动态生成的。这样有利于分析网页,使用简单的方式来从网页中解析数据。3.1.2 分析网站内容在进行任何抓取前,都必须对所要抓取的内容进行详细的分析,了解它的基本结构,以确定种子,没有一款软件能够自动告诉用户网站的那些网页是需要抓取的,这一步是必须由人工来完成的,也是必须进行的一个步骤。网页抓取的一个原则就是在清单上的URL能够很方便的连接到所有具体的产品页面,当然也可以使用人工的方式获取所有的产品连接,但这样做的工作量太大了,要降低工作量,那么方法就是找到一个或几个网页,在这些网页上可以获取所有产品的连接,将该网页抓取并分析,然后在取的所有产品的连接。这里以新浪网的游戏产品信息为例,在抓取去游戏信息页面时,最好是能够找到一个包括其所有手机产品URL的页面。如图3-1所示。图3-1 新浪网的游戏资料库页面在这个页面上,点击每个游戏连接,都可以进入游戏产品的详细信息页面,如图3-2所示。因此,这样的页面就是我们所需要的页面,在这个页面上可以获取所有游戏的详细信息,我们只需要提供给爬虫这样的一个网页连接,就可以收集到所有的产品的信息。图3-2 暗影狂奔的游戏页面3.1.3 开发抓取所需的定制类在得到了抓取清单的主页面后,就可以用Heritrix开始抓取了。很显然,使用现有的Heritrix的功能组件,还不能够完成抓取任务。我们的需要是:保存所有游戏信息的页面和不保存其他无关的页面。对于保存所有游戏信息的页面,这是Heritrix所自带的组件就可以实现的功能。而对于不保存其他无关的页面的内容,这点使用Heritrix组件是无法实现的,因为无论使用什么Scope,总会保存与产品无关的网页。因此,需要扩展Heritrix,以实现所需要的抓取,这种扩展实际上就是加入一种URL选择策略,将那些不需要的URL过滤掉,以保证所抓取的信息都是有用的信息。在这里,我们选择扩展Extractor来达到需要。SinaGameExtractor类继承了Extractor类,并且实现了它的抽象方法extract()。在代码中,SinaGameExtractor这个类是专门用来解析http://pc这个页面的,该方法首先从获取得到网页的内容,然后通过java提供的正则表达式来匹配字符串,匹配之间的超连接并去除那些无关的超连接,然后对其进行截取,并在前部加入http:/,加上这样的前缀就构成了一个完整的URL,然后将构成的URL加入到待处理队列中,以等待FrontierScheduler的处理。3.1.4 开始抓取在抓取前,需要将SinaGameExtractor这个定制类加入到Processor.options文件中,如图所示3-3。图3-3 添加自定义的Extractor添加完成后,就可以开始进行抓取了。首先通过Heritrix的WEBUI创建JOB,并在任务处理链的Moudules中选择SinaGameExtractor,置于ExtractorHTTP后,如图3-4所示。图3-4 选择SinaGameExtractor配置完成后,就可以开始网页的抓取了,抓取完成后,要验证Extractor是否解析成功,就需要查看任务运行后的镜象目录,看它是不是和我们设想的一样。该镜象目录在工程HeritrixProject的jobs目录下。如图3-5所示,这是任务运行完毕后的mirror目录。图3-5 任务运行完成后的镜象目录当抓取结束后,就需要对抓取下来的结果进行处理了。处理的过程主要包括:搭建myeclipse工程、解析网页内容并将所需要的信息保存、构建数据库处理类、构建索引处理类等。3.2建立索引和数据库模块设计3.2.1 创建myeclipse工程Myeclipse的工程创建要考虑到两个因素: 在对抓取的网页做处理时,要能够与所要开发的搜索引擎共用同样的系统,这样可以节约开发时间和开发工作量,减少不必要的重复工作。因此,创建的工程是一个web类型的工程。 应将处理网页的系统代码与搜索引擎的系统代码分开来,以便开发的时候可以独立进行,降低系统的耦合度。因为创建的工程是web工程,必然要安装tomcat 5.0,以确保程序的运行。首先,从网路上下载tomcat压缩包,然后将其解压至任一盘上即可。之后,便是配置tomcat。打开myeclipse,在菜单栏中选择“Window-Perferences”命令,选中后会出现如图3-6所示的对话框。由于我将tomcat压缩包解压至E:software目录下,故属性设置页上的配置为E:softwaretomcat5.5.17。这样,tomcat就配置完成了,要验证tomcat是不是安装成功,如图3-7所示,单击“start”按钮,运行tomcat。然后在浏览器中输入http:/localhost:8080,将出现如图3-8所示的界面,则表示tomcat成功启动。Tomcat配置完成后,就可以创建web工程了。图3-6 tomcat属性设置图3-7 tomcat启动图3-8 tomcat启动成功界面3.2.2 设定配置文件工程结构创建好后,还不能马上开发对抓取结果进行处理的类。在这之前,需要先对整个应用中,要用到的系统变量进行设定。在WEB-INF/src目录下,添加perties属性文件,作为系统的外部配置文件。该属性文件的内容如下所示。# Database Settings#jdbc.url=jdbc:mysql:/localhost:3306/searchengine?useUnicode=true&characterEncoding=gb2312&mysqlEncoding=gb2312jdbc.username=rootjdbc.password=# Index Settings#game.mirror.directory=D:workSpacejavaHeritrixProjectjobsgame.index.directory=F:searchEngineindexword.dictionary=F:searchEnginewordLib.txt系统属性配置文件主要包括两部分内容,第一部分是数据库的配置部分,主要包括了数据连接字符串、数据库用户名和密码等信息;第二部分是搜索引擎的信息设定,属性包括了网页镜象文件的存放目录位置、索引文件的存放目录位置和游戏信息的词库。在该系统中使用ResourceBundle来加载perties文件。在系统中,将所有与获取配置信息相关的操作封装在config.PropertyConfiguration类中。使用静态初始化段方法来加载属性文件,然后定义多个静态方法,来从bunldle对象中取出相应的属性值,从这些静态方法的名称中,可以辨认出它们所返回的属性值的含义,如getDBUrl()返回的是数据连接字符串。3.2.3 数据库和索引结构设计在网页抓取完成后,需要对网页信息进行解析,获取出网页内的游戏信息,并将其存储到数据库中,因此在此前必须在mysql数据库中创建一个数据库searchengine和表game。数据库结构很简单,只有一张表,主要就是用来存储游戏的各种信息。具体字段含义见表3-1所示。表3-1 字段含义字段描述id主键gname游戏名storeurl该游戏的网页文件存放路径updatetime最后更新时间数据库结构设计之后,在之前搭建好的工程中,定义一个gameInfo类作为装载数据的值对象,该类存储了在数据库中和索引中将要用到的信息。除了数据库结构设计,还需要定义Lucene的Document格式。因此,设计了GameDocument类,用它的静态方法来为一个gameInfo对象构建Lucene的Document。GameDocument类中定义了一个静态方法来为传入的gameInfo对象构建了3个Field,这3个Field分别为identifier、name、time。这三个Field与数据库中的内容有直接的对应关系,并且中间的Field则是为用户提供一个搜索时的默认Field。由于Lucene提供的分词工具,还无法添加“数字+英文字母”或“数字+中文”这样组合的新词。为了解决这种问题,我们将传入的gameInfo对象中的信息中的0-9的数字替换为中文繁体字的零到拾,以便能够被分词工具识别。3.2.4 数据库处理和索引处理之前已经对数据库和索引的结构进行了介绍,这里在介绍对数据库进行操作和索引操作的类分别为GameJDBC类和GameIndexer类。GameJDBC类从其字面就可知道该类是用于系统中数据库处理操作的类。由于在搜索引擎中,数据库的处理相对较简单,采用了直接的JDBC方式来向数据库进行读写操作,方法分别为addGameInfo和getSearchResultById。addGameInfo方法用于向数据库中插入数据,它的参数为gameInfo对象,然后把当前插入的新记录的ID值返回给调用者,以便调用者可以将这个ID传到Lucene的索引中,以此将数据库记录和Lucene的索引对应起来。getSearchResultById方法则是从数据库中读取数据,传递的参数是int型的数字,然后从数据库中查询ID值为当前数字的记录,并返回该记录信息给调用者。GameIndexer类是索引类,用于向Lucene中添加Document。在GameIndexer的初始化中,需要传递一个以字符串形式表示的索引文件存放目录位置的参数,该目录信息可以从PropertyConfuguration类中获取得到,该构造函数中还实例化了一个Lucene的Analyzer对象,利用该Analyzer对象来初始化一个Lucene的写入工具IndexWriter。在GameIndexer类中,还有一个方法addGame,这个方法的参数为gameInfo类型的对象,它将这个参数送到GameDocument.buildGameDocument方法里进行处理,然后调用IndexWriter的addDocument方法,把生成的游戏信息gameInfo加入到索引中。除此之外,该类还提供了optimize方法和close方法来对索引进行优化和关闭索引。3.2.5 网页解析及数据处理配置文件、数据库处理操作类和索引类完成后,就应该着手处理抓取到的网页的内容了。在搜游系统中,使用HTMLParser这个工具来解析网页。在开始解析网页之前,我们有要了解HTML的一些基本知识。HTML是Hyper Text Markup Language的简称,它是一种标记语言,语法易学难懂。而以HTML语法编写的文件叫HTML文件,文件的扩展名为.htm或.html。是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言,HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字图形、动画、声音、表格、连接等。HTML的结构包括头部和主体两大部分,其中头部描述浏览器所需的信息,而主体则包含所要说明的具体内容。基本HTML页面以DOCTYPE开始,它声明文档的类型,且它之前不能有任何内容(包括换行符和空格),否则将使文档声明无效,接着是标签,以结束。在它们之间,整个页面有两部分:标题和正文。标题词夹在和标签之间,这个词语在打开页面时出现在屏幕底部最小化的窗口。正文则夹在和之间,即所有页面的内容所在,页面上显示的任何东西都包含在这两个标签之中。HTML中的元素的格式如下:内容其中,“”表示一个标记的结束。“”与标记名称之间不能有空格。各个属性之间用空格隔开,只要属性值中没有空格就可以不加双引号,如果属性值本身有双引号则用单引号代替。标记名称、属性名及属性值不区分大小写。因此,要提取HTML中的文本信息,其实就是提取HTML标记中的内容,那么我们可以使用正则表达式来获取,但正则表达式需要考虑很多细节,比如一些大小写和空白符都必须考虑,不然得不到想要的结果,这要求编写正则表达式的人要有很好的正则表达式的功底,并且正则表达式的复用性很差,针对每个特定的网页都需要单独写正则表示式的提取。HTMLParser是一个开源的java库,它提供接口,支持线性和嵌套的解析HTML文本,它可以让我们避免写复杂的正则表达式,从而省去了很多的工作量。有了HTMLParser提供的功能和接口,我们就可以开始对网页的内容进行解析,获取其中的有用的游戏信息。首先构建一个用于解析网页信息的基类Extractor,它能从网页中提取网页内容,并且具有一个抽象方法extract用于解析网页信息,该方法的具体实现由其子类来完成,以应对不同风格的网页。在基类中实现了公用的方法遍历一个目录,该类中还有一些类属性如:Inputpath:它表明当前处理器处理的文件的完整路径。mirrorDir:它用于表明Heritrix抓取完网页后的镜象目录。对于不同的网站的页面解析,只需继承基类Extractor并且实现抽象方法extract即可。SinaGameExtract类是针对新浪网游戏页面所开发的Extractor。该类的功能就是使用HTMLParser工具提供的接口,获取网页中的游戏信息,并去除一些无用的信息。然后将获取得到游戏信息,存放到一个gameInfo对象中,并将这个对象传递给WebProcessor的addGame方法中处理。页面解析完后,就需要将游戏的信息添加进数据库和索引中,WebProcessor类把数据库操作和索引操作都集中了起来。该类中的process方法将之前传递进来的gameInfo对象插入到数据库和索引文件中。网页内容的分析的代码编写完成了,在parseWebMain类中有一个main函数,只要运行它,就可以执行网页解析、数据库的生成和索引文件的创建的整个处理过程。3.3 游戏查询模块设计3.3.1 为工程添加WebWork配置文件现在,搭建一个搜索引擎的各种所需的数据都已准备充分,就只剩下一个用于显示的WEB平台。这个WEB平台是使用webwork来实现的。但之前构建的工程并不能直接使用webwork来运行,必须为其添加一些必须的文件。在表3-2列出来的文件,都是构建这个应用程序所必须的。表3-2 构建webwork应用程序所许的文件文件名描述xwork.jarWebwork构件所依赖的类库oscore.jar一个来自OpenSymphony公司的通用功能类库文件名描述velocity-dep.jar依赖的velocity类库ognl.jarWebwork中使用的表达式语言xwork.xmlWebwork配置文件,为web应用程序定义action、result和interceptorweb.xmlJavaEE应用程序配置文件,为web应用程序定义servlet、JSP标签库等内容perties为webwork配置特定的特性和一般的JavaEE应用程序类似,JAR文件放在WEB-INF/lib目录下,而web.xml文件则放在WEB-INF目录中,而xwork.xml与perties则放在WEB-INF/src目录下。工程的目录布局如图3-9所示。图3-9 工程目录A. 创建web.xml配置文件为了让应用程序与webwork能够正常工作,应用程序需要通过以下这种方式配置:第一,特定的URL模式-*.action,要映射到负责处理所有webwork请求的一个servlet。如果请求的URL与模式能够匹配,则相应的servlet就会被调用。如果没有这个servlet,webwork将无法正常运行。第二,servlet要映射至某个URL模式。在web.xml中增加servlet-mapping节点来设定servlet所要匹配的模式。第三,为了能够使用webwork的标签库,必须在web.xml中增加一个节点以证明在哪里可以找到标签库的定义。最终的web.xml可以参考附录中的web.xml文件。B. 创建xwork.xml配置文件在正确配置好web.xml文件后,需要为webwork本身设置一个骨架配置文件了。由于webwork基于xwork这个子项目,因而这个骨架配置文件为xwork.xml,action、result和interceptor都是在xwork.xml中配置的。Action是负责web应用程序中具体逻辑实现的,它是在webwork的servlet-Dispatcher接收到HTTP请求的时候被调用。当一个action执行完毕后,它将返回一个result,譬如SUCCESS、INPUT,这些result通过xwork.xml中的定义告诉webwork下一步该做什么。Interceptor在action被执行之前被调用,由它控制这个action是否被执行或者如何执行,它实现了某些逻辑的松耦合。在xwork.xml中还必须包含一个名为webwork-default.xml的文件,这样做是为了保证可以使用所有构建于xwork之上的webwork附加特性。webwork-default.xml包含了让webwork正常运行的标准配置,没有这个文件,webwork也无法运行。在附录中也有一个的xwork.xml文件。C. 创建perties配置文件这个配置文件很简单,只需要往该文件中加入如下一行内容:webwork.tag.altSyntax=true这一行是必须的,因为webwork的程序都是基于上面这个条件上运行的。3.3.2 为工程创建后台处理类一个action是一段只有特定的URL被请求才会执行的代码。在最基本的层面上,配置一个action需要两方面的信息:action名和对应的action类。当这两部分添加到xwork.xml文件中时,就建立了一个action的映射。在我们的系统中将action名search映射至action.SearchResult类。缺少result的action是没有什么作用的。在还没有建立action到result间的映射之前,action无法为用户显示任何内容。因此,我们增加了两个result节点:SUCCESS和INPUT。每个result映射都需要一个名字、一个可选的类型和一个具体的值。在我们的系统中,如果search action返回的result是SUCCESS,那么用户将会被跳转到result.jsp页面;如果返回的是INPUT,那么浏览器将会再次显示welcome.jsp页面。系统中,创建了一个action类:SearchResult类。该类实现了Action接口。所有webwork的action都必须实现定义了execute()方法的Action接口,而execute()方法则在执行一个action的时候有webwork调用。在SearchResult类中,定义了各种不同的属性变量,如实现分页功能的Paging类型的对象等。在execute()方法中,首先获取从欢迎页面中用户输入的关键字,通过一个JavaBean式样的setter方法:setQuery()可以得到关键字字段的内容,然后使用Lucene的QueryParser构造出一个Query查询对象,之后通过Lucene的索引从索引文件中检索中结果在数据库中的ID,通过Paging分页对象截取在当前某一页要显示的内容的ID,查询数据库获取所有的游戏信息,将这些将要显示在页面上的信息都保存到一个list对象的容器中,result.jsp通过一个JavaBean式样的getter方法:getResults()可以得到查询结果的内容。最后,execute()方法返回SUCCESS以说明action已经成功执行完毕。现在action已经创建完成了,下一步就是创建jsp页面显示这些搜索结果了。3.3.3 为工程创建JSP前台页面在webwork中,有很多中不同的方式将一个action的输出显示给用户,但是最简单且最常见的方式仍是在浏览器上显示HTML页面。我们首先创建一张JSP页面welcome.jsp欢迎界面,该页面是整个系统显示给用户的第一个页面,它的功能很简单就是获取用户输入的关键字,所以它的界面也相对的简单,只有一个让用户输入关键字的文本框和一个提交的按钮。需要注意的是在代码中的第一行要添加,这行代码定义将前缀ww和URIwebwork(之前web.xml文件中定义的URI)之间建立了映射关系。前缀ww指明了所有webwork标签在使用的时候以“ww:”开头。欢迎界面创建完成后,还剩下result.jsp页面,该页面是运行完search action之后返回搜索

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论