版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE0分类号:UDC:密级:编号:成都电子科技大学成都学院学位论文基于声音搜索搜索引擎的研究论文作者姓名:申请学位专业:申请学位类别:论文提交日期:基于声音搜索搜索引擎的研究摘要当前,面对浩瀚的网络资源,搜索引擎为所有网上冲浪的用户提供了一个入口,毫不夸张的说,所有的用户都可以借助于搜索引擎到达自己想去的网上任何一个地方。因此它也成为除了电子邮件以外人们使用最多的网上服务。随着Internet的快速发展,海量信息和人们获取所需信息能力之间的矛盾日益明显,在信息海洋里查找信息,如同大海捞针一样,搜索引擎恰好解决了这一难题。音乐搜索是采用Java语言开发的简易的互联网音乐搜索引擎,它是集网络爬虫(采用java内置的多线程及Socket技术)和基于B/S结构的Web查询(Struts框架)为一体的搜索软件。该系统能完成对互联网的音乐信息的采集、分析、分类、保存和查询等功能;经过测试与分析,说明本系统运行稳定、可靠,具有一定的实用价值。关键字:音乐;搜索软件;网络爬虫;Socket技术;Struts框架;多线程DesignandImplementationofWebMusicSearchSoftwareAbstractAtpresent,inthevastnetworkresource,searchengineforallInternetsurfingusersprovidestheoneentrance.NoexaggerationtosaythatalluserscanbereachedanyoneplaceontheInternetbytheaidofsearchengines.SoithasbecomethemostusingonlineservicesforpeopleexceptE-mail.However,withtherapiddevelopmentoftheInternet,thecontradictionsbetweenmassiveinformationandobtainingthecapacityofrequiredinformationisobviousdaybyday.Searchingforinformationinvastnetworkresourcesislikelookingforneedlesinahaystack,butsearchenginejustsolvesthisproblem.Thesoftwareisaboutwebmusicsearch.ItusesjavatodevelopasimpleInternetmusicsearchengine,andalsogathersthenet-reptile(intra-builderjavamulti-threadandsockettechnology)andwebsearchbasedonB/Sconstruction(strutsframework)asawholesearchsoftware.Itcanachievethecollection,analysis,classification,storageandsearchofInternetmusicinformation.Throughthetestandanalysis,itshowsthissystemisstable,reliable,andhassomepracticalvalues.Keywords:Music;SearchSoftware;Crawl;SocketTechnology;StrutsStructure;Multi-thread目录论文总页数:21页1引言 11.1课题背景 11.2国内外研究现状 11.3本课题研究的意义 21.4本文的主要工作 22音乐搜索软件的需求分析 22.1搜集信息 22.2整理信息 22.3接受查询 33音乐搜索软件的设计 33.1系统总体流程 33.2系统部件介绍 44音乐搜索软件的具体实现 54.1数据设计 54.2网络爬虫设计 54.2.1遍历算法 64.2.2模拟浏览器 84.2.3正则表达式 94.2.4数据分析 124.3采用java多线程技术 134.4查询端 144.4.1Struts框架 144.4.2Struts包内容 144.4.3Struts体系结构 155运行测试与分析 175.1软件试运行 175.2软件分析 19结论 19参考文献 19致谢 20声明 21PAGE第20页共21页1引言1.1课题背景面对浩瀚的网络资源,搜索引擎为所有网上冲浪的用户提供了一个入口,毫不夸张的说,所有的用户都可以从搜索出发到达自己想去的网上任何一个地方。因此它也成为除了电子邮件以外最多人使用的网上服务。随着因特网的迅猛发展、WEB信息的增加,用户要在信息海洋里查找信息,就如同大海捞针一样,搜索引擎恰好解决了这一难题(它可以为用户提供信息检索服务)。但是随着Internet的发展,搜索引擎也面临着海量信息和人们获取所需信息能力的矛盾。因此,信息的高效搜索显得格外重要。1.2国内外研究现状 搜索引擎技术伴随着WWW的发展是引人注目的。搜索引擎大约经历了三代的更新发展:第一代搜索引擎出现于1994年。这类搜索引擎一般都索引少于1,000,000个网页,极少重新搜集网页并去刷新索引。而且其检索速度非常慢,一般都要等待10秒甚至更长的时间。在实现技术上也基本沿用较为成熟的IR(InformationRetrieval)、网络、数据库等技术,相当于利用一些已有技术实现的一个WWW上的应用。在1994年3月到4月,网络爬虫WorldWebWorm(WWWW)平均每天承受大约1500次查询。大约在1996年出现的第二代搜索引擎系统大多采用分布式方案(多个微型计算机协同工作)来提高数据规模、响应速度和用户数量,它们一般都保持一个大约50,000,000网页的索引数据库,每天能够响应10,000,000次用户检索请求。1997年11月,当时最先进的几个搜索引擎号称能建立从2,000,000到100,000,000的网页索引。Altavistawww.biyezuopin.cc搜索引擎声称他们每天大概要承受20,000,000次查询。2000年搜索引擎2000年大会上,按照Google公司总裁LarryPage的演讲,Google正在用3,000台运行Linux系统的个人电脑在搜集Web上的网页,而且以每天30台的速度向这个微机集群里添加电脑,以保持与网络的发展相同步。每台微机运行多个爬虫程序搜集网页的峰值速度是每秒100个网页,平均速度是每秒48.5个网页,一天可以搜集超过4,000,000网页。搜索引擎一词在国内外因特网领域被广泛使用,然而他的含义却不尽相同。在美国搜索引擎通常指的是基于因特网的搜索引擎,他们通过网络机器人程序收集上千万到几亿个网页,并且每一个词都被搜索引擎索引,也就是我们说的全文检索。著名的因特网搜索引擎包括FirstSearch、Google、HotBot等。在中国,搜索引擎通常指基于网站目录的搜索服务或是特定网站的搜索服务,本人这里研究的是基于因特网的搜索技术。1.3本课题研究的意义搜索引擎自动从英特网搜集信息,经过一定整理以后,提供给用户进行查询的系统。英特网上的信息浩瀚万千,而且毫无秩序,所有的信息像汪洋上的一个个“小岛”,网页链接是这些“小岛”之间纵横交错的桥梁,而搜索引擎,则为你绘制一幅一目了然的信息地图,供你随时查阅。搜索技术的意义在此。1.4本文的主要工作搜索引擎是根据用户的查询请求,查找信息返回给用户。为了保证用户查找信息的精度和新鲜度,搜索引擎需要建立并维护一个庞大的索引数据库。一般的搜索引擎由网络爬虫程序、数据分析,查询数据等部分组成。本文的各章分配是这样安排的:第一章介绍系统的开发背景;第二章介绍系统的需求分析;第三章介绍系统的总体结构;第四章介绍系统的详细设计;第五章测试与运行本系统;最后是全文的总结。2音乐搜索软件的需求分析随着因特网的迅猛发展、WEB信息的增加,用户要在信息海洋里查找信息,就像大海捞针一样,搜索引擎恰好解决了这一难题(它可以为用户提供信息检索服务)。但是随着Internet的发展,搜索引擎也面临着海量信息和人们获取所需信息能力的矛盾。一个好的搜索引擎不再仅凭借数据库大小、更新频率、检索速度、对多语言的支持这几个基本特性来衡量,如何从庞大的资料库中精确地找到正确的资料,被公认为是下一代搜索技术的竞争要点,智能化、个性化特色的新型引擎成为未来搜索引擎的发展趋势。搜索引擎需要实现互联网信息的快速查询,要实现以下功能。2.1搜集信息搜索引擎的信息搜集基本都是自动的。搜索引擎利用称为网络蜘蛛(spider)的自动搜索机器人程序来连上每一个网页上的超连结。机器人程序根据网页链到其它网页中的超链接,就像日常生活中所说的“一传十,十传百……”一样,从少数几个网页开始,连到数据库上所有到其他网页的链接。理论上,若网页上有适当的超链接器人便可以遍历绝大部分网页。2.2整理信息搜索引擎整理信息的过程称为“建立索引”。搜索引擎不仅要保存搜集起来的信息,还要将它们按照一定的规则进行编排。这样,搜索引擎根本不用重新翻查它所有保存的信息而迅速找到所要的资料。想象一下,如果信息是不按任何规则地随意堆放在搜索引擎的数据库中,那么它每次找资料都得把整个资料库完全翻查一遍,如此一来再快的计算机系统也没有用。2.3接受查询用户向搜索引擎发出查询,搜索引擎接受查询并向用户返回资料。搜索引擎每时每刻都要接到来自大量用户的几乎是同时发出的查询,它按照每个用户的要求检查自己的索引,在极短时间内找到用户需要的资料,并返回给用户。目前,搜索引擎返回主要是以网页链接的形式提供的,这些通过这些链接,用户便能到达含有自己所需资料的网页。通常搜索引擎会在这些链接下提供一小段来自这些网页的摘要信息,以帮助用户判断此网页是否含有自己需要的内容。3音乐搜索软件的设计根据上一章需求分析的情况,结合本软件所要需实现的功能,进行设计。本章主要介绍该软件的设计流程及步骤。3.1系统总体流程图3.1系统结构图3.1是本系统结构图,该系统分两大模块:数据获取模块和用户查询模块所示首先通过网络爬虫从Internet上获取信息(模拟浏览器和遍历算法)保存在爬虫(crawl)的缓存中进行分析如果存在音乐连接得出音乐的名字和url,然后调用javabean进行把得到的数据写入数据库,客户端过浏览器访问TOMCAT(javaweb中间件)对数据进行查询,得到用户查询结果。3.2系统部件介绍(1)网络爬虫网络爬虫(crawl),是一个功能很强的WEB扫描程序。它可以在扫描WEB页面的同时检索其内的超链接并加入扫描队列等待以后扫描。因为WEB中广泛使用超链接,所以一个crawl程序理论上可以访问整个WEB页面。为了保证网络机器人遍历信息的广度和深度需要设定一些重要的链接并制定相关的扫描策略。(2)搜索网络机器人将遍历得到的页面存放在系统缓存中,为了提高检索效率,用正则表达式对得到的文本数据进行分析,分析出music的超链接和名字并保存到mysql数据库内方便查找而且执行效率很高。用户输入搜索条件后搜索程序将通过数据库进行检索然后把符合查询要求的数据库按照一定的策略进行分级排列并且返回给用户。(3)基于Struts框架的client端Struts是一个基于SunJ2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(messageresources)整合到一个统一的框架中。(4)Tomcat的Web服务器Web服务器是在网络中为实现信息发布、资料查询、数据处理等诸多应用搭建基本平台的服务器。Web服务器如何工作:在Web页面处理中大致可分为三个步骤:第一步,Web浏览器向一个特定的服务器发出Web页面请求;第二步,Web服务器接收到Web页面请求后,寻找所请求的Web页面,并将所请求的Web页面传送给Web浏览器;第三步,Web服务器接收到所请求的Web页面,并将它显示出来。Tomcat是一个开放源代码、运行servlet和JSPWeb应用软件的基于Java的Web应用软件容器。Tomcat由Apache-Jakarta子项目支持并由来自开放性源代码Java社区的志愿者进行维护。TomcatServer是根据servlet和JSP规范进行执行的,因此我们就可以说TomcatServer也实行了Apache-Jakarta规范且比绝大多数商业应用软件服务器要好。(5)mysql的关系型数据库MySQL是最受欢迎的开源SQL数据库管理系统,它由MySQLAB开发、发布和支持。MySQLAB是一家基于MySQL开发人员的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。MySQL是MySQLAB的注册商标。MySQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。MySQL服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass-deployed)的软件中去。MySQL网站()提供了关于MySQL和MySQLAB的最新的消息。4音乐搜索软件的具体实现4.1数据设计本系统的开发采用mysql数据库,它提供强大的数据查询功能,能快速的查找出用户需要的信息。(1)数据库名:musicexplorer(2)表mappingmusic(主要用音乐url和音乐名字的映射)(3)表结构,如图4.1所示。图4.1数据库结构在图4.1中,各字段名的含义如下:①m_name,音乐名称;②m_url,音乐的url地址;③m_type,音乐的类型;④m_date,采集音乐的时间。4.2网络爬虫设计网络爬虫的主要功能是对互联网上的网页进行抓取,对网页进行分析提取出音乐数据方便以后的查询.其功能主要体现在对网页的遍历,和正则比对分析提取出web音乐信息。输入一个入口网址,和采集的网页数量网络爬虫程序将自动遍历网站信息保存到关系数据库中,方便快速查询在爬虫的状态栏目显示当前正分析的网页信息。在爬虫的文本框里显示已经分析采集到的音乐名称。4.2.1遍历算法crawl程序发现超连接后并不调用自己本身而是把超连接加入到等待队列中。当crawl程序扫描完当前页面后会根据制定的策略访问队列中的下一个超连接地址。主要通过crawl.java类来实现。虽然这里只描述了一个队列,但在实际编程中用到了二个队列,每个队列都保存着同一处理状态的URL。(1)等待队列:在这个队列中,URL等待被crawl程序处理。新发现的URL也被加入到这个队列中处理队列当crawl程序开始处理时,他们被送到这个队列中错误队列如果在解析网页时出错,URL将被送到这里。该队列中的URL不能被移入其他队列中。(2)完成队列:如果解析网页没有出错,URL将被送到这里。该队列中的URL不能被移入其它队列中在同一时间URL只能在一个队列中,我们把它称为URL的状态。在这个过程中,当一个URL被加入到等待队列中时crawl程序就会开始运行。只要等待队列中有一个网页或crawl程序正在处理一个网页,程序就会继续他的工作。当等待队列为空并且当前没有任何网页时,crawl程序就会停止它的工作。遍历算法源程序如下所示:publicvoidcrawlx(StringstartUrl,intmaxUrls)throwsException{ Stringdispalystr=""; mp3m=null; intn=0; Stringdate=null; da=newDatabase();HashSetcrawledList=newHashSet();LinkedHashSettoCrawlList=newLinkedHashSet();Searchsea=null;Analyzerana=null;toCrawlList.add(startUrl);SimpleDateFormatsetDateFormat=newSimpleDateFormat("yyyy/MM/ddkk:mm:ss");date=setDateFormat.format(Calendar.getInstance().getTime());while(toCrawlList.size()>0){if(maxUrls!=-1){if(crawledList.size()==maxUrls){break;}}//GetURLatbottomofthelist.Stringurl=(String)toCrawlList.iterator().next();//RemoveURLfromthetocrawllist.toCrawlList.remove(url);//增加已处理的URL到crawledListcrawledList.add(url);if(hasBeenVisit(url)){System.out.println("重复:"+url+"已经去掉");}else{addchain.add(url);sea=newSearch(url);StringpageContents=sea.getMessage();//downloadPage(verifiedUrl);if(pageContents!=null&&pageContents.length()>0){//从页面中获取有效的链接ana=newAnalyzer(pageContents,url);ArrayListlinks=ana.linkAnalyzer();//retrieveLinks(verifiedUrl,pageContents,crawledList,limitHost)Listmp3link=ana.mp3analyzer();toCrawlList.addAll(links);for(Iteratorits=mp3link.iterator();its.hasNext();){ m=(mp3)its.next();Stringsql="INSERTINTO`mappingmusic`(`m_url`,`m_name`,`m_type`,`m_date`)VALUES('"+m.getUrl()+"','"+m.getName()+"','"+m.getType()+"','"+date+"')"; da.executeInsert(sql); dispalystr+="名字:"+m.getName()+"\n"+"类型:"+m.getType()+"\n"+"地址:"+m.getUrl()+"\n"; this.jtextpane.setText(dispalystr); //System.out.println("名字:"+m.getName()+"\n"+"地址:"+m.getUrl()+"\n"+"类型:"+m.getType()); }this.jl.setText(url);System.out.println("正在解析:"+url);Thread.sleep(300);}n++;}}jl.setText("已经完成采集任务共分析"+n+"地址");System.out.println("共分析"+n+"地址");}4.2.2模拟浏览器模拟浏览器主要是从web服务器上获取网页并把网页保存到本地缓冲区中,方便后续程序分析分类。模拟浏览器主要通过search.java类来实现。网络API通过提供URL类让用户能在源代码层使用URL,每一个URL对象都封装了资源的标识符和协议处理程序。获得URL对象的途径之一是调用URI对象的toURL()方法。但是这种选择不一定方便,作为代替,可以调用URL构造函数来建立URL对象,也可以调用URL的方法来提取URL的组件,打开一个输入流(inputstream)从资源中读取信息,获得某个能方便检索资源数据的对象的引用,比较两个URL对象中的URL,获得到资源的连接对象,该连接对象允许代码了解(并写入)更多的资源的信息。URL类有六个构造函数。其中最简单的是URL(Stringurl),它有一个String类型的参数,把URL分解为自己的组件,并把这些组件存储在一个新的URL对象中。如果某个URL没有包含协议处理程序或该URL的协议是未知的,其它的五个构造函数会产生一个.MalformedURLException对象。下面的代码展示了网络爬虫调用网络API提供的URL类从目标服务器获取数据保存到缓冲区中的过程。模拟浏览器源程序如下所示:booleanmessagedig()throwsException{ URLurl; HttpURLConnectionhttp; java.io.InputStreamurlstream=null; url=newURL(this.url); try{ http=(HttpURLConnection)url.openConnection(); http.setRequestProperty("User-Agent","Mozilla/3.0"); http.connect(); urlstream=http.getInputStream(); }catch(Exceptione){ //TODO自动生成catch块 System.out.println("错误的URL地址"+url); returnfalse; } java.io.BufferedReaderreader=newjava.io. BufferedReader(newjava.io.InputStreamReader(urlstream)); Stringcurrentline="",sumstring=""; try{ while((currentline=reader.readLine())!=null){ sumstring+=currentline;//保存在网络缓冲区中 } setMessage(sumstring); newString(sumstring.getBytes(),"gbk"); } catch(.SocketExceptione){ System.out.println("错误的文件格式:"+url.getPath()); } returntrue; }4.2.3正则表达式正则表达式是一门语言。有许多正则表达式语法、选项和特殊字符,在Pattern.java源文件中大家可以查看。可能比想象中的要复杂。组合逻辑是下一步的事情。只要正确运用,正则表达式能够在字符串提取和文本修改中起到很大的作用。正则表达式在本程序中的作用是分析网页中存在的超链接并保存到等待队列中,方便爬虫遍历网页获取数据,并把网页中存在的音乐信息提取出来为爬虫储存数据做准备。(1)句点符号假设你在玩英文拼字游戏,想要找出三个字母的单词,而且这些单词必须以“t”字母开头,以“n”字母结束。另外,假设有一本英文字典,你可以用正则表达式搜索它的全部内容。要构造出这个正则表达式,你可以使用一个通配符——句点符号“.”。这样,完整的表达式就是“t.n”,它匹配“tan”、“ten”、“tin”和“ton”,还匹配“t#n”、“tpn”甚至“tn”,还有其他许多无意义的组合。这是因为句点符号匹配所有字符,包括空格、Tab字符甚至换行符如:①正则表达式:t.n②匹配:tan,Ten,tin,ton,tn,t#n,tpn,等。(2)方括号符号为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号(“[]”)里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。也就是说,正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因为在方括号之内你只能匹配单个字符:①正则表达式:t[aeio]n②匹配:tan,Ten,tin,ton(3)“或”符号如果除了上面匹配的所有单词之外,你还想要匹配“toon”,那么,你可以使用“|”操作符。“|”操作符的基本意义就是“或”运算。要匹配“toon”,使用“t(a|e|i|o|oo)n”正则表达式。这里不能使用方扩号,因为方括号只允许匹配单个字符;这里必须使用圆括号“()”。圆括号还可以用来分组,具体请参见后面介绍。①正则表达式:t(a|e|i|o|oo)n②匹配:tan,Ten,tin,ton,toon(4)表示匹配次数的符号表4.1显示了表示匹配次数的符号,这些符号用来确定紧靠该符号左边的符号出现的次数。表4.1表示次数的符号符号次数#0次或者多次+1次或者多次?0次或者一次{n}恰好n次{n,m}从n次到m次假设要在文本文件中搜索美国的社会安全号码。这个号码的格式是999-99-9999。用来匹配它的正则表达式如图一所示。在正则表达式中,连字符(“-”)有着特殊的意义,它表示一个范围,比如从0到9。因此,匹配社会安全号码中的连字符号时,它的前面要加上一个转义字符“\”。正则表达源程序如下:publicclassCompareStr{publicbooleancomparestring(Stringoristring,Stringtostring)//判断是否存在指定表达式{ Patternp=null;//正则表达式 Matcherm=null;//操作的字符串 booleanb; p=Ppile(oristring,Pattern.CASE_INSENSITIVE);m=p.matcher(tostring); b=m.find();returnb;} publicStringreplace(Stringorigin,StringtoString,Strings){//替换字符 Patternp=null; Matcherm=null; p=Ppile(origin,Pattern.CASE_INSENSITIVE); m=p.matcher(toString); returnm.replaceAll(s); } publicStringgetString(Stringreg,Strings){//返回得到的字符 Stringres; Patternp=null; Matcherm=null; p=Ppile(reg,Pattern.CASE_INSENSITIVE); m=p.matcher(s); if(m.find()){ returnm.group(); }4.2.4数据分析因为Web中的信息都是建立在HTML协议之上的,所以网络机器人在检索网页时的第一个问题就是如何解析HTML。在解决如何解析之前,先来介绍HTML中的几种数据。①文本:除了脚本和标签之外的所有数据。②注释:程序员留下的说明文字,对用户是不可见的。③简单标签:由单个表示的HTML标签。④开始标签和结束标签:用来控制所包含的HTML代码。在进行解析的时候不用关心所有的标签,只需要对其中一种重要的进行解析即可。本软件只关心超连接标签,下面介绍了在本软件中如何使用。(1)超连接标签超连接定义了WWW通过Internet链接文档的功能。他们的主要目的是使用户能够任意迁移到新的页面,这正是网络爬虫最关心的标签。publicArrayListlinkAnalyzer()//分析网页上存在的超链接.保存在等待队列中publicListmp3analyzer()//分析网页上存在的音乐超链接和音乐名称.保存到数据库中方便查询(2)超链接分析以下是本软件所用到的关键源程序(超链接),代码如下: if(parestring("href",firstword)&&firstword.indexOf("{")<0&&firstword.indexOf("}")<0&&firstword.indexOf("'")<0&&firstword.indexOf(";")<0&&firstword.indexOf(".css")<0&&firstword.indexOf(".ico")<0&&!firstword.endsWith("mp3")){ Stringout=null; out=compstr.replace("href=|\"",firstword,""); if(out.startsWith("http://")){//完整的路径 li.add(out); } else{//相对的路径 try{ if(webadd.endsWith("html")||webadd.endsWith("htm")){ intm=webadd.lastIndexOf("/"); Strings=webadd.substring(0,m); webadd=s; System.out.println("debug"+s+"/"+out); } } catch(StringIndexOutOfBoundsExceptione){ } if(out.startsWith("/")){ /*intm=webadd.lastIndexOf("/"); webadd=webadd.substring(0,m); System.out.println("dafa"+webadd); */ out=webadd+out; li.add(out); } else{ out=webadd+"/"+out; li.add(out); } } } i++; }4.3采用java多线程技术线程是Java的一大特性,它可以是给定的指令序列、给定的方法中定义的变量或者一些共享数据(类一级的变量)。在Java中每个线程有自己的堆栈和程序计数器(PC),其中堆栈是用来跟踪线程的上下文(上下文是当线程执行到某处时,当前的局部变量的值),而程序计数器则用来跟踪当前线程正在执行的指令。(1)线程的生命周期一个线程的的生命周期可以分成两阶段:生存(Alive)周期和死亡(Dead)周期,其中生存周期又包括运行状态(Running)和等待状态(Waiting)。当创建一个新线程后,这个线程就进入了排队状态(Ready),当线程中的方法start()被调用时,线程就进入生存周期,这时它的方法isAlive()始终返回真值,直至线程进入死亡状态。(2)线程的实现有两种方法可以实现线程,一种是扩展java.lang.Thread类,另一种是通过java.lang.Runnable接口。所实现的代码如下:if(ThreadNum>0) { for(inti=0;i<3;i++){ t[i]=newThread(crawl,String.valueOf(i)); t[i].start(); } }else{ t[0]=newThread(crawl); t[0].start(); } }4.4web查询端4.4.1Struts框架易用性和重用性的优点,同时简化了基于MVC的web应用程序的开发。本章详细讨论struts架构。我们将看到struts是如何清晰地区分控制,事务逻辑和外观,从而简化了开发应用程序过程的。我们还将介绍struts提供的类如何使得开发工作更加简单,这些类包括:(1)控制程序流程的类;(2)实现和执行程序事务逻辑的类;(3)自定义的标记库使得创建和验证HTML表单更加容易。4.4.2Struts包内容文件夹jakarta-struts-1.0.2包含两个目录,lib和webapps。在lib目录中有使用struts创建应用程序是所需的文件,如表4.2所示。表4.2系统包结构文件描述jdbc2_0-stdext.jar包含JDBC2.0OptionalPackageAPI类。如果我们要使用struts提供的数据资源,就需要将这个文件拷贝到WEB-INF\lib下Struts.jar包含struts中所有的java类。同样也需要拷贝到WEB-INF\lib下*.tld标记库描述器文件,描述了多个struts标记库中的自定义标记。同样要拷贝到WEB-INF\lib下在webapps目录下这样一些下文件,如表4.3所示。表4.3webapp目录结构Web应用程序描述Struts-blank.war一个简单的web应用程序Struts-documentation.war包含struts站点上所有struts文档Struts-example.warStruts很多特性的示范Struts-exercisetaglib.war主要用于对自定义标签库进行增加而使用的测试页,但也可以示范如何使用struts标记Struts-template.war包含struts模板标记的介绍和范例Struts-upload.war一个简单的例子,示范如何使用struts框架上传文件4.4.3Struts体系结构接下来从MVC角度观察struts框架中的组件,其框架中三个部分:模型,视窗和控制器。模型包括一个JavaBean组件Database,它有属性,代表用户输入的名字。它提供了get/set方法,分别用于读取和设置属性,它还提供一个executeInsert()方法,负责把属性保存到持久化存储系统中,如数据库或文件系统。对于更为复杂的Web应用,JavaBean组件可以作为EJB或Web服务的前端组件(组件Database采用数据库连接池技术有效的利用率数据资源)。视图包括一个JSP文件musicview.jsp,它提供用户界面,接受用户输入的姓名。视图还包括一个searchFormBean,它用来存放表单数据,并进行表单验证,如果用户没有输入姓名就提交表单,将返回出错信息。控制器包括一个Action类searchAction.java,它完成三项任务:①进行业务逻辑;②调用模型组件Database的executequery()方法查询数据库;③决定将合适的视图组件返回给用户。(1)设计细节①关键字反选,如图4.2所示。图4.2关键字反选代码如下:Stringlight_dispaly(Strings,Stringkey){//高亮显示关键字Stringresult=null; result=s.replaceAll(key,"<fontstyle='COLOR:#e10900'>"+key+"</font>");//替换成红色的字体returnresult; }②分页,如图4.3所示。图4.3分页StringpulgPage(Stringsumpage,Stringcurrentpage,Stringkey,Stringmod){//分页构造 Stringlastpage=""; Stringlastpage_be="<TDvAlign=bottomnoWrap><FONTsize=-1><ahref='search.do?key="+key+"&mode="+mod+"&page="; Stringlastpage_af="'>上一页</a>: </FONT></TD>"; Stringbefore_enu="<TDvAlign=bottomnoWrap><FONTsize=-1><spanclass='i'><ahref='search.do?key="+key+"&mode="+mod+"&page="; Stringprocess_enu="'>"; Stringafter_enu_cur="</span></FONT></TD><TDvAlign=bottomnoWrap> </TD>"; Stringbefore_enu_cur="<TDvAlign=bottomnoWrap><FONTsize=-1><spanclass='i'>"; Stringafter_enu="</a></span></FONT></TD><TDvAlign=bottomnoWrap> </TD>"; Stringnextpage=""; Stringnextpage_be="<TDvAlign=bottomnoWrap><FONTsize=-1><ahref='search.do?key="+key+"&mode="+mod+"&page="; Stringnextpage_af="'>下一页</a></FONT></TD>"; Stringpageview=""; intsum=Integer.parseInt(sumpage); lastpage=lastpage_be+String.valueOf(Integer.parseInt(currentpage)-1)+lastpage_af; nextpage=nextpage_be+String.valueOf(Integer.parseInt(currentpage)+1)+nextpage_af; if(currentpage.equals("1")){ lastpage=""; } if(currentpage.equals(sumpage)){ nextpage="";} pageview=lastpage; for(inti=1;i<=sum;i++){ if(String.valueOf(i).equals(currentpage)){ pageview+=before_enu_cur+String.valueOf(i);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 淮阴师范学院《田径与户外运动(2)》2021-2022学年第一学期期末试卷
- 淮阴师范学院《市场营销学》2021-2022学年第一学期期末试卷
- 淮阴师范学院《人文地理学A》2021-2022学年第一学期期末试卷
- 淮阴师范学院《篮球A(1)》2021-2022学年第一学期期末试卷
- 黄山学院《代数选讲》2023-2024学年第一学期期末试卷
- 淮阴师范学院《国画山水》2021-2022学年第一学期期末试卷
- 淮阴工学院《数据库原理及应用1》2021-2022学年期末试卷
- 淮阴工学院《汽车电器与电控系统》2022-2023学年期末试卷
- 淮阴工学院《先进材料仿真与模拟》2023-2024学年第一学期期末试卷
- DB6505T191-2024农田防护林抚育管护技术规程
- 买房你不得不知道的秘密课件
- 学生突发疾病、意外伤害事故登记表
- 二年级音乐上册教学计划苏少版
- 骨科常见体位和摆放课件
- 药物代谢动力学-中国药科大学中国大学mooc课后章节答案期末考试题库2023年
- 闻闸:领导者言语表达艺术
- 网店运营PPT全套完整教学课件
- GB/T 16895.13-2022低压电气装置第7-701部分:特殊装置或场所的要求装有浴盆或淋浴的场所
- 四年级上册简便计算专项练习(已排版可直接下载打印)
- 高考日语基础归纳总结与练习(一轮复习)
- 目标管理PPT完整版
评论
0/150
提交评论