网上新闻资源自动采集系统方案_第1页
网上新闻资源自动采集系统方案_第2页
网上新闻资源自动采集系统方案_第3页
网上新闻资源自动采集系统方案_第4页
网上新闻资源自动采集系统方案_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

./毕业设计〔论文〕开题报告材料1、开题报告2、文献综述3、文献翻译综述本课题国内外研究动态,说明选题的依据和意义随着互联网技术的迅猛发展,人们获取资讯的方式不再是仅仅从报纸或者电视。更多的人选择上网浏览或者是通过手机获取。相比前面的两种方式,后者更具与时性,而且信息量更大,传播X围更广。从而衍生了第五媒体的说法,这也带动了相当的周边产业的发展。而这些优点的体现同样需要一个强大的技术平台和相当数量的工作人员来支撑,本文将通过对资源采集系统的介绍,为构建这样一个低成本的信息共享平台提供建议。新闻采集系统的现状动态网页技术的出现彻底的改变了传统互联网的模式。它让站长可以更加轻松的更新站点的内容信息。同时也让网络的应用变得更加丰富。以动态网页技术实现的应用如雨后春笋般出现。新闻采集系统也在那个时期开始发展。从最初的ASP版本到现在的多元化语言的版本,虽然架构一次次被更新,功能越来越完善,当然系统的设计目标始终都没有发生改变,实现资源的自动采集来减少人工录入所增加的成本。如今,新闻采集系统技术已经非常成熟。市场的需求量也非常大。在百度中输入"新闻采集系统"可以搜到近393,000条信息,可见这一应用的广泛程度。特别是一些新兴的站点,主要以广告盈利为目的,如果使用新闻采集系统那可以让站长不用去操心如何更新内容,一但架设好就几乎可以"一劳永逸"了。项目提出的背景通常对于新闻类专业或者大型的门户,都拥有自己的新闻渠道或者专门的采编人员,这往往需要很高的成本。新闻采集系统〔手机应用版〕用于在资源相对匮乏的情况下,使用程序的方式来进行远程抓取。在没有人工干预的情况下可以实现自动采集和资源的共享。一方面可以保证信息更与时更有效,另一方面可以提高工作效率和减轻编辑的负担。为企业提供可靠的信息来源和降低相当的成本。主流系统的分析总的来说目前的新闻采集系统已经比较成熟,主流的新闻采集系统基本上可以实现以下功能:对目标进行信息自动抓取,支持HTML页面内各种数据的采集,如文本信息,URL,数字,日期,图片等。用户对每类信息自定义来源与分类支持用户名与密码自动登录支持记录唯一索引,避免相同信息重复入库支持智能替换功能,可以将内容中嵌入的所有的无关部分如广告去除支持多页面文章内容自动抽取与合并支持下一页自动浏览功能数据直接进入数据库而不是文件中,因此与利用这些数据的程序或者桌面程序之间没有任何耦合支持数据库表结构完全自定义,充分利用现有系统保证信息的完整性与准确性,绝不会出现乱码支持各种主流数据库,如MSSQL、Access、MySQL、Oracle、DB2、Sybase等讨论的X围上面讨论的新闻采集系统与本文所讨论的略有不同,主要是我们的目标有些差别。传统的新闻采集系统都是基于WWW。采集的困难程度要略高与WAP。因为WWW页面内容相对复杂而且更加丰富,最重要的是它没有类似XML的约束性,网页源文件的格式内容可能会因为编写人员的疏忽存在很多错误,这将导致我们在抓取的时候可能会碰到很多解析问题,比如符号的丢失,不能匹配等等,对于采集系统最重要的是能够匹配到想要抓取的内容,如果不能解析网页的源代码不能建立完整的目录树,也就是结构不完整这将很可能造成我们在采集特定内容的时候出现偏差或者采集不成功。所以,对于采集WWW的不光需要采集程序的规则编写者有一定的判断力,而且要求的编写人员能够按照W3C规X来编写页面。但是,现在的情况是往往用户的浏览器能排除大量的错误,所以会给真正的开发人员一个错误的信号认为自己的页面没有问题,这时候我建议将页面提交到W3C的检验工具来进行检测,这是一个相对繁琐的步骤。WAP的优势这时候就体现出来了,因为它严格遵守这些规X,如果出现标记不能匹配或者是不能识别的标签时将会报错,这对于测试人员来说无疑是个好消息,这将大大的降低测试的成本,加快项目的建设。对于采集程序的开发者来说也绝对是个好消息,我们在编写规则的时候就无须考虑太多意外的情况,这为我们这个项目的提出也奠定了一定的基础。当然,随着手机上网的普与和3G网络的建成,越来越多的人已经开始习惯使用手机来获取信息,这已经成为一个趋势,可能在未来的什么时候电脑也将被手机所代替,无线网络最终将代替现有的电缆线路。我们抓住这个形式,将要开发基于手机浏览器平台的浏览内容,我们采集的对象也是WAP,可以将内容无缝嵌入到现有的栏目中,真正实现即抓即用。研究的基本内容,拟解决的主要问题功能规划新闻采集采集系统的运行过程是个根据任务列表不断的读取目标站点,采集需要的信息的一个过程。在读取新闻的时候需要维护一个连接,需要分析各种各样的网络连接状况,而系统的维护人员需要针对专门的页面定制一套规则,用来解析各个需要的信息部分,并且这套规则必须符合一定的规X。我们将制定一些任务的规则规X:页面地址:列表的入口地址附加参数:针对详细内容的地址附加的一些参数〔比如:显示全文〕列表规则〔正则表达式〕:ExceptWords:用于替换列表中不需要的字符TextRegEXP:用于筛选新闻条目〔包含:和地址〕内容规则〔正则表达式〕:ImgRegexp:用于获取新闻图片的地址TextBegMark:用于标记文章内容的开始TextEndMark:用于标记文章内容的结束系统处理流程图片采集图片的采集不同与新闻的采集,虽然在规则上类似,而且在整个抓取过程中的操作都接近相同,但是在格式上要复杂。文字主要是存在编码的问题,而图片要考虑压缩和格式的问题,我们暂时考虑采集JPG和GIF两种格式,因为在手机上这两种是最常用的。在网络上抓取到图片之后下载到本地需要保持格式的一致性。由于JPG和GIF的压缩编码算法不同,需要分开来处理。功能设计任务配置模块任务的配置是整个系统中最重要的部分,新闻采集系统能正常工作的首要前提就是需要对每个采集任务进行配置。任务配置包括有目标地址以与页面规则的定义,力求可以将用户的文本定义转换成要求更严格的正则表达式,以保证采集内容的正确性。采集功能模块采集的过程主要是分析资源,并加入到我们数据库中的过程。采集过程应充分考虑资源的正确性、完整性和采集过程的稳定性。保证资源的编码正确和过程的透明性。资源检索模块资源的采集是我们最终的目标,我们需要实现对采集到资源能进行搜索、查询和编辑等操作,可以对资源进行筛选可控制。统计模块按照任务的归类可以对采集的进度和过程进行实时监测,让用户与时掌握采集资源的状况,如果发生的意外能马上获知并采取一定的措施来挽回。研究步骤、方法与措施系统配置程序的运行和维护需要一系列的配置,这对于整个系统都是至关重要的。配置人员需要一定的计算机技术基础,最终程序能否抓取到希望获取的信息都离不开系统的配置和一系列测试。存储接口为了兼顾到系统可能在不同的数据库环境中来使用,所以我们选择了数据库框架,这将大大方便系统的二次开发,替换数据库等情况。系统中使用了ibatis作为数据库访问框架。这也是一个开源的框架,相对于hibernate来说是轻量级,我们在这里使用它的理由是它比hibernate具有更小的操作粒度,以提高我们数据库的存储效率。计划任务我们的系统是由任务驱动的,每一个采集目标都是一个任务。维护人员需要做的就是任务的维护和计划的制定,这个计划任务类似于行程的安排,以备我们的任务调度框架来实现任务的控制。日志系统由于网络的不确定因素非常多,常常会导致程序出现超时等情况,我们需要一个强大的日志系统来记录这些问题,维护人员也需要分析日志来判断错误的原因。统计系统采集资源必须有一个完善的统计机制,用以记录当天或者是历史的记录。如果需要制定绩效考核方面的制度,统计系统将会提供一份完整的可维护性的文档。内容检索通过内容检索模块,可以实时获取当前入库的信息,让管理员可以对内容进行删除或者修改,其功能类似于新闻管理系统的后台,可以对抓取的信息进行有效的控制。新闻采集系统架构图工作进度序号时间内容108/12/11-09/01/12选题,熟悉课题相关背景209/01/13-09/02/19英文翻译,学习相关技术学习,开题报告309/02/20-09/02/27开题409/02/28-09/03/15完成总体设计509/03/16-09/04/03完成程序编码609/04/04-09/04/10中期检查709/04/11-09/05/01完成相关文档编写809/05/02-09/05/22撰写毕业论文初稿909/05/23-09/05/29修改毕业论文1009/05/30-09/06/05答辩主要参考文献Quartz-QuickStart[EB/OL].opensymphony/quartz/wikidocs/QuickStart.html〔加〕贝让,叶俊.iBATIS实战.人民邮电.2008-5-1《开源技术选型手册》编委会.开源技术选型手册.电子工业.2008-5-1孙卫琴.Java网络编程〔第3版〕——O’ReillyJava系列.电子工业.2007-3-1孙卫琴.JAVA面向对象编程.电子工业.2006-7-1埃克尔,陈昊鹏.Java编程思想〔第4版〕.机械工业.2007-6-1布洛克,潘爱民.EffectiveJava.机械工业.2003-1-1戈茨〔Goetz,B.〕.JAVA并发编程实践.电子工业.2007-6-1结城浩.JAVA多线程设计模式.中国铁道.2005-4-1六、指导教师审核意见:该同学就"网上新闻资源自动采集系统"这一课题,在准备开题报告期间通过针对性的文献阅读、分析和理解,基本明确了本毕业设计的总体需求和具体任务,基本提出了系统设计思想和与预期目标,开题报告内容较完整,内容和格式基本符合要求。同意开题。指导教师签字:20xx2月27日七、系、室、部〔研究所〕评议意见:适合本专业的毕业设计课题;不适合本专业的毕业设计课题;其它系、室、部〔研究所〕主任签字:年月日八、开题小组评审意见:开题小组组长签字:年月日九、学院领导〔答辩委员会〕审核意见:1.通过;2.完善后通过;3.未通过学院领导〔答辩委员会〕签字:年月日XX电子科技大学毕业设计〔论文〕文献综述新闻采集系统的技术与研究新闻采集系统以其高效和低廉的成本一直受到很多站长的青睐,特别是这个信息爆炸的时代,能与时掌握信息就能先掌握主动权,虽然这是一个热门应用,但是互联网上对于这方面的介绍相对比较少,也没有相应的规X,导致这个领域没有没有系统的知识结构和齐全的文档资源。其实,新闻采集的主要工作不仅仅在采集的过程,还有整个过程和任务的管理以与内容的分类。主要涉与到的技术有多线程技术,网络编程,数据库编程以与正则表达式的应用。多线程编程的能力是衡量一个程序员能力的重要指标。特别是当计算机硬件配置越来越好的情况下,能将系统的性能全部发挥出来需要程序员充分的调动和利用系统的资源,多核编程和多线程编程技术的正确使用无疑能提高程序的执行效率和提供更好的用户体验。[1]自网络诞生以来,这一革命性的技术给世界带来翻天覆地的变化,不能想象如果没有网络这个世界将会是怎么样。网络作为一个载体,承载着各式各样的应用。而这一切都离不开网络编程,它的热门也是必然,特别是"云计算"概念的提出,未来的所有应用可能都离不开网络。JAVA语言本身就是为网络而生,它非常的适合网络编程,强大的基础类库可以让开发人员很方便的开发网络应用。在新闻采集系统中,网络编程也是一个重要的部分,我们需要通过网络来采集新闻资源,这无非是非常考验JAVA的网络编程的稳定性和效率的。[2]正则表达式的历史可以追溯到十九世纪四十年代,它出现于理论计算机科学和自动控制理论和形式语言理论中。那么正则表达式是什么?维基百科中是这样来定义它的:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。一个正则表达式通常被称为一个模式,用来匹配一系列符合某个句法规则的字符串。在很多文本编辑器或其它工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。从这里我们大概就可以了解到,正则表达式是用来处理字符串用的,而且它的使用非常方便和广泛。[3]这或许这多少听起来有些复杂和深奥,但是在我们的日常生活和学习中会很不经意的需要使用它。比如在编写处理字符串的程序或者网页时,经常会有查找符合某些复杂规则的字符串,这个时候就需要正则表达式了。正如我们想要开发一个新闻采集系统,那第一步就是需要将目标页面解析,将文档规则化,并按照我们的规则从中抽取有用的数据。在这个过程中往往目标页面是复杂和难以预料的。这需要我们能够编写一条可以适用变化的正则表达式好正确无误的提取我们需要的数据,如果没有正则表达式我们在实现起来肯定会相当的困难。另外,举一个简单的例子。可能你在WINDOWS或者DOS平台下查找文件,这里会提到一个通配符的概念,一般都是"?"和"*"。问号一般用来代表一个长度的字符,而星号则用来匹配任意长度的字符串。其实与通配符类似,正则表达式也是用来匹配文本,但是它能更精确地描述你的需求,当然代价就是更复杂。[4]如果想正确的使用正则表达式来为工作带来便利和减轻负担,那必须对正则表达式的元符号有正确的理解,下面将列出一些常用的元符号和相应的解释。".":匹配任何单个字符,关键是它只能匹配单个字符。"$":匹配输入字符串的结束位置。"^":匹配输入字符串的开始位置。"*":匹配前面的子表达式零次或多次。"+":类似"*"但是它匹配最少为一次。"\":转义字符,即将下一个字符标记为特殊字符或一个原义字符。"[]":匹配包含在括号中的任意字符。"x|y":匹配X或者Y中的一个字符。"?":匹配零个或一个正好在它之前的字符。"{i,j}":匹配制定数目的字符,这些字符是定义在此表达式之前的。[5]正则表达式的应用X围非常广泛,在我们开发一些WEB应用程序的时候需要频繁的使用到它。比如我们需要对用户提交和输入的数据做一些验证和规X,那么我们就可以在客户端使用JAVASCRIPT对用户输入的数据进行制约,这样做可以带来很多的好处。一是在客户端做判断可以减轻服务器的压力,在对于并发大和流量高的应用系统上这可以大量的缓解服务端的带宽和资源。二是保证数据的安全性,网络本身是不安全的,我们需要对用户输入的数据进行限制,让用户输入我们所需要的格式和数据,否则会对程序带来无法预料的后果,对服务器的安全也产生严重的隐患。一般我们会对用户输入的电子格式进行检查,检测是否符合电子的格式,这一功能在平时系统中的应用还是颇为广泛的。同样,我们也经常使用正则表达式来提取网页文档中的元素。在我们的新闻采集系统中,需要对页面进行分析和解释,找出我们需要的具体内容,比如文章的标题,作者,内容和附图等等,这些内容的提取都需要我们通过正则表达式来实现,这正是它的强大指出,就是对文本的操控。如果没有这些特性,我们也许需要做大量的判断以确保我们找到的数据正式我们需要的,往往这样的方法不是万能可靠的,而正则表达式正好解决了我们的这个难点。另外我们通常也会遇到这样的问题,当我们需要导入大量数据的时候却发现原数据的格式不是我们想要的,一般情况下我们会使用正则表达式来解析这些数据,让其按照我们规定的格式来排列,这是一个完全自动的过程只要我们设计好正则表达式,如果换成手动的方式来实现的话我想这是一个非常艰巨的任务。[6]我们在新闻采集系统中使用MYSQL作为数据库,MYSQL是一个小型的关系型数据库管理系统,它的主要特点是体积小,速度快,成本低,尤其是开放源码这一特点,在许多中小型中为了降低的成本而选择了MYSQL作为数据库。MYSQL的查询中也支持正则表达式在,这一特性可以给开发和使用者带来非常大的便利和很好的用户体验。特别是在查询数据比较复杂的时候,通过先查询数据再通过后台处理的方法在效率上一定没有在数据库中直接筛选要高,而且可以更加明确业务和数据存取的功能层次,也降低了一定程度上的耦合。MYSQL的查询语句中使用正则表达式的格式为SELECT‘字符串’REGEXP‘表达式’,元符号与上面提到的类似,如果你有一定的正则表达式开发经验那你将可以很快的掌握在MYSQL中使用正则表达式这一技能。这就是正则表达式带来的便利。[7]总的来说,新闻采集系统的使用是十分广泛的。想设计一个强大的是新闻采集系统的件困难的事情,特别是需要考虑到各种各样的情况。同样你需要掌握多种技术,但是如果你掌握了这些技术那麽使用同样的技术不仅可以采集新闻,还可以采集多媒体资源,比赛信息,天气预报……前提是你必须熟悉各个方面的特点以与其中的原理,那就可以为实际的项目中增添各种各样的应用了。另外新闻采集系统的效率始终也是衡量系统性能的一个重要指标,在相同的硬件环境下,如果采用多线程的处理方式,将会给系统带来更好的用户体验。但是这要求开发人员能熟练的掌握多线程编程,能实时管理系统中正在运行的线程,保证他们可以正常的工作。《AthreadmonitoringsystemformultithreadedJavaprograms》一文中推荐了一种使用线程监视器的方法来监视当前系统的线程使用情况,在发生错误的时候可以即使的采用恢复或错误处理的策略来保证系统的正常运行,线程监视器起到一个管理的作用,这是一个值得推荐的方法。相关参考文献:霍斯特曼.JAVA核心技术卷II:高级特性.机械工业.2008-12-1资武成,贺志苗.SOCKET-BasedNetworkProgramingwithJAVA.<<XX师专学报>>20xx第02期X太芳.基于正则表达式技术的数据验证与应用.<<XX科技纵横>>20xx第35卷第04期赵仁杰,李众立.ImplementationofWebpageCleaningSystemExploitingStaticRegularExpression.<<微计算机信息>>20xx第23卷第36期钟京馗.JAVA中的正则表达式与其应用.<<电脑编程技巧与维护>>20xx第06期杜冬梅,许彩欣,苏健.TheapplicationofRegularExpressiononWebsystem.<<计算机系统应用>>20xx第08期〔奥〕科夫勒.MySQL5权威指南〔第3版〕.人民邮电.2006-12-1Moon,SChang,BM.AthreadmonitoringsystemformultithreadedJavaprograms.SIGPLANNotices2006vol.41<no.5>X邦桂,李正凡,LIUBang-gui,LIZheng-fan.ImplementationofSocketStreamCommunicationinJava.JOURNALOFEASTCHINAJIAOTONGUNIVERSITY卷<期>:200724<5>XingBo.PERFORMANCEPROMOTIONOFAKINDOFDATABASERETRIEVALWITHIBATIS.COMPUTERAPPLICATIONSANDSOFTWARE.200724<12>瓦特.正则表达式入门经典.2008-10-1佛瑞德〔Friedl,J.E.F.〕.精通正则表达式<第3版〕.电子工业.2007-7-1哈诺德.Java网络编程.中国电力.2005-11-1文献综述考核表指导教师对文献综述的评语:该同学针对"网上新闻资源自动采集系统",在阅读相关技术文献的基础上,对这些技术文献进行了适当的理解分析和归纳整理,完成的文献综述比较切题,基本符合要求。指导教师〔签名〕20xx2月27日建议成绩评阅小组或评阅人对文献综述的评语:评阅小组负责人或评阅人〔签名〕2009年2月27日建议成绩XX电子科技大学毕业设计〔论文〕外文文献翻译客户端编程文件的相关信息这个文件是从Client邮寄单子上的讨论演变过来的。虽然它指的是Client,但是这里所表示的概念同样地适用于Components,或是SUN的URLConnectiong,又或是其它为任何程序编缉语言服务的通信库。所以你会发现即使你不在使用Java和Client,你也会觉得它很有用。警告一个网页可以在任何时刻被重新设计。服务器发送不同的文件,浏览器就会显示新的内容。使用者很容易就可以适应并选择正确的,浏览器则通过传送信息。这个是由来自服务器的新文件所特定的。如果你的应用程序单单只是模仿浏览器的将会被中止。如果你想执行一个可靠的应用程序,你只能用那些已公布的应用程序编缉接口中。比如说,为了能用你的网络XX查看,你必须向网络供应商索取POP或者IMAP许可证。这个许可证就是由大多数电子用户端程序所支持的标准协议。如果你想拥有一个新的标签,那么搜索一下来自供应商的RSSfeed和用来显示的应用程序。ClientClient执行的请求,但它不会也不能调集这些请求。既然Client没有与客户直接接触,也不像HTML文件那样阐述内容,那么它就不允许传送到应用编程接口的数据有一点的差错。在服务器的运行中可以允许一些错误,但是它对Client可以处理的偏差是有限定的。专业术语这部分介绍了一些必须了解的重要的术语。这样可以帮助我们了解这个文件剩下来的部分。信息由一个标题和一个任意的实体组成。一般有两种形式的信息,请求和回复。它们第一行的形态不同,但它们都有一个标题部分和一个任意的实体部分。请求是由用户发送给服务器的。它的第一行包括请求发送的原因--URI,和服务器必须为用户执行的一个程序。回复是由服务器发送给用户的用于回复它们的请求的。它的第一行包括一个数据码,它表明了请求的成功或失败。阐释了一系列的数据代码,像200表示成功的代码和404个表示未找到的代码。其它建立在基础上的协议可以阐释其余的数据代码。程序是由服务器要求的一个操作。阐释了一系列的操作,最觉见的就是GET和POST。其它的建立在基础上的协议可以阐释其它的程序。标题部分是一对对名称值。这里的名称和数值都是它的内容。标题部分的名称是不分大小写的。多个数值可以指代同一个名称。RFC2616阐释了多种解决协议各个方面问题的标题部分。其它的说明像RFC2617和RFC2965都阐释了其它的标题。有些阐释的标题用来作一般用途,而其它的和请求或者回复一起发挥个别的用途。实体是跟信息一起发送的数据。例如,一个回复可以包含你下载下来作为一个实体的网页或图片,或是一个请求可以包含你进入网页的参数。信息的一个实体可以有任意的一个数据形态。这个形态在标题部分被称为MIME的一种。Session是一系列由一个单独来源发到服务器的请求。服务器可以保存session的数据,而且需要分辩发送过来的请求是属于哪个session的。例如,如果你要搜索一个网页,服务器将只会返回所有搜索结果中的一个网页。但是它会保存其它结果,并且在你点击下一页的这个的时候,它会帮你到这个页面。服务器需要从这个请求中知道是你和你的session需要更多的结果,而不是我和我的session。那是因为我搜索的是其它的东西。网络跟踪器对服务器来说是一种更受欢迎的追踪session的方式。为了回复用户的请求,服务器提供一份叫cookie的数据。服务器等待用户将标题里的那份数据和相同的session的每个请求一起发送过来。每个session都有不同的cookie,因此服务器可以靠查找cookie来识别哪个请求是属于哪个session。如果cookie从请求中遗失,那么服务器将不会像你期望的那样回复你。循序渐进获取登陆页面为登陆页面创建并执行一个GET请求。只要点击那些输到浏览器里的URL就可以了。当你在地址栏里输入一个URL或是点击指向另一个网页的时,这就是浏览器为你做的。检查服务器回复的信息:1、你打开了你想要的页面了吗?回复你请求的信息必须是以一个实体发送的。这个实体也被称为回复体。你有访问记录吗?Cookie在标题部分以Set-Cookie或是Set-cookie2的名称被发送。只有你登陆了你才有访问记录,这也是有可能的。如果给你的回复里没有你的访问记录,那么在你联接到cookie所设置的位置后,你还得执行第二步了。如果你打不开你所要的网页,那么检查一下你所申请的URL是否正确。如果它是正确的,服务器将会使用浏览器侦察系统。你必须将标题部分的用户主体设置成一个流行浏览器用的参数值,假装你的请求是来自于这个浏览器的。如果你获取不到登陆页面,那么先获取主页。当你创建了session,然后接着获取登陆页面。创建session为一个页面创建并执行另一个GET请求。你可以很容易地再次申请登陆页面,或是其它你知道其URL的网页。但是不要试着去获取一个回复提交网页格式而被返回的页面。使用那些浏览器中只需点击某个就可以联接成功的页面。在这些页面里,当你的鼠标点在这个旁边的时候,你可以在浏览器的状态栏里看到URL。在开发应用软件程序的时候这步是非常重要的。一旦知道你的应用软件程序不能正确地创建session,你就可以会把它删除。只有当你不能直接获取登陆页面,而且还必须得先获取首页,那么你就只好把它留着。检查正在被发送到服务器的请求:访问记录是否也跟请求一起被发送?我们可以启用Client的电缆登陆来查看什么正被发送到服务器的。你只要看一下请求的标题,而不需要看主体内容。访问记录应该在称作Cookie的标题区被发送。也许会有很多种这样的cookie,而其它的cookie也会被发送。检查来自服务器的回复信息:你有另外一个访问记录吗?你不应该拥有另外一个访问记录。如果你有一个跟以前相同的session,服务器会表现异常,但那不构成问题。如果你有一个新的访问记录,那么服务器不会从你的请求中识别出这个session。通常这都发生在请求不包含访问记录的情况下。但是服务器也会使用其它方法去追查session,或是检测session是否被盗用。如果访问记录没有在请求中发送,两个中的一个就出错。要么就是这个cookie在之前的回复里没有被检测到,要么就是这个cookie没有被选中与这个新的请求一起发送。Client自动地解析回复中发送的cookie,并把它们放到一个cookie贮存器里。Client用一个可配置的cookie结构决定来自服务器的cookie是否正确。系统预置的结构是严格遵守RFC2109的,但是很多服务器都不是这样的。根据cookie结构来执行,直到这个cookie被接纳并被存到cookie储存器里。如查这个cookie是从之前的回复中被接纳的,但仍然没有同新的请求一起发送,那么要去确认一下Client是否用的同一个cookie储存目标。如果你使用全用同一个Client目标去执行这两个请求,那么这将会成为一个阻碍,除非你明确地掌握了cookie储存目标。如果这个cookie仍然没有跟请求一起发送,去确认一直你所请求的URL是否在这个cookieX围内。Cookie只会被发送到cookiescope所规定的区域和路径。主机""的cookie不会被发送到主机""。一个区域名为"."的cookie可以发送到上面两个地方。一个开头没有圆点的""的cookie是不会被发送到""的。这种情况可以靠在开头增加圆点而解决。有些服务器不能检测到单独标题块里发送过来的多个cookie。那么可以建议Client将有的cookie放到一个单独的标题块。如果这样都没用的话,那麻烦就来了。服务器会用另外的方法去追踪session,比如说被称为Referer的标题区。将这块区联接到之前请求中的URL。如果这样也没用的话,你就要将应用软件程序里的请求同服务器产生的相应的请求比较一下。在第5步里POST请求的指示也同样适用于GET请求。这个对GET来说甚至更简单,因为你没有实体部分。分析格式现在应该来分析一下网页里HTML标记所阐释的格式。HTML里的格式是一系列的名值对,称作参数。这里的一部分数值可以输入到浏览器中。用分析HTML标记的方法可以让你了解哪些参数需要你去阐释,以与如何将它们发送到服务器。在网页的页面上查找这个form标签。也许在这个页面上会有很多的格式,但是这些格式都是不能输入东西的。查找你想要提交的格式,然后查找相关的form标签。我们从这个form标签的属性开始:Method=这个标签定义了提交格式所用的方法。如果是GET或是未定义的类型,你需要创造一个GET请求。具体做法是在上增加一个询问字符串参数,把这些参数放入请XX体中,让它们成为请求的一部分。做法已经在步骤5中论述过了。action=这个标签定义请求所要传递到的地址。不要试着从浏览器的地址块里得到这个地址。浏览器会自动重新定向而且只会显示最后的地址,和这个定义的地址是完全不同的。包含请求字符串的地址可以定义一些参数。如果是这样的话,请记住这些参数。enctype=这个标签定义请XX体中的MIME类型。两种常见情况是编码〔默认〕和多部分MIME类型。请注意这些条款是非正式的,准确的参数值会在别的地方被定义。这个地方的定义只能用在POST方法中。如果用GET方法,参数将一直使用url编码,但不是在实体中。accept-charset=这个标签定义浏览器允许使用者输入的数据类型。这里不讨论这个问题但如果你经历过字符集相关的问题的话,你会自然考虑用什么参数值。除了行动定义的询问参数之外,形式参数还可以被HTML中form和/form之间的标签定义。以下是一X可以定义参数的标签表。除非在别的地方被定义过,否则它们就可以定义参数的名称。参数值通常需要使用者的输入。<inputtype="text"name="..."><inputtype="password"name="...">定义一个单行输入区域。在这个区域中按下回车键将会返回所输入的数据。所以这个参数值就是使用者单行输入的数据。<inputtype="text"readonlyname="..."value="..."><inputtype="hidden"name="..."value="...">定义不可被使用者修改的参数,参数值会被直接定义。<inputtype="radio"name="..."value="..."><inputtype="checkbox"name="..."value="...">定义一个可以被包含或省略的参数。通常有两个标签的名称会相同。比如无线电按钮,只能有一个选项,一个参数值。对于检查箱,可以有更多选项。对于一个选项,每一个被选中的检查箱都会是相同的名字。<inputtype="submit"name="..."value="..."><buttontype="submit"name="..."value="...">定义提交按钮。只有这个按钮被激活后参数才会被传递到格式里。如果另一个按钮被使用,或者参数是用回车键决定提交,参数就不会成为数据提交部分。如果名称定义也缺失,将不会有任何参数通过这个按钮被提交到格式中。<textareaname="…"><textareavalue="…"readonly>定义一个多行的输入区域。在只读的情况下,这个参数值就是textarea和/textarea标签之间的内容。<selectname="…"multiple>}}}<optionvalue="…">…</option>}}}<optionvalue="…">…</option>}}}…</select>定义一个选择栏或是一个下拉菜单。如果多个属性不能显现,那么只能选一个。每个被选项都有一个名值对。如果没有值属性,那么这个选项的值就是option和/option之间的内容。<inputtype="image"name="…">定义一个图像,当点击它时,可以提交格式。如果点击这个图像提交格式,格式数据里会增加两个参数。它的名称属性里会后缀上".X"和".Y"。这些参数值是跟你点击时鼠标指针指在图像上时相一致的。如果名称属性丢失了,那么格式数据里就不能增加参数。<inputtype="file"name="…">定义一个文件选择夹。用户可以选择一个必须作为格式数据的一部分而发送的文件。只有当这个编码是多型标头规格的时候才有可能。不像其它的参数,这个文件不仅仅是划为一个简单名值对。上传文件不适合初学者做。标签被用来阐释静态的HTML上的参数。而在活动的HTML上,用特殊的JavaScript,可以在格式提交前将参数值改变。再次分析格式在你决定用哪个URL和格式的名值对后,你应该退出你之前用来获取HTML资料的程序,重新开始这个程序,并且在新的网页上重复这个分析。这两个网页的大部分参数是一样的。但是有些参数,尤其是那些来自隐藏的输入区的参数,会随着session的变化而改变,甚至会随着每次请求的变化而改变。URL也是一样的。保持一致的参数可以硬编码到你的程序里。如果参数改变了〔除了用户输入的〕,那么你的应用软件程序就要用格式去请求页面,并在其运行的时候提取那些活动的参数。如果你够幸运的话,你只需要用简单的字符串就可以找到它们。但是如果不走运的话,你就要用HTML解析器来分析这个页面了。要注意的是服务器上格式的重置可能会在任何时刻中止你的应用程序。当发生这种情况的时候,就要靠服务器发送回的重置后的新格式来重新进行分析,并相应地更改你的应用程序。分析过此格式后,应创建一个和浏览器所生成匹配的请求。如果采用GET的话,对于参数来说,只需给字符串添加名称-值对。如果采用POST,就会复杂些。这取决于服务器跟你所匹配的浏览器行为有多近。例如,一个servelet不会区分字符串里的参数以与实体参数的网址编码参数。但是其它伺服务器端的码可能会区分。安全方法是总是和浏览器行为匹配精确。Client支持编码类型和网址编码,以与新的多型标头规格。发出网址编码参数,得用POST请求,且在那直接添加参数。用新的多型标头规格发出参数,得在搜集多编码请求中搜集参数,且添加POST请求。你将会在多文件包中发现文件上传支持。注意,这些技术是互斥的,它们不可以互相连接。用网络字符串定义的参数可以保留在那。发送请求。发现服务器回复:得到一个状态码303或者307吗?那个称作重定向。按着重定向一直到最终页,发现如此回复。见下面重定向步骤六。你得到你期待的页面吗?如果服务器回复你POST请求,则表示出现一个问题,试着加强或减弱期望的持续信号交换,或者把通讯协定转到/1.0。如果不行的话…观察你发送的请求对于一个浏览器的请求来说,有没有显著的差异?有很多程序可以用以发送浏览器请求。有些已在邮寄单上的回复提与。问题的可能是错过的参数或者是错的参数,且在标题字段有差异。参数取决于你。标题字段的一般规定是,你的发送须跟浏览器所发送的相同。字段顺序无规定。但是需要警戒的是:有些标题字段是由Client控制的,不能明确设置。其它标题字段用以表示浏览器的性能,但是你的应用软件程序并非有。这样的话,你应用软件的请求应该且必须不同。以下是标题所需特殊要求的不完全列表:Host由Client控制。值通常是从你接的网址获取。有可能设一个不同的值,"虚拟主机"。Content-Type:Content-Length:Transfer-Encoding:由Client控制。值通常是从请求获取。Connection:通常由Client来控制,来解决存活。把它放在一边,或者将值设定为"关"。Content-Encoding:用以说明处理压缩回复的能力。除非你已经准备好还原了,否则不要设定这个。按照重新输入指令行使服务器在回复POST请求时用303或307状况代码答复是很常见的。这些重新输入指令说明你的应用程序必须重新发送一个请求来取回当初发送POST请求这个操作所产生的真实结果。Client可以设置使其自动地按照重新输入指令行使。我们要确定这个Client与其要求是相符的,但是我们不能阻止你在你的程序里执行一个不同的操作。要注意的是可能会连着不止一个重输入指令出现。那么你的程序就得照着一个个的重输入指令去操作,但是要先搞清楚你没有进入一个无限循环下去的状态。如果发现有连着两个以上的重输入指令出现,这样就有可能出问题了。退出你的应用程序可以发送尽可能多的GET和POST请求,也能按照多个重输入指令去操作。但是要记住有个session是被服务器追踪的。一旦你的程序完成了,如果网页提供了一个退出的,那么你还需发送最后一个请求以便退出。这就是通知服务器那些session可以丢弃了。如果服务器阻止同一个用户ID多次登陆,而你的程序又必须反复地运行,那么你就只能退出程序了。ClientProgrammingPrimerAboutThisdocumenthasevolvedfromdiscussionsontheClientmailinglists.AlthoughitreferstoClient,theconceptsdescribedhereapplyequallytoComponentsorSUN'sURLConnectionoranyothercommunicationlibraryforanyprogramminglanguage.Soyoumightfinditusefulevenifyou'renotusingJavaandClient.CaveatAwebsitecanberedesignedatanypointintime.Theserverthensendsdifferentdocumentsandabrowserwilldisplaythenewcontent.Theusereasilyadjuststoclicktheappropriatelinks,andthebrowsercommunicatesviaasspecifiedbythenewdocumentsfromtheserver.Yourapplicationthatonlymimicksabrowserwillsimplybreak.Ifyouwanttoimplementasolidapplication,youshoulduseonlypublishedAPIs.Forexample,tocheckfornewmailonyourwebmailaccount,youshouldaskthewebmailproviderforPOPorIMAPaccess.ThesearestandardizedprotocolssupportedmymostEMailclientapplications.Ifyouwanttohaveanewsticker,lookforRSSfeedsfromtheproviderandapplicationsthatdisplaythem.ClientClientexecutesrequests,butitwillnotandcannotassemblethem.SinceClientdoesnotinterfacewiththeuser,norinterpretcontentsuchasHTMLfiles,thereislittleornotoleranceforbaddatapassedtotheAPI.Thereissometoleranceforflawsinserverbehavior,buttherearelimitstothedeviationsClientcanhandle.TerminologyThissectionintroducessomeimportanttermsyouhavetoknowtounderstandtherestofthisdocument.Messageconsistsofaheadersectionandanoptionalentity.Therearetwokindsofmessages,requestsandresponses.Theydifferintheformatofthefirstline,butbothcanhaveheaderfieldsandanoptionalentity.Requestissentfromaclienttoaserver.ThefirstlineincludestheURIforwhichtherequestissent,andamethodthattheservershouldexecutefortheclient.Responseissentfromaservertoaclientinresponsetoarequest.Thefirstlineincludesastatuscodethattellsaboutsuccessorfailureoftherequest.definesasetofstatuscodes,like200forsuccessand404fornotfound.Otherprotocolsbasedoncandefineadditionalstatuscodes.Methodisanoperationrequestedfromtheserver.definesasetofoperations,themostfrequentbeingGETandPOST.Otherprotocolsbasedoncandefineadditionalmethods.HeaderFieldsarename-valuepairs,wherebothnameandvaluearetext.Thenameofaheaderfieldisnotcasesensitive.Multiplevaluescanbeassignedtothesamename.RFC2616definesawiderangeofheaderfieldsforhandlingvariousaspectsoftheprotocol.Otherspecifications,likeRFC2617andRFC2965,defineadditionalheaders.Someofthedefinedheadersareforgeneraluse,othersaremeantforexclusiveusewitheitherrequestsorresponses,stillothersaremeantforuseonlywithanentity.Entityisdatasentwithanmessage.Forexample,aresponsecancontainthepageorimageyouaredownloadingasanentity,orarequestcanincludetheparametersthatyouenteredintoawebform.Theentityofanmessagecanhaveanarbitrarydataformat,whichisusuallyspecifiedasaMIMEtypeinaheaderfield.Sessionisaseriesofrequestsfromasinglesourcetoaserver.Theservercankeepsessiondata,andneedstorecognizethesessiontowhicheachincomingrequestbelongs.Forexample,ifyouexecuteawebsearch,theserverwillonlyreturnonepageofsearchresults.Butitkeepstrackoftheotherresultsandmakesthemavailablewhenyouclickonthelinktothe"next"page.Theserverneedstoknowfromtherequestthatitisyouandyoursessionforwhichmoreresultsarerequested,andnotmeandmysession.That'sbecauseIsearchedforsomethingelse.Cookiesarethepreferredwayforserverstotracksessions.Theserversuppliesapieceofdata,calledacookie,inresponsetoarequest.Theserverexpectstheclienttosendthatpieceofdatainaheaderfieldwitheachfollowingrequestofthesamesession.Thecookieisdifferentforeachsession,sotheservercanidentifytowhichsessionarequestbelongsbylookingatthecookie.Ifthecookieismissingfromarequest,theserverwillnotrespondasexpected.StepbyStepGETtheLoginPageCreateandexecuteaGETrequestfortheloginpage.JustusethelinkyouwouldtypeintothebrowserastheURL.ThisiswhatabrowserdoeswhenyouenteraURLintheaddressbarorwhenyouclickonalinkthatpointstoanotherwebpage.Inspecttheresponsefromtheserver:doyougetthepageyouexpected?Itshouldbesentastheentityoftheresponsetoyourrequest.Theentityisalsoreferredtoastheresponsebody.doyougetasessioncookie?CookiesaresentinaheaderfieldnamedSet-CookieorSet-Cookie2.Itispossiblethatyoudon'tgetasessioncookieuntilyoulogin.Ifthereisnosessioncookieintheresponse,you'llhavetodoperformstep2later,afteryoureachthepointwherethecookieisset.Ifyoudonotgetthepageyouexpect,checktheURLyouarerequesting.Ifitiscorrect,theservermayuseabrowserdetection.YouwillhavetosettheheaderfieldUser-Agenttoavalueusedbyapopularbrowsertopretendthattherequestiscomingfromthatbrowser.Ifyoucan'tgettheloginpage,getthehomepageinsteadnow.Gettheloginpageinthenextstep,whenyouestablishthesession.EstablishtheSessionCreateandexecuteanotherGETrequestforapage.Youcansimplyrequesttheloginpageagain,orsomeotherpageofwhichyouknowtheURL.DoNOTtrytogetapagewhichwouldbereturnedinresponsetosubmittingawebform.Usesomethingyoucanreachsimplybyclickingonalinkinthebrowser.SomethingwhereyoucanseetheURLinthebrowserstatuslinewhilethemousepointerishoveringoverthelink.Thisstepisimportantwhendevelopingtheapplication.Onceyouknowthatyourapplicationdoesestablishthesessioncorrectly,youmaybeabletoremoveit.Onlyifyoucouldn'tgettheloginpagedirectlyandhadtogetthehomepagefirst,youknowyouhavetoleaveitin.Inspecttherequestbeingsenttotheserver.isthesessioncookiesentwiththerequest?YoucanseewhatissenttotheserverbyenablingthewirelogforClient.Youonlyneedtoseetherequestheaders,notthebody.ThesessioncookieshouldbesentinaheaderfieldcalledCookie.Theremaybeseveralofthose,andothercookiesmightbesentaswell.Inspecttheresponsefromtheserver:doyougetanothersessioncookie?Youshouldnotgetanothersessioncookie.Ifyougetthesamesessioncookieasbefore,theserverbehavesalittlestrangebutthatshouldnotbeaproblem.Ifyougetanewsessioncookie,thentheserverdidnotrecognizethesessionfortherequest.Usually,thishappensiftherequestdidnotcontainthesessioncookie.Butserversmightuseothermeanstotracksessions,ortodetectsessionhijacking.Ifthesessioncookieisnotsentintherequest,oneoftwothingshasgonewrong.Eitherthecookiewasnotdetectedinthepreviousresponse,orthecookiewasnotselectedforbeingsentwiththenewrequest.Clientautomaticallyparsescookiessentinresponsesandputsthemintoacookiestore.Clientusesaconfigurablecookiepolicytodecidewhetheracookiebeingsentfromaserveriscorrect.ThedefaultpolicycompliesstrictlywithRFC2109,butmanyserversdonot.Playaroundwiththecookiepoliciesuntilthecookieisacceptedandputintothecookiestore.Ifthecookieisacceptedfromthepreviousresponsebutstillnotsentwiththenewrequest,makesurethatClientusesthesamecookiestoreobject.Unlessyouexplicitlymanagecookiestoreobjects<notrecommendedfornewbies!>,thiswillbethecaseifyouusethesameClientobjecttoexecutebothrequests.Ifthecookieisstillnotsentwiththerequest,makesurethattheURLyouarerequestingisinthescopeforthecookie.Cookiesareonlysenttothedomainandpathspecifiedinthecookiescope.Acookieforhost""willnotbesenttohost"".Acookiefordomain"."willbesenttoboth.Acookieforhost"",withouttheleadingdot,willnotbesentto"".Thelattercasecanberesolvedbyusingadifferentcookiespecthataddstheleadingdot.Intheothercases,useaURLthatinthecookiescopetoestablishthesession.Ifthesessioncookieissentwiththerequest,butanewsessioncookieissetintheresponseanyway,checkwhethertherearecookiesotherthanthesessioncookieintherequest.Someserversareincapableofdetectingmultiplecookiessentinindividualheaderfields.Clientcanbeadvisedtoputallcookiesintoasingleheaderfield.Ifthatdoesn'thelp,youareintrouble.Theservermayuseadditionalmeanstotrackthesession,forexampletheheaderfieldnamedReferer.SetthatfieldtotheURLofthepreviousrequest.<seethismail>Ifthatdoesn'thelpeither,youwillhavetocomparetherequestfromyourapplicationtoacorrespondingonegeneratedbyabrowser.Theinstructionsinstep5forPOSTrequestsapplyforGETrequestsaswell.It'sevensimplerwithGET,sinceyoudon'thaveanentity.AnalyzetheFormNowitistimetoanalyzetheformdefinedintheHTMLmarkupofthepage.AforminHTMLisasetofname-value-pairscalledparameters,wheresomeofthevaluescanbeenteredinthebrowser.ByanalyzingtheHTMLmarkup,youcanlearnwhichparametersyouhavetodefineandhowtosendthemtotheserver.Lookfortheformtaginthepagesource.Theremaybeseveralformsinthepage,buttheycannotbenested.Locatetheformyouwanttosubmit.Locatethematching/formtag.Everythinginbetweenthetwomayberelevant.Let'sstartwiththeattributesoftheformtag:method=specifiesthemethodusedforsubmittingtheform.IfitisGETornotspecifiedatall,thenyouneedtocreateaGETrequest.TheparameterswillbeaddedasaquerystringtotheURL.IfthemethodisPOST,youneedtocreateaPOSTrequest.Theparameterswillbeputintheentityoftherequest,alsoreferredtoastherequestbody.Howtodothatisdiscussedinstep5.action=specifiestheURLtowhichtherequesthastobesent.DonottrytogetthisURLfromtheaddressbarofyourbrowser!AbrowserwillautomaticallyfollowredirectsandonlydisplaysthefinalURL,whichcanbedifferentfromtheURLinthisattribute.ItispossiblethattheURLincludesaquerystringthatspecifiessomeparameters.Ifso,keepthatinmind.enctype=specifiestheMIMEtypefortheentityoftherequestgeneratedbytheform.Thetwocommoncasesareurl-encoded<default>andmultipart-mime.Notethatthesetermsarejustinformallyusedhere,theexactvaluesthatneedtobewritteninanHTMLdocumentarespecifiedelsewhere.ThisattributeisonlyusedforthePOSTmethod.IfthemethodisGET,theparameterswillalwaysbeurl-encoded,butnotinanentity.accept-charset=specifiesthecharactersetthatthebrowsershouldallowforuserinput.Itwillnotbediscussedhere,butyouwillhavetoconsiderthisvalueifyouexperiencecharsetrelatedproblems.Exceptforoptionalqueryparametersintheactionattribute,theparametersofaformarespecifiedbyHTMLtagsbetweenformand/form.Thefollowingisalistoftagsthatcanbeusedtodefineparameters.Exceptwherestatedotherwise,theyhaveanameattributewhichspecifiesthenameoftheparameter.Thevalueoftheparameterusuallydependsonuserinput.<inputtype="text"name="..."><inputtype

温馨提示

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

评论

0/150

提交评论