支持全文检索的邮件代理服务平台多邮箱管理及Lucene在邮件搜索上的应用.docx

上传人:b****5 文档编号:8404077 上传时间:2023-01-31 格式:DOCX 页数:43 大小:499.22KB
下载 相关 举报
支持全文检索的邮件代理服务平台多邮箱管理及Lucene在邮件搜索上的应用.docx_第1页
第1页 / 共43页
支持全文检索的邮件代理服务平台多邮箱管理及Lucene在邮件搜索上的应用.docx_第2页
第2页 / 共43页
支持全文检索的邮件代理服务平台多邮箱管理及Lucene在邮件搜索上的应用.docx_第3页
第3页 / 共43页
支持全文检索的邮件代理服务平台多邮箱管理及Lucene在邮件搜索上的应用.docx_第4页
第4页 / 共43页
支持全文检索的邮件代理服务平台多邮箱管理及Lucene在邮件搜索上的应用.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

支持全文检索的邮件代理服务平台多邮箱管理及Lucene在邮件搜索上的应用.docx

《支持全文检索的邮件代理服务平台多邮箱管理及Lucene在邮件搜索上的应用.docx》由会员分享,可在线阅读,更多相关《支持全文检索的邮件代理服务平台多邮箱管理及Lucene在邮件搜索上的应用.docx(43页珍藏版)》请在冰豆网上搜索。

支持全文检索的邮件代理服务平台多邮箱管理及Lucene在邮件搜索上的应用.docx

支持全文检索的邮件代理服务平台多邮箱管理及Lucene在邮件搜索上的应用

目录

摘要1

Abstract2

第1章引言3

1.1课题背景3

1.2国内外研究现状3

1.3课题的目的和意义4

1.4本章小结4

第2章相关技术及开发工具介绍5

2.1J2EE简介5

2.2Lucene6

2.3开发环境及工具7

第3章系统总体设计8

3.1总体设计框架8

3.2系统基本功能8

3.3数据库设计11

3.4本章小结13

第4章部分系统模块详细设计与实现14

4.1邮箱管理模块14

4.2用户管理模块18

4.3JMS应用19

4.4本章小结22

第5章邮件检索模块详细设计与实现23

5.1邮件的索引23

5.2邮件的搜索27

5.3搜索结果的高亮显示30

5.4本章小结31

第6章总结与展望32

6.1系统总结32

6.2系统实现部分效果图32

6.3发展前景34

谢辞35

参考文献36

附录37

支持全文检索的邮件代理服务平台—多邮箱管理及Lucene在邮件搜索上的应用

摘要:

本文阐述了设计与实现支持全文检索的邮件代理服务平台的理论基础,设计思想,整体架构等。

其中最主要的是应用了J2EE中的JavaMail、JMS、EJB3中的消息驱动Bean和Lucene。

本文着重阐述了Lucene全文索引及检索技术在该系统中的应用,包括索引的建立,索引的修改,搜索,对搜索结果的高亮显示等。

关键字:

J2EE;JavaMail;消息驱动Bean;Lucene;全文检索

SupportFull-textSearchPlatformforE-mailProxyService

——ManagementofMultipleMailboxesandApplicationofLuceneinMailSearch

Abstract:

Thispaperdescribesthedesignandimplementationsupportforfull-textindexingofe-mailproxyserviceplatformbasedonthetheory,designthinking,theoverallstructureandsoon.ThemostimportantistheuseofJ2EEintheJavaMail,JMS,EJB3ofMessage-DrivenBeanandLucene.ThisarticlefocusesontheLucenefull-textindexingandretrievaltechnologyinthesystem,includingtheestablishmentoftheindex,indexchanges,andsearchonthehighlightedsearchresultsdisplay.

Keywords:

J2EE;JavaMail;Message-DrivenBean;Lucene;Full-textSearch

第1章引言

1.1课题背景

电子邮件是一种用电子手段提供信息交换的通信方式。

是Internet应用最广的服务:

通过网络的电子邮件系统,用户可以用非常低廉的价格,以非常快速的方式,与世界上任何一个角落的网络用户联系,这些电子邮件可以是文字、图像、声音等各种方式。

同时,用户可以得到大量免费的新闻、专题邮件,并实现轻松的信息搜索。

这是任何传统的方式也无法相比的。

正是由于电子邮件的使用简易、投递迅速、收费低廉,易于保存、全球畅通无阻,使得电子邮件被广泛地应用,它使人们的交流方式得到了极大的改变。

另外,电子邮件还可以进行一对多的邮件传递,同一邮件可以一次发送给许多人。

最重要的是,电子邮件是整个网间网以至所有其他网络系统中直接面向人与人之间信息交流的系统,它的数据发送方和接收方都是人,所以极大地满足了大量存在的人与人通信的需求。

当今社会是信息化的社会,人们并不仅仅满足于现有的电子邮件服务,由于移动办公的需要,电子邮件服务由单纯的客户端收发邮件发展到了Web邮件,但电子邮件的发展还未就此停止,现在的人群当中存在一大批人是拥有不止一个电子邮箱的,他们对电子邮件服务又有了新的需求,此时电子邮件服务就必须满足支持多个邮箱管理的功能。

1.2国内外研究现状

电子邮件发展到现在,用户使用电子邮件服务的方式有两种:

一种是用户使用个人计算机上的客户端软件,比如Outlook,Foxmail等。

Outlook是由美国微软公司(Microsoft)出品的免费软件,与InternetExplorer浏览器软件捆绑发行;Foxmail是由国人张小龙编写的一个功能强大非商业软件,它实现了真正的多用户、多账户、多POP3支持,自动进行拨号,能设置邮件过滤功能,能阅读和收发Big5码的邮件,可以直接查看HTML格式邮件。

这两种客户端软件只要通过适当的配置后,就可以对邮件进行接收和发送,但单纯使用邮件客户端程序进行邮件的收发已经不能满足用户移动办公的需要。

另一种就是使用WebMail系统,将E-mail和Web结合在一起,即通过Web编程和适当的系统设置,使用户仅仅以访问Web的方式就可以得到和使用完整的邮件服务的系统称为WebMail系统。

WebMail是目前Internet上最受欢迎和使用最多的服务之一,也是很多网站必备功能之一。

像网易、新浪等大型门户网站都提供了免费的WebMail服务,并在其中加入了一些别的实用功能。

如Google的GMail提供给邮箱用户网络硬盘,用户可以将一些电子资料存入网络硬盘中,并提供了全文检索的功能。

现在许多WebMail系统在这些方面的改进越来越多,并在一定程度上满足了用户的要求,但仅此还是不够的。

1.3课题的目的和意义

本课题意在设计并实现一种支持全文检索的邮件代理服务平台,使用户进一步感受到电子邮件服务给他们带来的方便与快捷。

虽然现有的邮件服务系统已经比较完善,但对于多个邮箱的支持还是比较少的,而且对多个邮箱中的文件进行统一管理的更少,因此有必要设计并实现一个支持多个邮箱收发邮件的系统。

对于这种服务系统,虽然现在在用户中使用地比较少,而且专门提供类似服务的系统也不多。

但随着电子邮件的发展,相信在这方面的需求会越来越突出,而这种系统将会越来越得到用户的青睐。

1.4本章小结

本章主要介绍了支持全文检索的邮件代理服务平台的研究背景、国内外的研究状况及本课题的目的和意义。

第2章相关技术及开发工具介绍

2.1J2EE简介

J2EE是一种利用Java2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。

J2EE技术的基础就是核心Java平台或Java2平台的标准版,J2EE不仅巩固了标准版中的许多优点,例如“编写一次、随处运行”的特性、方便存取数据库的JDBCAPI、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对EJB(EnterpriseJavaBeans)、JavaServletAPI、JSP(JavaServerPages)以及XML技术的全面支持。

其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。

J2EE体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用性、高可靠性以及可扩展性的应用的需求。

通过提供统一的开发平台,J2EE降低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持EnterpriseJavaBeans,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了性能[13]。

2.1.1JavaMail

JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。

它是Sun发布的用来处理email的API。

它可以方便地执行一些常用的邮件传输。

我们可以基于JavaMail开发出类似于MicrosoftOutlook的应用程序。

虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(JavaDevelopmentKit),这就意味着你在使用前必须另外下载JavaMail文件。

除此以外,你还需要有Sun的JavaBeansActivationFramework(JAF)。

JavaBeansActivationFramework的运行很复杂,在这里简单的说就是JavaMail的运行必须得依赖于它的支持。

在Windows2000下使用需要指定这些文件的路径,在其它的操作系统上也类似。

2.1.2JMS

JMS(JavaMessageService,Java消息服务)是一组Java应用接口,它提供创建、发送、接收、读取消息的服务。

JMSAPI定义了一组公共的应用程序接口和相应语法,使得Java应用能够和各种消息中间件进行通信,这些消息中间件包括IBMMQ-Series、MicrosoftMSMQ及纯Java的SonicMQ。

通过使用JMSAPI,开发人员无需掌握不同消息产品的使用方法,也可以使用统一的JMSAPI来操纵各种消息中间件。

通过使用JMS,能够最大限度地提升消息应用的可移植性。

JMS既支持点对点的消息通信,也支持发布/订阅式的消息通信。

2.1.3EJB3

EJB是sun的服务器端组件模型,最大的用处是部署分布式应用程序,类似微软的com技术。

凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。

EJB(EnterpriseJavaBean)是J2EE的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。

其特点包括网络服务支持和核心开发工具(SDK)。

在J2EE里,EnterpriseJavaBeans(EJB)称为Java企业Bean,是Java的核心代码,分别是会话Bean(SessionBean),实体Bean(EntityBean)和消息驱动Bean(MessageDrivenBean)。

ØSessionBean用于实现业务逻辑,它可以是有状态的,也可以是无状态的。

每当客户端请求时,容器就会选择一个SessionBean来为客户端服务。

SessionBean可以直接访问数据库,但更多时候,它会通过EntityBean实现数据访问。

ØEntityBean是域模型对象,用于实现O/R映射,负责将数据库中的表记录映射为内存中的Entity对象,事实上,创建一个EntityBean对象相当于新建一条记录,删除一个EntityBean会同时从数据库中删除对应记录,修改一个EntityBean时,容器会自动将EntityBean的状态和数据库同步。

ØMessageDrivenBean是EJB2.0中引入的新的企业Bean,它基于JMS消息,只能接收客户端发送的JMS消息然后处理。

MDB实际上是一个异步的无状态SessionBean,客户端调用MDB后无需等待,立刻返回,MDB将异步处理客户请求。

这适合于需要异步处理请求的场合,比如订单处理,这样就能避免客户端长时间的等待一个方法调用直到返回结果。

2.2Lucene

Lucene是apache软件基金会jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。

Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

Lucene作为一个全文检索引擎,其具有如下突出的优点:

Ø索引文件格式独立于应用平台。

Lucene定义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。

Ø在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。

然后通过与原有索引的合并,达到优化的目的。

Ø优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便扩充新功能。

Ø设计了独立于语言和文件格式的文本分析接口,索引器通过接受Token流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。

Ø已经默认实现了一套强大的查询引擎,用户无需自己编写代码即使系统可获得强大的查询能力,Lucene的查询实现中默认实现了布尔操作、模糊查询、分组查询等等[9]。

2.3开发环境及工具

开发环境:

WindowsXPSP2

Java环境:

JDK6.0

开发工具:

MyEclipse6.0

部署环境:

SunJavaSystemApplicationServer9.1

第3章系统总体设计

3.1总体设计框架

支持全文检索的邮件代理服务平台主要是利用J2EE和Lucene来架构,涉及到J2EE中的JSP、Servlet、JavaMail、JMS、EJB3中的消息驱动Bean,以及Lucene中的索引、搜索和高亮等。

该系统的整体框架如图3-1所示。

图3-1支持全文检索的邮件代理服务平台整体框架

3.2系统基本功能

支持全文检索的邮件代理服务平台主要是为满足用户有多个邮箱,并且需要对多个邮箱进行统一管理,包括接收各个邮箱中的邮件,通过各个不同的邮箱来发送邮件等,因此在该系统中需要提供的功能有:

Ø接收多个邮箱中的邮件;

Ø通过不同的邮箱发送不同的邮件;

Ø添加不同的邮箱;

Ø可以对收件箱中的邮件进行全文检索;

Ø对用户密码进行修改;

Ø对已添加的邮箱进行修改。

3.2.1系统模块结构图

根据系统所具有的基本功能得到该系统的功能模块结构示意图,如图3-2所示。

图3-2系统功能模块结构示意图

3.2.2各个模块功能概述

该系统中包含的功能有:

注册、登录、接收邮件、写邮件、邮件管理(查看/删除/回复)、已发邮件管理(查看/删除/转发)、邮箱管理(添加/删除/修改)、邮件的索引和邮件的搜索。

各个功能模块分别介绍如下:

1.注册

注册部分主要是为了使刚开始使用该系统的用户能有自己唯一的一个账户,并能在注册之后使用该系统。

用户所提供的密码是经过DES加密后才存储的。

2.登录

登录部分主要是为了验证用户所提供的用户名和密码的合法性,若合法的话,则提供给该用户相应的可靠服务,否则做非法用户处理,并且要求该用户注册或者是提示该用户他所提供的用户名和密码是非法的,要求其重新登录。

3.接收邮件

接收邮件部分主要是为了帮用户接收用户所提供的邮箱中的邮件,这是一个后台的服务程序,用户自己是感觉不到什么时候接收到邮件的,但后台程序会定时地为每一个用户提供邮件接收的服务。

并且每个邮箱中的邮件是不会被重复接收的。

4.发送邮件

发送邮件部分是给用户提供发送新邮件之用,这里可以支持不同的邮箱发送邮件,就是说虽然用户是在同一个地方写新邮件、发送邮件,但是该系统可以根据用户所提供的不同的发件人,让用户用他自己的不同邮箱来发送信件,而接收信件的人则看到的也是不同的发件人。

5.邮件管理(查看/删除/回复)

邮件管理部分主要是提供用户查看邮件、删除邮件和回复邮件的功能。

当用户接收到新邮件时,收到的新邮件都会重点提示用户这是一封新邮件,让用户很快就能看到是否有新的邮件。

当有邮件时,用户可以查看邮件。

查看的时候,如果用户想回复该邮件,则点击“回复”,系统就自动产生一封新的邮件,用户只需写好信的内容即可发送。

当然,如果用户认为收件箱中的邮件已经没有利用价值,就可以删除邮件。

6.已发邮件管理(查看/删除/转发)

已发邮件管理部分主要是为了用户方便管理已经发送的邮件和未发送成功的邮件。

凡是用户发送过的邮件,不管是否发送成功,用户都可以在已发邮件中找到该邮件,并且可以删除和转发。

7.邮箱管理(添加/删除/修改)

邮箱管理部分主要是让用户可以添加自己已有的所有邮箱,之后该系统可以帮用户在后台接收这些邮箱中的所有邮件,这是为了方便用户统一管理自己的所有邮箱。

在这里,用户可以随意添加、删除和修改自己的邮箱。

8.邮件的索引

邮件的索引主要是为邮件的搜索做准备,只要系统在后台接收到新邮件,系统就会自动的为该邮件建立索引,方便用户以后对该邮件的搜索。

这是由Lucene来实现的,这与直接对数据库进行搜索相比较,效率比较高,而且功能也比较强,易于在以后扩展。

9.邮件的搜索

邮件的搜索主要是提供给用户查找自己的相关邮件之用,这是通过之前建立的邮件全文索引来实现的,应用Lucene中提供的搜索功能构建自己的搜索器,将搜索的结果返回给用户,并高亮显示一些关键字,能使用户很准确的找到自己想要的邮件。

3.3数据库设计

支持全文检索的邮件代理服务平台中存在有四种不同用处的表,包括用户表,已收邮件表,已发邮件表,邮箱表。

3.3.1用户表

用户表是用来存放已注册的用户名和密码,因此该表只有2个字段,包括用户名和密码。

用户实体E-R图如图3-3所示,用户表的具体各字段设计如表3-1所示。

图3-3用户实体E-R图

表3-1用户表

Name

Type

Nullable

Key

USERNAME

VARCHAR2(50)

NOTNULL

*

PASSWORD

VARCHAR2(50)

NOTNULL

3.3.2已收邮件表

已收邮件表是用来存放该用户所有邮箱中的邮件,该表中有8个字段,包括序列sid、邮件的ID、发件人mailfrom、收件人mailto、邮件主题subject、邮件内容content、时间time和状态state。

已收邮件实体E-R图如图3-4所示,已收邮件表的具体各字段设计如表3-2所示。

图3-4已收邮件实体E-R图

表3-2已收邮件表

Name

Type

Nullable

Key

SID

NUMBER

NOTNULL

ID

VARCHAR2(100)

NOTNULL

*

MAILFROM

VARCHAR2(100)

NOTNULL

MAILTO

VARCHAR2(100)

NOTNULL

SUBJECT

VARCHAR2(200)

NOTNULL

CONTENT

CLOB

TIME

VARCHAR2(30)

NOTNULL

STATE

VARCHAR2

(2)

3.3.3已发邮件表

已发邮件表是用来存放该用户已经发送过的邮件,该表中有8个字段,包括序列sid、邮件的ID、发件人mailfrom、收件人mailto、邮件主题subject、邮件内容content、时间time和状态state。

该表与收件箱表的设计相同,已发邮件实体E-R图如图3-5所示,已发邮件表的具体各字段设计如表3-3所示。

图3-5已发邮件实体E-R图

表3-3已发邮件表

Name

Type

Nullable

Key

SID

NUMBER

NOTNULL

ID

VARCHAR2(100)

NOTNULL

*

MAILFROM

VARCHAR2(100)

NOTNULL

MAILTO

VARCHAR2(100)

NOTNULL

SUBJECT

VARCHAR2(200)

NOTNULL

CONTENT

CLOB

TIME

VARCHAR2(30)

NOTNULL

STATE

VARCHAR2

(2)

3.3.4邮箱表

邮箱表是用来存放该用户所添加的所有邮箱,该表中有3个字段,包括序列id、邮箱名email和密码password。

邮箱实体E-R图如图3-6所示,邮箱表的具体各字段设计如表3-4所示。

图3-6邮箱实体E-R图

表3-4邮箱表

Name

Type

Nullable

Key

ID

NUMBER

NOTNULL

EMAIL

VARCHAR2(50)

NOTNULL

*

PASSWORD

VARCHAR2(50)

NOTNULL

3.4本章小结

本章主要介绍了支持全文检索的邮件代理服务平台的总体设计框架、系统基本功能模块、数据库的设计,让读者对该系统有一个总体的认识。

下一章将具体阐述邮箱管理、用户管理及JMS应用的详细设计和实现。

第4章部分系统模块详细设计与实现

在支持全文检索的邮件代理服务平台中一共有六个模块,如图3-2所示,分别为注册登录、邮件管理、写邮件、邮箱管理、用户管理和邮件检索。

由于该系统是由两人合作完成,因此在本章将详细介绍该系统的邮箱管理和用户管理模块。

4.1邮箱管理模块

在邮箱管理模块中,包括添加邮箱、修改邮箱和删除邮箱,其给用户所提供的功能为:

用户可以添加其所有邮箱到该系统中,系统在后台负责管理其已添加的所有邮箱。

但有一点用户应该注意的:

在添加邮箱的时候,用户应该提供其正确的邮箱用户名和密码,确保系统能真正管理该邮箱。

因为系统不会去检查该邮箱的合法性。

当然用户还可以修改其之前所添加的邮箱,以防用户输入错误。

如该邮箱对用户来说已经没有使用价值的话,该邮箱可以被删除。

4.1.1添加邮箱

在该模块中的添加邮箱部分,系统只是比较简单的将用户所提供的用户名和密码存入了系统的数据库中。

若用户提供的邮箱用户名和密码有误的话,系统将接收不到该邮箱中的邮件,自然不能为用户起到管理邮箱的作用。

在用户添加邮箱的时候,为了能让用户能及时的看到他那个邮箱中的邮件,在添加邮箱成功的时候,程序会开一个接收邮件的线程,让这个线程去接收这个邮箱中的邮件。

这样在后台开启一个线程,毕业设计论文代做平台《580毕业设计网》是专业代做团队也有大量毕业设计成品提供参考QQ3449649974

用户也不能觉察到接收邮件的过程,但后台程序确实已经开始接收邮件的工作了。

只要过一定时间,用户就可以在他的收件箱中看到已经收到的邮件。

该模块中添加邮箱部分的具体实现:

Ø用request类中的getParameter()方法得到用户在setupMailBox.jsp页面中所提交的邮箱名和密码;

Ø用DES加密算法对用户提交的密码进行加密处理;

Ø根据以上得到的邮箱名和密码,实例化一个邮箱类;

Ø通过JNDI查找数据源jdbc/oracleds,得到一个数据库的连接;

Ø将实例化的一个邮箱类,通过MailBoxDAOJdbc类来存入数据库;

Ø存入数据库成功的话就开启一个接收邮件的一个线程,来接收刚添加的邮箱中的邮件。

否则,页面跳转回添加邮箱的页面setupMailBox.jsp。

在该模块的实现中,添加邮箱部分用到了JDBC、Servlet和JSP技术。

实现的流程图如图4-1所示。

图4-1添加邮箱部分流程图

部分代码简析:

//通过request类的getParameter()方法得到邮箱名和密码

Stringemail=request.getParameter("email").toString();

StringmailServerName=request.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1