




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目 录 TOC o 1-2 h z u HYPERLINK l _Toc231618672 摘要 PAGEREF _Toc231618672 h 1 HYPERLINK l _Toc231618674 Abstract PAGEREF _Toc231618674 h 2 HYPERLINK l _Toc231618676 第1章 引言 PAGEREF _Toc231618676 h 3 HYPERLINK l _Toc231618677 1.1 课题背景 PAGEREF _Toc231618677 h 3 HYPERLINK l _Toc231618678 1.2 国内外研究现状 PAGERE
2、F _Toc231618678 h 3 HYPERLINK l _Toc231618679 1.3 课题的目的和意义 PAGEREF _Toc231618679 h 4 HYPERLINK l _Toc231618680 1.4 本章小结 PAGEREF _Toc231618680 h 4 HYPERLINK l _Toc231618681 第2章 相关技术及开发工具介绍 PAGEREF _Toc231618681 h 5 HYPERLINK l _Toc231618682 2.1 J2EE简介 PAGEREF _Toc231618682 h 5 HYPERLINK l _Toc2316186
3、83 2.2 Lucene PAGEREF _Toc231618683 h 6 HYPERLINK l _Toc231618684 2.3 开发环境及工具 PAGEREF _Toc231618684 h 7 HYPERLINK l _Toc231618685 第3章 系统总体设计 PAGEREF _Toc231618685 h 8 HYPERLINK l _Toc231618686 3.1 总体设计框架 PAGEREF _Toc231618686 h 8 HYPERLINK l _Toc231618687 3.2 系统根本功能 PAGEREF _Toc231618687 h 8 HYPERLI
4、NK l _Toc231618688 3.3 数据库设计 PAGEREF _Toc231618688 h 11 HYPERLINK l _Toc231618689 3.4 本章小结 PAGEREF _Toc231618689 h 13 HYPERLINK l _Toc231618690 第4章 局部系统模块详细设计与实现 PAGEREF _Toc231618690 h 14 HYPERLINK l _Toc231618691 4.1 邮箱管理模块 PAGEREF _Toc231618691 h 14 HYPERLINK l _Toc231618692 4.2 用户管理模块 PAGEREF _T
5、oc231618692 h 18 HYPERLINK l _Toc231618693 4.3 JMS应用 PAGEREF _Toc231618693 h 19 HYPERLINK l _Toc231618694 4.4 本章小结 PAGEREF _Toc231618694 h 22 HYPERLINK l _Toc231618695 第5章 邮件检索模块详细设计与实现 PAGEREF _Toc231618695 h 23 HYPERLINK l _Toc231618696 5.1 邮件的索引 PAGEREF _Toc231618696 h 23 HYPERLINK l _Toc23161869
6、7 5.2 邮件的搜索 PAGEREF _Toc231618697 h 27 HYPERLINK l _Toc231618698 5.3 搜索结果的高亮显示 PAGEREF _Toc231618698 h 30 HYPERLINK l _Toc231618699 5.4 本章小结 PAGEREF _Toc231618699 h 31 HYPERLINK l _Toc231618700 第6章 总结与展望 PAGEREF _Toc231618700 h 32 HYPERLINK l _Toc231618701 6.1 系统总结 PAGEREF _Toc231618701 h 32 HYPERLI
7、NK l _Toc231618702 6.2 系统实现局部效果图 PAGEREF _Toc231618702 h 32 HYPERLINK l _Toc231618703 6.3 开展前景 PAGEREF _Toc231618703 h 34 HYPERLINK l _Toc231618704 谢辞 PAGEREF _Toc231618704 h 35 HYPERLINK l _Toc231618705 参考文献 PAGEREF _Toc231618705 h 36 HYPERLINK l _Toc231618706 附 录 PAGEREF _Toc231618706 h 37支持全文检索的邮
8、件代理效劳平台多邮箱管理及Lucene在邮件搜索上的应用摘要:本文阐述了设计与实现支持全文检索的邮件代理效劳平台的理论根底,设计思想,整体架构等。其中最主要的是应用了J2EE中的JavaMail、JMS、EJB3中的消息驱动Bean和Lucene。本文着重阐述了Lucene全文索引及检索技术在该系统中的应用,包括索引的建立,索引的修改,搜索,对搜索结果的高亮显示等。关键字:J2EE;JavaMail;消息驱动Bean;Lucene;全文检索Support Full-text Search Platform for E-mail Proxy ServiceManagement of Multip
9、le Mailboxes and Application of Lucene in Mail SearchAbstract: This paper describes the design and implementation support for full-text indexing of e-mail proxy service platform based on the theory, design thinking, the overall structure and so on. The most important is the use of J2EE in the JavaMa
10、il, JMS, EJB3 of Message-Driven Bean and Lucene.This article focuses on the Lucene full-text indexing and retrieval technology in the system, including the establishment of the index, index changes, and search on the highlighted search results display.Key words: J2EE; JavaMail; Message-Driven Bean;
11、Lucene; Full-text Search第1章 引言 课题背景电子邮件是一种用电子手段提供信息交换的通信方式。是Internet应用最广的效劳:通过网络的电子邮件系统,用户可以用非常低廉的价格,以非常快速的方式,与世界上任何一个角落的网络用户联系,这些电子邮件可以是文字、图像、声音等各种方式。同时,用户可以得到大量免费的新闻、专题邮件,并实现轻松的信息搜索。这是任何传统的方式也无法相比的。正是由于电子邮件的使用简易、投递迅速、收费低廉,易于保存、全球畅通无阻,使得电子邮件被广泛地应用,它使人们的交流方式得到了极大的改变。另外,电子邮件还可以进行一对多的邮件传递,同一邮件可以一次发送给许
12、多人。最重要的是,电子邮件是整个网间网以至所有其他网络系统中直接面向人与人之间信息交流的系统,它的数据发送方和接收方都是人,所以极大地满足了大量存在的人与人通信的需求。当今社会是信息化的社会,人们并不仅仅满足于现有的电子邮件效劳,由于移动办公的需要,电子邮件效劳由单纯的客户端收发邮件开展到了Web邮件,但电子邮件的开展还未就此停止,现在的人群当中存在一大批人是拥有不止一个电子邮箱的,他们对电子邮件效劳又有了新的需求,此时电子邮件效劳就必须满足支持多个邮箱管理的功能。 国内外研究现状电子邮件开展到现在,用户使用电子邮件效劳的方式有两种:一种是用户使用个人计算机上的客户端软件,比方Outlook,
13、Foxmail等。Outlook是由美国微软公司(Microsoft)出品的免费软件,与Internet Explorer浏览器软件捆绑发行;Foxmail是由国人张小龙编写的一个功能强大非商业软件,它实现了真正的多用户、多账户、多POP3支持,自动进行拨号,能设置邮件过滤功能,能阅读和收发Big5码的邮件,可以直接查看HTML格式邮件。这两种客户端软件只要通过适当的配置后,就可以对邮件进行接收和发送,但单纯使用邮件客户端程序进行邮件的收发已经不能满足用户移动办公的需要。另一种就是使用WebMail系统,将E-mail和Web结合在一起,即通过Web编程和适当的系统设置,使用户仅仅以访问Web
14、的方式就可以得到和使用完整的邮件效劳的系统称为WebMail系统。WebMail是目前Internet上最受欢送和使用最多的效劳之一,也是很多网站必备功能之一。像网易、新浪等大型门户网站都提供了免费的WebMail效劳,并在其中参加了一些别的实用功能。如Google的GMail提供应邮箱用户网络硬盘,用户可以将一些电子资料存入网络硬盘中,并提供了全文检索的功能。现在许多WebMail系统在这些方面的改良越来越多,并在一定程度上满足了用户的要求,但仅此还是不够的。 课题的目的和意义本课题意在设计并实现一种支持全文检索的邮件代理效劳平台,使用户进一步感受到电子邮件效劳给他们带来的方便与快捷。虽然现
15、有的邮件效劳系统已经比拟完善,但对于多个邮箱的支持还是比拟少的,而且对多个邮箱中的文件进行统一管理的更少,因此有必要设计并实现一个支持多个邮箱收发邮件的系统。对于这种效劳系统,虽然现在在用户中使用地比拟少,而且专门提供类似效劳的系统也不多。但随着电子邮件的开展,相信在这方面的需求会越来越突出,而这种系统将会越来越得到用户的青睐。 本章小结本章主要介绍了支持全文检索的邮件代理效劳平台的研究背景、国内外的研究状况及本课题的目的和意义。第2章 相关技术及开发工具介绍2.1 J2EE简介J2EE是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的根底就
16、是核心Java平台或Java 2平台的标准版,J2EE不仅稳固了标准版中的许多优点,例如“编写一次、随处运行的特性、方便存取数据库的JDBC API、CORBA技术以及能够在Internet应用中保护数据的平安模式等等,同时还提供了对EJB(Enterprise JavaBeans)、Java Servlet API、JSP(Java Server Pages)以及XML技术的全面支持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。J2EE体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台,J2EE降
17、低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持Enterprise JavaBeans,有良好的向导支持打包和部署应用,添加目录支持,增强了平安机制,提高了性能13。2 JavaMailJavaMail,顾名思义,提供应开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook的应用程序。虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(Java Development Kit),这就意味着你在
18、使用前必须另外下载JavaMail文件。除此以外,你还需要有Sun的JavaBeans Activation Framework (JAF)。JavaBeans Activation Framework的运行很复杂,在这里简单的说就是JavaMail的运行必须得依赖于它的支持。在Windows 2000下使用需要指定这些文件的路径,在其它的操作系统上也类似。2. JMSJMS(Java Message Service,Java消息效劳)是一组Java应用接口,它提供创立、发送、接收、读取消息的效劳。JMS API定义了一组公共的应用程序接口和相应语法,使得Java应用能够和各种消息中间件进行通
19、信,这些消息中间件包括IBM MQ-Series、Microsoft MSMQ及纯Java的Sonic MQ。通过使用JMS API,开发人员无需掌握不同消息产品的使用方法,也可以使用统一的JMS API来操纵各种消息中间件。通过使用JMS,能够最大限度地提升消息应用的可移植性。JMS既支持点对点的消息通信,也支持发布/订阅式的消息通信。2 EJB3EJB是sun的效劳器端组件模型,最大的用处是部署分布式应用程序,类似微软的com技术。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。EJB(Enterprise Java Bean)是J2EE的一局部,定义了一个用于
20、开发基于组件的企业多重应用程序的标准。其特点包括网络效劳支持和核心开发工具(SDK)。在J2EE里,Enterprise Java Beans(EJB)称为Java企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。Session Bean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。每当客户端请求时,容器就会选择一个Session Bean来为客户端效劳。Session Bean可以直接访问数据库,但更多时候,它会通过Entity Bean实现数据访问。E
21、ntity Bean是域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创立一个Entity Bean对象相当于新建一条记录,删除一个Entity Bean会同时从数据库中删除对应记录,修改一个Entity Bean时,容器会自动将Entity Bean的状态和数据库同步。MessageDriven Bean是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。MDB实际上是一个异步的无状态 Session Bean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。这适合于需要异步处理请求的
22、场合,比方订单处理,这样就能防止客户端长时间的等待一个方法调用直到返回结果。2.2 LuceneLucene是apache软件基金会jakarta工程组的一个子工程,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,局部文本分析引擎英文与德文两种西方语言。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为根底建立起完整的全文检索引擎。Lucene作为一个全文检索引擎,其具有如下突出的优点:索引文件格式独立于应用平台。Lucene定义了一套以8位字节为根底
23、的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。在传统全文检索引擎的倒排索引的根底上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,到达优化的目的。优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便扩充新功能。设计了独立于语言和文件格式的文本分析接口,索引器通过接受Token流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。已经默认实现了一套强大的查询引擎,用户无需自己编写代码即使系统可获得强大的查询能力,Lucene的查询实现中默认实现了布尔操作、模糊查询、分组查询等等9。2.3 开
24、发环境及工具开发环境:Windows XP SP2开发工具:MyEclipse 部署环境: HYPERLINK :/ soft6 /product/0/5512.html t _blank Sun Java System Application Server第3章 系统总体设计3.1 总体设计框架支持全文检索的邮件代理效劳平台主要是利用J2EE和Lucene来架构,涉及到J2EE中的JSP、Servlet、JavaMail、JMS、EJB3中的消息驱动Bean,以及Lucene中的索引、搜索和高亮等。该系统的整体框架如图3-1所示。图3-1 支持全文检索的邮件代理效劳平台整体框架3.2 系统根
25、本功能支持全文检索的邮件代理效劳平台主要是为满足用户有多个邮箱,并且需要对多个邮箱进行统一管理,包括接收各个邮箱中的邮件,通过各个不同的邮箱来发送邮件等,因此在该系统中需要提供的功能有:接收多个邮箱中的邮件;通过不同的邮箱发送不同的邮件;添加不同的邮箱;可以对收件箱中的邮件进行全文检索;对用户密码进行修改;对已添加的邮箱进行修改。3 系统模块结构图根据系统所具有的根本功能得到该系统的功能模块结构示意图,如图3-2所示。支持全文检索的邮件代理效劳平台支持全文检索的邮件代理效劳平台注册登录邮件管理邮件收发邮件检索邮箱管理用户管理注册登录查看邮件删除邮件发送邮件修改邮箱删除邮箱修改密码索引邮件搜索邮
26、件添加邮箱接收邮件图3-2 系统功能模块结构示意图3.2.2 各个模块功能概述该系统中包含的功能有:注册、登录、接收邮件、写邮件、邮件管理查看/删除/回复、已发邮件管理查看/删除/转发、邮箱管理添加/删除/修改、邮件的索引和邮件的搜索。各个功能模块分别介绍如下:1注册注册局部主要是为了使刚开始使用该系统的用户能有自己唯一的一个账户,并能在注册之后使用该系统。用户所提供的密码是经过DES加密后才存储的。2登录登录局部主要是为了验证用户所提供的用户名和密码的合法性,假设合法的话,那么提供应该用户相应的可靠效劳,否那么做非法用户处理,并且要求该用户注册或者是提示该用户他所提供的用户名和密码是非法的,
27、要求其重新登录。3接收邮件接收邮件局部主要是为了帮用户接收用户所提供的邮箱中的邮件,这是一个后台的效劳程序,用户自己是感觉不到什么时候接收到邮件的,但后台程序会定时地为每一个用户提供邮件接收的效劳。并且每个邮箱中的邮件是不会被重复接收的。4发送邮件发送邮件局部是给用户提供发送新邮件之用,这里可以支持不同的邮箱发送邮件,就是说虽然用户是在同一个地方写新邮件、发送邮件,但是该系统可以根据用户所提供的不同的发件人,让用户用他自己的不同邮箱来发送信件,而接收信件的人那么看到的也是不同的发件人。5邮件管理查看/删除/回复邮件管理局部主要是提供用户查看邮件、删除邮件和回复邮件的功能。当用户接收到新邮件时,
28、收到的新邮件都会重点提示用户这是一封新邮件,让用户很快就能看到是否有新的邮件。当有邮件时,用户可以查看邮件。查看的时候,如果用户想回复该邮件,那么点击“回复,系统就自动产生一封新的邮件,用户只需写好信的内容即可发送。当然,如果用户认为收件箱中的邮件已经没有利用价值,就可以删除邮件。6已发邮件管理查看/删除/转发已发邮件管理局部主要是为了用户方便管理已经发送的邮件和未发送成功的邮件。但凡用户发送过的邮件,不管是否发送成功,用户都可以在已发邮件中找到该邮件,并且可以删除和转发。7邮箱管理添加/删除/修改邮箱管理局部主要是让用户可以添加自己已有的所有邮箱,之后该系统可以帮用户在后台接收这些邮箱中的所
29、有邮件,这是为了方便用户统一管理自己的所有邮箱。在这里,用户可以随意添加、删除和修改自己的邮箱。8邮件的索引邮件的索引主要是为邮件的搜索做准备,只要系统在后台接收到新邮件,系统就会自动的为该邮件建立索引,方便用户以后对该邮件的搜索。这是由Lucene来实现的,这与直接对数据库进行搜索相比拟,效率比拟高,而且功能也比拟强,易于在以后扩展。9邮件的搜索邮件的搜索主要是提供应用户查找自己的相关邮件之用,这是通过之前建立的邮件全文索引来实现的,应用Lucene中提供的搜索功能构建自己的搜索器,将搜索的结果返回给用户,并高亮显示一些关键字,能使用户很准确的找到自己想要的邮件。3.3 数据库设计支持全文检
30、索的邮件代理效劳平台中存在有四种不同用处的表,包括用户表,已收邮件表,已发邮件表,邮箱表。3 用户表用户表是用来存放已注册的用户名和密码,因此该表只有2个字段,包括用户名和密码。用户实体E-R图如图3-3所示,用户表的具体各字段设计如表3-1所示。用户用户用户名密码图3-3 用户实体E-R图表3-1 用户表NameTypeNullableKeyUSERNAMEVARCHAR2(50)NOT NULL*PASSWORDVARCHAR2(50)NOT NULL3 已收邮件表已收邮件表是用来存放该用户所有邮箱中的邮件,该表中有8个字段,包括序列sid、邮件的ID、发件人mailfrom、收件人mai
31、lto、邮件主题subject、邮件内容content、时间time和状态state。已收邮件实体E-R图如图3-4所示,已收邮件表的具体各字段设计如表3-2所示。已收邮件已收邮件序列邮件ID收件人发件人主题内容状态时间图3-4 已收邮件实体E-R图表3-2 已收邮件表NameTypeNullableKeySIDNUMBERNOT NULLIDVARCHAR2(100)NOT NULL*MAILFROMVARCHAR2(100)NOT NULLMAILTOVARCHAR2(100)NOT NULLSUBJECTVARCHAR2(200)NOT NULLCONTENTCLOBTIMEVARCHA
32、R2(30)NOT NULLSTATEVARCHAR2(2)3 已发邮件表已发邮件表是用来存放该用户已经发送过的邮件,该表中有8个字段,包括序列sid、邮件的ID、发件人mailfrom、收件人mailto、邮件主题subject、邮件内容content、时间time和状态state。该表与收件箱表的设计相同,已发邮件实体E-R图如图3-5所示,已发邮件表的具体各字段设计如表3-3所示。已发邮件已发邮件序列邮件ID收件人发件人主题内容状态时间图3-5 已发邮件实体E-R图表3-3 已发邮件表NameTypeNullableKeySIDNUMBERNOT NULLIDVARCHAR2(100)N
33、OT NULL*MAILFROMVARCHAR2(100)NOT NULLMAILTOVARCHAR2(100)NOT NULLSUBJECTVARCHAR2(200)NOT NULLCONTENTCLOBTIMEVARCHAR2(30)NOT NULLSTATEVARCHAR2(2)3 邮箱表邮箱表是用来存放该用户所添加的所有邮箱,该表中有3个字段,包括序列id、邮箱名email和密码password。邮箱实体E-R图如图3-6所示,邮箱表的具体各字段设计如表3-4所示。邮箱邮箱序列邮箱名密码图3-6 邮箱实体E-R图表3-4 邮箱表NameTypeNullableKeyIDNUMBERNO
34、T NULLEMAILVARCHAR2(50)NOT NULL*PASSWORDVARCHAR2(50)NOT NULL3.4 本章小结 TOC o 1-3 h z u 本章主要介绍了支持全文检索的邮件代理效劳平台的总体设计框架、系统根本功能模块、数据库的设计,让读者对该系统有一个总体的认识。下一章将具体阐述邮箱管理、用户管理及JMS应用的详细设计和实现。第4章 局部系统模块详细设计与实现在支持全文检索的邮件代理效劳平台中一共有六个模块,如图3-2所示,分别为注册登录、邮件管理、写邮件、邮箱管理、用户管理和邮件检索。由于该系统是由两人合作完成,因此在本章将详细介绍该系统的邮箱管理和用户管理模块
35、。4.1 邮箱管理模块在邮箱管理模块中,包括添加邮箱、修改邮箱和删除邮箱,其给用户所提供的功能为:用户可以添加其所有邮箱到该系统中,系统在后台负责管理其已添加的所有邮箱。但有一点用户应该注意的:在添加邮箱的时候,用户应该提供其正确的邮箱用户名和密码,确保系统能真正管理该邮箱。因为系统不会去检查该邮箱的合法性。当然用户还可以修改其之前所添加的邮箱,以防用户输入错误。如该邮箱对用户来说已经没有使用价值的话,该邮箱可以被删除。4 添加邮箱在该模块中的添加邮箱局部,系统只是比拟简单的将用户所提供的用户名和密码存入了系统的数据库中。假设用户提供的邮箱用户名和密码有误的话,系统将接收不到该邮箱中的邮件,自
36、然不能为用户起到管理邮箱的作用。在用户添加邮箱的时候,为了能让用户能及时的看到他那个邮箱中的邮件,在添加邮箱成功的时候,程序会开一个接收邮件的线程,让这个线程去接收这个邮箱中的邮件。这样在后台开启一个线程,用户也不能觉察到接收邮件的过程,但后台程序确实已经开始接收邮件的工作了。只要过一定时间,用户就可以在他的收件箱中看到已经收到的邮件。该模块中添加邮箱局部的具体实现:用request类中的getParameter()方法得到用户在页面中所提交的邮箱名和密码;用DES加密算法对用户提交的密码进行加密处理;根据以上得到的邮箱名和密码,实例化一个邮箱类;通过JNDI查找数据源jdbc/oracled
37、s,得到一个数据库的连接;将实例化的一个邮箱类,通过MailBoxDAOJdbc类来存入数据库;存入数据库成功的话就开启一个接收邮件的一个线程,来接收刚添加的邮箱中的邮件。否那么,页面跳转回添加邮箱的页面setupMailBox.jsp。在该模块的实现中,添加邮箱局部用到了JDBC、Servlet和JSP技术。实现的流程图如图4-1所示。当前用户的输入的密码与数据库中的是否相同当前用户的输入的密码与数据库中的是否相同用户输入当前用户的密码和新密码开始通过数据源得到一个数据库的连接结束更新数据库中的当前用户的密码是否图4-1 添加邮箱局部流程图局部代码简析:/通过request类的getPara
38、meter()方法得到邮箱名和密码String email=request.getParameter(email).toString();String mailServerName=request.getParameter(mailServerName).toString();String emailpwd= request.getParameter(emailpwd).toString();/DES加密String emailpwd=DES.encrypt(request.getParameter(emailpwd).toString();/实例化一个邮箱类MailBox mb=new Ma
39、ilBox();mb.setEmail(email+mailServerName);/设置邮箱名mb.setPassword(emailpwd);/设置密码/通过JNDI查找数据源Context initContext;initContext = new InitialContext();DataSource ds = (DataSource) initContext.lookup(jdbc/oracleds);/将邮箱类存入数据库String insertSql = insert into + currentUser+ mailbox(id,email,password) values( +
40、 currentUser+ _seq.nextval,?,?);PreparedStatement pstmt;pstmt = conn.prepareStatement(insertSql);pstmt.setString(1, mb.getEmail();pstmt.setString(2, mb.getPassword();pstmt.execute();pstmt.close();4 修改邮箱在该模块的修改邮箱局部,系统也只是简单的将数据库中原有的密码更新为用户新提交的密码,并不会去检查别的,因此该功能的实现比拟简单。该模块中修改邮箱局部的具体实现:用request类中的getPara
41、meter()方法得到用户在页面中所提交的邮箱名和密码;用DES加密算法对用户提交的密码进行加密处理;根据以上得到的邮箱名和密码,实例化一个邮箱类;通过JNDI查找数据源jdbc/oracleds,得到一个数据库的连接;将实例化的一个邮箱类,通过MailBoxDAOJdbc类中的updateMailBox方法来更新数据库中的密码。修改邮箱局部的流程图如图4-2所示。图4-2 修改邮箱局部流程图局部代码简析:由于在添加邮箱局部已经分析过局部相同的代码,在这里只简析不同的代码片段。/根据邮箱名来更新邮箱密码String updateSql = update + currentUser + mail
42、box set password=+ password + where id= + id;PreparedStatement pstmt;pstmt = conn.prepareStatement(updateSql);pstmt.execute();pstmt.close();4 删除邮箱在该模块的删除邮箱局部,系统根据邮箱在数据库中存储的id来删除邮箱在数据库中的记录,因此该功能的实现也比拟简单。该模块中修改邮箱局部的具体实现:用request类中的getParameter()方法得到用户在页面中得到邮箱在数据库中的id;通过JNDI查找数据源jdbc/oracleds,得到一个数据库的连
43、接;将实例化的一个邮箱类,通过MailBoxDAOJdbc类中的deleteMailBox方法来删除数据库中的邮箱。修改邮箱局部的流程图如图4-3所示。得到邮箱在数据库中的ID得到邮箱在数据库中的ID开始通过数据源得到一个数据库的连接根据邮箱ID删除邮箱结束图4-3 删除邮箱局部流程图局部代码简析:由于在添加邮箱局部已经分析过局部相同的代码,在这里只简析不同的代码片段。/根据邮箱ID来删除邮箱String deleteSql = delete from + currentUser + mailbox where id=+ id;PreparedStatement pstmt;pstmt = c
44、onn.prepareStatement(deleteSql);pstmt.execute();pstmt.close();4.2 用户管理模块在用户管理模块中,只包括用户密码的修改局部,其给用户所提供的功能为:用户可以为自己在该系统中的当前用户修改密码,这只是为了某些用户要修改密码的需要。该模块中用户密码修改局部的具体实现:用request类中的getParameter()方法得到用户在modifyUserpw页面中得到用户输入的先前密码和新的密码;根据当前用户,从数据库中读取先前的密码,与用户输入的当前密码比对,看是否相同;如果相同的话,那么实例化一个用户类,将数据库中的密码更新为用户输入
45、的新密码,假设不相同的话,修改密码失败。用户密码修改局部的流程图如图4-4所示。当前用户的输入的密码与数据库中的是否相同当前用户的输入的密码与数据库中的是否相同用户输入当前用户的密码和新密码开始通过数据源得到一个数据库的连接结束更新数据库中的当前用户的密码是否图4-4 用户密码修改局部流程图局部代码简析:/更新数据库中的用户密码public static final String UPDATE_USER_SQL = update users set password=? where username=?;PreparedStatement pstmt = conn.prepareStateme
46、nt(UPDATE_USER_SQL);pstmt.setString(1, u.getPassword();tring(2, u.getUsername();pstmt.executeUpdate();pstmt.close();4.3 JMS应用在本系统中,为了提高系统后台的工作效率,采用了消息中间件,实现异步的消息传递。这对于本系统的稳定性是很关键的。由于本系统在后台要不断地帮用户处理业务,包括邮件的接受和邮件的索引,而就这两局部,在系统中就有可能随着时间的推移而业务不断地加重。因为有可能使用该系统的用户会越来越多,这样的话接收邮件和索引邮件的工作量就会越来越重。如果采用同步机制,那么严
47、重影响系统的运行效率,用户体验也会越来越差,最终本系统就选择使用JMS的异步消息处理来解决此问题。4 JMS消息模型在JMS中,提供了两种模型:一种是点对点模型,另一种是发布/订阅模型。点对点模型是与消息队列一起工作的。它们是点对点的,是因为客户端将消息发送到一个队列,而另一个客户端将从这个队列中接收消息。点对点模型示意图如图4-5所示。客户端1客户端1队列客户端2消息消息发送接收确认图4-5 点对点模型示意图发布/订阅模型是发送方针对一个主题发送消息,多个接收方可以订阅他们的主题。一个主题消息只能被传递给订阅该主题的接收方,同时一个接收方只能接收他所订阅的主题中的消息。发布/订阅模型示意图如
48、图4-6所示。发布者发布者Topic发布消息订阅者1订阅者2消息接收订阅消息接收订阅图4-6 发布/订阅模型示意图4 消息模型的选择根据本系统的特点,我们选择了点对点的消息模型,这是出于容易构建本系统的根底上的。4 点对点模型在系统中的应用确定选择点对点模型之后,开始构建本系统中特有的点对点模型。在本系统中,消息的生产者是接收邮件的线程,接收邮件的线程一接收完一封邮件就马上向消息队列中发送一条消息。而本系统中的消息队列是通过 HYPERLINK :/ soft6 /product/0/5512.html t _blank Sun Java System Application Server这个
49、应用效劳器提供的,只要对效劳器中的某些设置项进行适当的配置即可产生一个消息队列。消息的消费者是消息驱动Bean,这是EJB3里提供的。只要消息队列中一有消息,EJB容器就会自动让消息驱动Bean去处理消息。在本系统中实现的点对点消息模型示意图如图4-7所示。接收邮件线程接收邮件线程消息队列消息驱动Bean图4-7 系统实现点对点模型示意图由于接收邮件是多线程的,因此消息驱动Bean的处理也是多线程的,这样大大地提高了本系统的性能。但这样也给系统带来了其他问题,如线程之间的同步问题,这下一章讲到邮件索引的时候会给出解决方案。4 消息驱动Bean的实现本系统中,消息驱动Bean(MDB)是一个很重
50、的局部。MDB负责将邮件存入数据库并索引邮件。当消息到达时,判断是不是欲接收的消息,假设是的话,就下一步,否那么就不接收;将消息转换为本地的一般邮件对象,将邮件对象存入数据库;假设成功存入数据库,那么索引这邮件对象,否那么就不索引。2.核心代码:public void onMessage(Message message) ObjectMessage omsg = null;JMSMessage jmsg = null;try if (message instanceof ObjectMessage) omsg = (ObjectMessage) message;jmsg = (JMSMessa
51、ge)omsg.getObject();/转化为本地对象String username=jmsg.getUsername(); String currentUser = username.substring(username.lastIndexOf(/)+1, username.length();MailMessage msg=jmsg.getMsg();/获取邮件对象MsgSaveToDB mstdb=new MsgSaveToDB();boolean falg=false;falg=mstdb.saveMessage(currentUser, msg);/保存邮件if(falg)Index
52、Util.addIndex(jmsg);/索引邮件 catch (Exception e) e.printStackTrace();4.4 本章小结本章详细地介绍了支持全文检索的邮件代理效劳平台中的两个模块:邮箱管理和用户管理。这两个模块主要是侧重数据库的插入、删除和更新,使用户比拟方便的管理其所有邮箱和其账号密码。下一章将重点介绍在该系统中邮件检索模块的详细设计与实现。第5章 邮件检索模块详细设计与实现在支持全文检索的邮件代理效劳平台中,邮件检索模块主要包括两局部:1.邮件的索引;2.邮件的搜索。本章将具体介绍Lucene各方面的原理及在该系统中的应用,包括对每一封邮件建立索引的过程、对邮件
53、的搜索过程和对搜索结果的高亮显示。5.1 邮件的索引在该系统中的邮件索引是应用Lucene来实现的。5 Lucene索引介绍Lucene是一个高性能的java全文检索工具包,它使用的是倒排文件索引结构。从实现方式上来看,倒排索引是典型的为满足实际应用需要而设计的一种数据结构。这种数据结构中的每一个元素是一个索引项,每一个索引项是由关键字属性值和关键字关联记录,或者记录的存放地址组成。这种结构的最大特点是改变了以往的检索过程。通常的查找方法是先确定文档,然后在文档中顺序查找后续的文档。倒排索引那么是利用索引关键字直接确定文档列表,最后才确定希望找到的文档列表2。Lucene索引结构图如图5-1所
54、示:图5-1 Lucene索引结构图在Lucene中,索引文件的存储还分两种结构:一种是多文件索引结构,另一种是复合索引结构。多文件索引是使用一系列索引文件分别存储索引,分散管理数据的索引存储格式。多文件索引在翻开时需要读取大量文件,会大大占用系统的文件句柄等资源,造成系统响应速度慢,甚至系统崩溃2。因此,在本系统中,我们采用复合索引结构。复合索引是把索引相关的一系列数据结构组织到少数几个文件中进行管理的索引存储模式。复合索引把所有的索引数据被组合成简单的3个文件,大大减少了翻开大量文件的压力。但是使用统一文件存储大量数据会造成数据更新的问题,每次更改需要操作一个大的数据文件,读取和存储都会比
55、拟慢。对本系统来说,因为数据量不是很大,所以并不会产生大的数据文件。因此,选择以这种结构来存储邮件的索引文件是一种比拟好的解决方案。5 Lucene中的分词对于分词,在Lucene这个全文检索工具包中,是一个非常重要的。因为如果要对一篇文章建立全文索引,就必须先对这篇文章进行文本分析,对文章要进行有意义的分词。这就必须要用到分词器。由于Lucene不是本国人开发的全文检索工具包,因此Lucene中自带的分词器对于中文分词的支持不是很好。Lucene包中有两个支持中文的分词器:一个是ChineseAnalyzer,另一个是CJKAnalyzer。但是ChineseAnalyzer这个分词器只是单
56、字切分,而CJKAnalyzer分词器那么是一个二分法的分词器。因此,总的来说,Lucene自带包中的分词器对中文分词的支持都不是很好。国内有一个比拟知名的中文分词器,是中科院计算所开发的ICTCLAS。但由于这个分词器是用C+开发的,因此如果在Java应用程序中使用的话,容易出现不稳定的现象。最后,在我们这个系统中选择一个第三方提供的分词器JE分词器。这个分词器是基于词库的,所以分词的效果相对其余分词器的分词效果要好。各种分词器分词效果比拟:对“我爱我伟大的老爸老妈,我爱我壮丽的中华!这句话进行分词。ChineseAnalyzer分词结果:我 | 爱 | 我 | 伟 | 大 | 的 | 老
57、| 爸 | 老 | 妈 | 我 | 爱 | 我 | 壮 | 丽 | 的 | 中 | 华CJKAnalyzer分词结果:我爱 | 爱我 | 我伟 | 伟大 | 大的 | 的老 | 老爸 | 爸老 | 老妈 | 我爱 | 爱我 | 我壮 | 壮丽 | 丽的 | 的中 | 中华JE分词器分词结果:我 | 爱我 | 伟大 | 老爸 | 老妈 | 我 | 爱我 | 壮丽 | 中华5 建立邮件索引了解Lucene建立索引过程的原理之后,我们要对本系统进行定制邮件索引器。在本系统中的一封邮件包括6个局部,分别是邮件ID、收件人、发件人、邮件主题、邮件内容和发信时间。邮件索引的需求在本系统中,要求建立的邮件索
58、引必须能够支持用户对邮件的收件人、发件人、邮件主题、邮件内容和发信时间进行搜索。因此在一封邮件中,除了邮件ID不被搜索到,邮件的其余局部都要能被搜索到。但是邮件ID有其特殊的功能,所以在本系统中,每一封邮件的各个局部都建立相关的索引。建立索引的具体实现判断要存放索引的路径是否被锁定,假设没被锁定,就下一步,否那么就等待该锁定的路径被解锁;用路径名和JE分词器生成一个IndexWriter对象;生成一个Document对象;生成一个邮件ID的索引域,并参加到Document对象中;生成一个收件人的索引域,并参加到Document对象中;生成一个发件人的索引域,并参加到Document对象中;生成
59、一个邮件主题的索引域,并参加到Document对象中;生成一个邮件内容的索引域,并参加到Document对象中;生成一个发信时间的索引域,并参加到Document对象中;将Document对象添加到IndexWriter对象中;IndexWriter对象进行索引优化操作;关闭IndexWriter。建立邮件索引核心代码:public static boolean addIndex(String path,MailMessage msg)String indexPath=path;try while(IndexReader.isLocked(indexPath);IndexWriter writ
60、er = new IndexWriter(indexPath,new MMAnalyzer();Document doc=new Document();Field field=new Field(id,msg.getId(),Field.Store.YES,Field.Index.UN_TOKENIZED);doc.add(field);field=new Field(from,msg.getMailfrom(),Field.Store.YES,Field.Index.TOKENIZED);doc.add(field);field=new Field(to,msg.getMailto(),Fi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 图书工作计划推广绿色阅读倡导环保理念
- 新年加强时间管理的工作计划
- 放射科个人工作计划
- 会计工作目标设定与执行计划
- 第2课 昂首阔步-计时器和对象的位移 教学设计 -2023-2024学年粤教清华版初中信息技术九年级上册
- 2025年葫芦岛货运从业资格考试题
- 人教版九年级道德与法治下册同步教学设计第一单元《我们共同的世界》001
- 2025年许昌货运从业资格证模拟考试下载
- 天津市多校2024-2025学年高一(上)11月半期检测物理试卷(含解析)
- 消防安全培训方案
- 2022年江西科技职业学院单招综合素质考试笔试试题及答案解析
- 季节性施工专项施工方案(常用)
- 伤口(压疮)的评估与记录
- 煤矿机电运输类台账(各种记录汇编)
- 风电场道路及平台施工组织方案
- 风险分级管控74411ppt课件(PPT 146页)
- 三八女神节活动策划PPT课件
- 毕业设计(论文)3000t自由锻液压机本体设计
- 风力发电机组PLC系统
- Q∕GDW 12131-2021 干扰源用户接入电网电能质量评估技术规范
- T∕CAEPI 32-2021 全尾砂膏体充填关键设备技术要求
评论
0/150
提交评论