您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页建立基于Web技术的邮件服务平台

建立基于Web技术的邮件服务平台

来源:华佗小知识
大连民族学院计算机科学与工程系2004届毕业论文

建立基于Web技术的邮件服务平台

摘要:本文讲述了一个基于Web技术的邮件平台的开发过程。着重从服务器平台安装配置和用户界面的开发方面详细阐述了整个邮件平台开发的全过程。对开发过程中的难点进行了分析和研究,并通过系统结构图,功能模块图,配置文件,数据字典等方式形象地描述出来。

基于Web技术的邮件服务平台的开发主要包括服务器的安装配置,用户信息数据库的建立,用户访问界面程序的开发三个方面。对于服务器需要稳定性好、安全可靠,负载能力强,对于数据库需要安全可靠、数据完整性强。而对于用户界面应该具有能全面、友好易用等特点。

经过分析,我使用Windows XP作为Web服务器,使用Red Hat Linux 9作为DNS和邮件服务器,使用SQL server 2000作为后台数据库,使用JSP、Java、HTML为用户界面开发工具,使用Java Mail API为邮件处理程序的应用接口。并采用了目前流行的Java Servlet技术,保证了用户界面程序良好的可扩展性和可维护性。

关键词:基于Web技术,邮件服务平台,服务器,用户信息数据库,Java Servlet技术,Java Mail API

I

建立基于Web技术的邮件服务平台 李治坤

Build a mail serve platform that base on Web

technique

Abstract: This text related a development of a mail serve platform that base on the Web technique. Text elaborated the whole process that mail platform develop, emphasize from the installation and setup of server and development of the custom interface. We have analyzed and studied for the difficulties of development, then described these vividly through the tools of the System Structure, Function Module, Configuration Files, Data Dictionary, etc The development of Mail Serve Platform That Base On Web Technique mainly includes the three aspects of the installation and setup of the server, the consumer information database creates and the custom interface program development. We need a stability good safety and capability strong server, we need a safety and complete database, we need a friendly and use easily custom interface.

As a result of analysis, I use Windows XP of Microsoft Corporation as the Web server, select Red Hat Linux 9 as the DNS and Mail server, use JSP, Java, HTML as development language, use Java Mail API as mail processing interface, and adopt Java Servlet Technique to guaranteed extensibility and ability of supportable.

Key words: base on Web technique, mail serve platform, server, custom information database, Java Servlet Technique, Java Mail API

II

大连民族学院计算机科学与工程系2004届毕业论文

目录

引言 ................................................ 1 第一章 电子邮件系统概述 ................................ 2 1.1 电子邮件系统介绍 ............................... 2 1.1.1 电子邮件系统发展简史 ........................ 2 1.1.2 电子邮件系统的作用 .......................... 3 1.1.3 电子邮件系统发展的现状及存在的问题 ............ 4 第二章 电子邮件系统分析 ................................ 5 2.1 电子邮件系统的需求分析 .......................... 6 2.1.1 用户对电子邮件系统的需求 ..................... 6 2.2 电子邮件系统的基本结构 .......................... 7 2.3 构建邮件系统的准备工作 .......................... 7 2.3.1 操作系统和服务器软件的选择 ................... 7 2.3.2 编程语言和编程环境的选择 ..................... 8 2.3.3 服务器软件的选择 ............................ 9 2.3.4 其它软件的选择 ............................. 9 第三章 系统的总体规划 ................................. 10 3.1 系统平台的规划 ............................... 10 3.2 邮件系统主要功能的设计 ......................... 11 3.2.1 登录、身份认证 ............................ 11 3.2.2 用户密码的修改和找回 ....................... 12 3.2.3 邮件的收发 ................................ 12 3.2.4 邮件的管理 ................................ 12 3.2.5 地址管理 ................................. 12

III

建立基于Web技术的邮件服务平台 李治坤

第四章 系统的具体实现 ................................. 13 4.1 服务器平台的实现 .............................. 13 4.1.1 Web服务器的安装配置 ........................ 13 4.1.2 DNS服务器的安装配置 ........................ 14 4.1.3 邮件服务器的安装配置 ....................... 16 4.2 数据库的实现 ................................. 18 4.2.1 数据库建立的目的 ........................... 18 4.2.2 数据库的设计 .............................. 18 4.3 用户界面的设计 ............................... 21 4.3.1 用户登录界面 .............................. 21 4.3.2 邮件列表界面 .............................. 21 4.3.3 邮件编辑界面 .............................. 22 4.3.4 邮件读取界面 .............................. 22 4.3.5 对附件的处理 .............................. 22 4.3.6 用户地址簿的处理 ........................... 23 第五章 结论和体会 .................................... 24 致谢 ............................................... 25 参考文献 ............................................ 26 附录A 程序源代码 ...................................... I 附录B 外文参考资料及译文 ............................... I

IV

大连民族学院计算机科学与工程系2004届毕业论文

引言

我的毕业设计的题目是《基于Web技术的邮件服务平台》,秉着尽可能的将大学四年所学的所有知识融会贯通,全部展现出来让学校验收的原则我自选了这个题目。在开发的过程中我严格按照软件工程的开发流程,认真地进行调研、系统分析与设计、编码及测试工作。所开发的电子邮件平台无论在功能、性能、安全性方面,还是在用户界面的友好度上都能达到令人满意的结果。

目前,电子邮件是互联网上使用最为广泛的功能,现已成为公司进行顾客服务的强大工具,成为网络用户之间快捷、简便、可靠且成本低廉的现代化通讯手段,也是互联网上使用最广泛、最受欢迎的服务之一。电子邮件是网络顾客服务双向互动的根源所在,它是现实公司与顾客对话的双向走廊和实现顾客整合的必要条件。目前互联网上60%以上的活动都与电子邮件有关。所以掌握电子邮件的应用,学习构建电子邮件服务体系是十分有必要的。

鉴于以上原因,我开发了这个基于Web技术的邮件服务平台。目的是希望能为中小型企业提供一个企业内部的邮件服务的解决方案。内容主要包括有用户注册、用户身份认证、邮件收发、邮件读写、邮件管理等。

本论文对该邮件服务平台从开始分析到实际开发完成作了详尽的叙述,第一章对邮件系统作了简单的介绍,第二章介绍了前期系统分析的内容,第三章介绍了系统的规划方案,第四章详细介绍了整个平台实现的过程,第五章是结论和开发过程中我的一些体会,最后是致谢和参考文献部分。

1

建立基于Web技术的邮件服务平台 李治坤

第一章 电子邮件系统概述

电子邮件(Electronic-Mail也称为E-mail,它是用户或用户组之间通过计算机网络收发信息的服务。目前,电子邮件是互联网上使用最为广泛的功能,现已成为公司进行顾客服务的强大工具,成为网络用户之间快捷、简便、可靠且成本低廉的现代化通讯手段,也是互联网上使用最广泛、最受欢迎的服务之一。

电子邮件是网络顾客服务双向互动的根源所在,它是现实公司与顾客对话的双向走廊和实现顾客整合的必要条件。目前互联网上60%以上的活动都与电子邮件有关。使用互联网提供的电子邮件服务,实际上并不一定需要直接与互联网联网,只要通过已与互联网联网并提供邮件服务的机构收发电子邮件即可。

1.1 电子邮件系统介绍

1.1.1 电子邮件系统发展简史

电子邮件(Electronic Mail,E-Mail),是应用于Internet上的最广泛使用、最受欢迎的网络功能。

电子邮件来源于专有电子邮件系统。早在Internet流行以前很久,电子邮件就已经存在了,是在主机-多终端的主从式体系中从一台计算机终端向另一计算机终端传送文本信息的相对简单的方法而发展起来的。

经历了漫长的过程之后,它现在已经演变成为一个更加复杂并丰富得多的系统,可以传送声音、图片、图像、文档等多媒体信息,以至于如数据库或账目报告等更加专业化的文件都可以电子邮件附件的形式在网上分发。现在,电子邮件已成为许多商家和组织机构的生命血脉。用户可以通过电子邮件的讨论会进行项目管理,并且有时要根据快速,或洲际的电子邮件信息交换进行重要的决策行动。

但毫无疑问的是,Internet扩展了其应用的范围。过去只能在其局域

2

大连民族学院计算机科学与工程系2004届毕业论文

网上进行交谈的公司现在可以通过网络与他们的客户、竞争伙伴和世界上的任何人进行通信和交流。一旦某个组织的电子邮件系统运行在支持TCP/IP协议的网络上或具有支持两个Internet邮件服务协议SMTP(简单邮件传输协议)和POP(邮局协议)之一的Internet网关,它的邮件用户就能够连接到任何具有相似连接的电子邮件地址上了,并且不论其电子邮件帐户在何处。

1.1.2 电子邮件系统的作用

(1) 利用电子邮件可与顾客建立主动的服务关系

传统的顾客服务常常是被动的,顾客向公司提出问题后,公司再解决。而通过电子邮件,公司可实现主动的顾客服务,而不是被动的等待顾客要求服务。利用电子邮件进行主动的顾客服务有以下两个方面的内容:

一是主动向顾客提供公司的最新信息。公司的老顾客需要了解公司的最新动态,如公司新闻、产品促销、产品升级等。公司可将这些信息及时主动地以新闻信件的形式发送给需要这类信息的顾客。

二是获得顾客需求的反馈,将其整合到公司的设计、生产、销售等营销组合系统中。要了解顾客的要求可以通过电子邮件直接向顾客询问,但是不宜设计包括很多问题的问卷。因为,这种问卷的回收率通常很低,网上冲浪者通常是不耐烦的,对比较长的问卷往往没有耐心填写完毕,所以要想让顾客回答你的咨询,最好每次只设计一个具体的问题。这个问题应简洁明了,易于阅读、易于回答,顾客只要用很短时间就能回答完毕。同时,因为每次只提一个问题,为了不浪费顾客的时间和精力,公司又要有所获得,所以,在设计需询问的问题时,要慎重考虑,使之直接作用于产品质量、服务等,取得更好的效果。

(2) 利用电子邮件传递商务单证

为了规范电子商贸的过程和信息服务的方式,人们常常在公司商务站点中设置许多表格。通过表格在网络上的相互传递来达到商务单证交换的目的。在WebSite的设计过程中,表格是通过屏幕设计的结构和内容来完成的,而表格中所填写的内容则是通过电子邮件来传送的。

以支持交易前的网络商务系统为例,经常用于网络站点的表格和单证有:用户意见及产品需求调查卷;产品购买者信息反馈及维修或保修信息

3

建立基于Web技术的邮件服务平台 李治坤

反馈表;对某种产品需求的意向、特殊要求、数量和要求给出价格的商品报价申请表;初始产品的报价单;定货单以及有奖问卷回执单等等。

(3) 利用电子邮件,还可进行其他访问的信息服务

利用电子邮件除了可以进行正常的通信联系,与顾客建立主动的服务关系传递商务单证以外,还可访问的信息服务仅列出以下四种:

 用电子邮件遨游万维网(WWW--World Wide Web) 万维网是互联网络上最受欢迎、最为流行的信息检索服务程序。 能把各种类型的信息 (静止图像、文本、声音和影像)有机地集成起来,供用户阅读、查找。

 用电子邮件做Gopher搜寻。Gopher是一种整合式的信息查询服务系统,它可为使用者提供一个方便的操作界面。利用它可以用简单的选单方式(Menu)来获得所需要的文件资料、生活信息、文件存取、News信件查询等各类资料。

 用电子邮件做文件传输服务(FTP----File Transfer Protocol)。FTP是一种实时的联机服务。它的任务是将文件从一台计算机传送到另一台计算机,它不受这两台计算机所处的位置、连接的方式以及所采用的操作系统的约束。

 使用电子邮件做文件查询索引服务 (Archie、WAlS)。 Archie在英文中是“工具”的意思,它是互联网络上用来查找满足特定条件的所有文档的自动搜索服务工具。Archie系统的目的就是向互联网络用户提供有效的数据库,负责这些数据库的创建和维护。使用Archie服务器有3种方法。

1.1.3 电子邮件系统发展的现状及存在的问题

随着Internet的迅猛发展,电子邮件系统也在不断的完善。从最开始telnet登陆服务器用命令编辑的方式发送纯文本格式的邮件,到现在通过浏览器登录发送图文兼备甚至是包含音频、视频的邮件。电子邮件一直在向更方便、更快捷、更安全、更人性化的方向发展着。不过伴随着邮件系统的发展也带来了不少的问题。发送邮件的方便使得一些不怀好意的人编写程序不断地向各个服务器发送邮件,导致垃圾邮件的泛滥。更有甚者利用邮件来传播电脑病毒,给全球的Internet用户带来了很多不必要的损失。

4

大连民族学院计算机科学与工程系2004届毕业论文

第二章 电子邮件系统分析

使用电子邮件服务的前提是拥有自己的电子信箱。电子信箱一般又称为电子邮件地址(E-mail Address)。电子信箱是电子邮件服务的机构为用户建立的,实际上是电子邮件服务机构在互联网联网的计算机上为用户分配的一个专门用于存放往来邮件的磁盘存储区域,这个区域由电子邮件系统管理。要发送和接收电子邮件,显然,用户需要拥有一个电子邮件地址,但一定不要把电子邮件地址和口令 (Password)相混淆,前者是公开的,便于用户之间、用户与公司之间通信;后者是保密的,不能让他人知道。

一件电子邮件由两部分组成,即邮件头和邮件体。邮件头包含有发信者与接收者有关的信息,如发出地点和接收地点的网络地址、计算机系统中的用户名、信件的发出时间与接收时间,以及邮件传送过程中经过的路径等;邮件体是信件本身的具体内。一般是ASCII码表达的邮件正文。邮件头就像普通信件的信封一样,但是邮件头不是由发信人书写,而是在电子邮件传送过程中由系统形成的。邮件体像普通邮件的信笺,是发信人输入的信件内容,通常用编辑器预先写成文件,或者在发电子邮件时用电子邮件编辑器编辑或联机输入。

电子邮件服务器是处理邮件交换的软硬件设施的总称,包括电子邮件程序、电子邮件箱等。它是为用户提供全由E-mail服务的电子邮件系统,人们通过访问服务器实现邮件的交换。服务器程序通常不能由用户启动,而是一直在系统中运行,它一方面负责把本机器上发出的E-mail发送出去,另一方面负责接收其他主机发过来的E-mail,并把各种电子邮件分发给每个用户。

电子邮件程序是计算机网络主机上运行的一种应用程序,它是操作和管理电子邮件的系统。在你处理电子邮件时,需要选择一种供你使用的电子邮件程序。由于网络环境的多样性,各种网络环境的操作系统

5

建立基于Web技术的邮件服务平台 李治坤

2.1 电子邮件系统的需求分析

2.1.1 用户对电子邮件系统的需求

(1)

方便性。电子邮件系统可以像使用留言电话一样,在自己方便

的时候处理记录下来的请求,通过电子邮件可以方便地传送文本信息、图像文件、报表和计算机程序。

(2) (3)

广域性。电子邮件系统具有开放性,许多非互联网络上的用户快捷性。电子邮件在传递过程中,若某个通信站点发现用户给

可以通过网关(Gateway)与互联网络上的用户交换电子邮件。

出的收信人的电子邮件地址有错误而无法继续传递时,电 子邮件会迅速地将原信件逐站退回,并通知不能送达的原因。当 信件送到目的地的计算机后,该计算机的电子邮件系统就立即将 它放人收信人的电子信箱中,等候用户自行读取。用户只要随时以计算机联机方式打开自己的电子邮件信箱,便可以查阅自己的邮件。

(4)

透明性。电子邮件系统采用“存储转发”的方式为用户传递电子

邮件,通过在互联网络的一些通信节点计算机上运行相应的软件,使这些计算机充当“邮局”的角色。当用户希望通过互联网络给某人发送信件时,首先要与为自己提供电子邮件的计算机联机,然后把要发送的信件与收信人的电子邮件地址发给电子邮件系统。电子邮件系统会自动地把用户的信件通过网络一站一站地送到目的地,整个过程对用户来说是透明的。

(5)

廉价性。互联网络的空间几乎是无限的,公司可以将不同详细

程度的有关产品、服务的信息放在网络站点上,这时顾客不仅可以随时从网上获得这些信息,而且在网上存储、发送信息的费用都低于印刷、邮寄或电话的费用。在公司与顾客“一对一”关系的电子邮件服务中,费用低廉,从而节约大量费用。

(6)

全天候。对顾客而言,电子邮件的优点之一是没有任何时间上

的。一天24小时,一年365天内,任何时间都可发送电子邮件。比如,当顾客发生问题时,他们随时都可以把发生的问题发送给公司,而公司有关负责人可以在他方便的时候,查阅这些信件,决定哪些信件必须首

6

大连民族学院计算机科学与工程系2004届毕业论文

先处理,哪些可以稍后处理,哪些应该转发给其他部门去承办。而以前没有电子邮件时,顾客的产品本身或产品在使用过程中发生了问题,需要等到公司人员上班时,才能给公司打电话。而且什么时候打电话也很讲究,打早了,公司负责人还没有上班,打晚了公司负责人又可能出去开会了。电子邮件的全天候服务,从根本上解决了这种状况,大大改善了公司与顾客的关系,改善了公司对顾客的服务。

2.2 电子邮件系统的基本结构

一个邮件系统是由实现各种功能的服务器组成的功能集合。实现基于Web技术的邮件服务平台至少需要有以下几种服务器提供相应的服务功能:

邮件服务器。这是电子邮件系统不可缺少的。该服务器是实现邮件发送、接收、储存、转发的不要条件。但是该服务器无法提供友好的访问界面。用户虽然也可以直接访问邮件服务器,但要实现各种功能就需要记住大量复杂的命令。所以友好的邮件系统还需要由Web服务器来提供用户访问界面。

Web服务器。该服务器为用户提供邮件系统的访问界面,用户在远程计算机通过浏览器访问邮件系统,通过Web服务所提供的界面实现各种功能。

DNS服务器。在电子邮件系统中还需要一种很重要的服务这就是DNS域名解析服务。在电子邮件系统中的域名解析服务并不是为用户访问提供域名解析,而是为邮件服务器与邮件服务器之间的访问提供正确的域名解析。

将以上3种服务器联系起来就可以构建一个最基本的电子邮件系统。

2.3 构建邮件系统的准备工作

2.3.1 操作系统和服务器软件的选择

为了发挥各个系统的长处,我们选择了两个操作系统,作为邮件服务

7

建立基于Web技术的邮件服务平台 李治坤

平台的服务器操作系统。Windows XP该系统虽然只是Microsoft开发的一个个人计算机操作系统,但是它采用的是Windows NT的内核,拥有较好的稳定性以及比Windows2000高得多的磁盘读写能力,所以安装上服务器软件后的Windows XP系统一样是一个很可靠的服务器平台,更重要的是Windows XP的兼容性比Windows 2000 Server要好很多,各种软件在系统中都可以很好的运行,所以我们使用Windows XP作为Web服务器,以及用户界面代码的编辑环境。Linux不仅是一个优秀的个人桌面操作系统,更是一个优秀的网络操作系统,他支持多种网络服务,像WWW、Mail、FTP、DNS和SMB等。使用Linux,可以成功地搭建高效的企业网络和网站等各种网络应用。Red Hat Linux作为Linux系统中的佼佼者,在各个方面都得到了广泛的应用。所以我选择Red Hat Linux 9作为邮件服务器和DNS服务器的操作系统平台。

2.3.2 编程语言和编程环境的选择

JSP是Java Server Pages的缩写,它是一种动态网页技术标准。在传统HTML网页文件(*.htm,*.html)中加入Java程序片断(Scriptlet)和JSP标记,就构成了JSP网页(*.jsp)。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序片断,然后将执行结果以HTML格式返回给客户。程序片断可以操作数据库、可以重定向网页、可以发送和接收电子邮件等动态网页所需要的功能。所有的程序都在服务器段执行,在通过网络传送到客户端的仅是程序执行的结果,因此对客户端浏览器的要求很低。

JSP技术功能强大、使用灵活,为创建显示动态内容的Web网页提供了一个简洁而快速的方法。JSP技术的设计目的是使编写基于Web的应用程序更加容易和快捷的同时,保证这些应用程序能够与各种Web服务器、浏览器和开发工具共同工作。所以我使用JSP作为我毕业设计的开发语言。

JSP对编程环境的要求不像其他语言那么苛刻,但是有个好的编程环境会让我们的工作事半功倍,我使用的编程环境是J Builder 9它可以很方便的建立工程、WebApplication、Package和Servlet,还能有效地对WebApplication进行部署。在调试的时候由于J Builder 9 内嵌的Tomcat

8

大连民族学院计算机科学与工程系2004届毕业论文

和我们使用的Tomcat服务器会发生端口冲突。所以在调试的时候我使用UltraEdit作为源代码的编辑器。UltraEdit支持Java,JSP,HTML和JavaScript的高亮显示,可以给我的调试工作带来了很大的方便。

2.3.3 服务器软件的选择

(1) Web服务器软件

Tomcat是Java Servlet和Java Server Pages技术的标准实现,最初是基于Apache许可证下开发的自由软件用来给Apache提供解释JSP的功能模块。发展到现在Tomcat不仅仅是一个JSP解释器和Servlet容器,它还具有了Web服务器的功能。作为当今使用最广泛的Servlet/JSP服务器,它运行稳定,性能可靠,是学习和中小型企业的最佳选择。我以我选用Tomcat作为Web服务器软件。

(2) 邮件服务器软件

说到邮件服务器软件人们肯定会想到大名鼎鼎的Sendmail,它是最早的邮件服务器软件之一,它的功能十分强大,配置十分的繁琐,不过如果只需要一些常用的功能,它的配置还是比较方便的。它可以轻松的是现在SMTP和POP3页以下的邮件的接收、发送、转发,而且现在各种Linux版本中都会自带Sendmail的软件包,所以在Linux下使用Sendmail作为邮件服务器软件是毫无疑问的。

(3) DNS服务器软件

Red Hat Linux 9系统下自带了一款DNS服务器软件bind,它也是常用的DNS服务器软件之一。它能够提供DNS解析所需要的所有功能,所以我们就直接使用它作为DNS服务器软件。

2.3.4 其它软件的选择

由于开发条件的,我只有一台计算机进行开发,而又要实现两台计算机互联,一台使用Windows XP,另一台使用Red Hat Linux 9。所以我使用了VMware Workstation的虚拟机软件,这个软件的功能是用软件模拟一台完整的计算机,并且可以实现主机和虚拟计算机以及主机所连接的网络和虚拟计算机的通信。这样我就可以同时运行Windows和Linux,并且实现两个系统的互联,远程计算机可以同时访问主机和虚拟计算机。这个软件为整个开发过程带来了很大的方便!

9

建立基于Web技术的邮件服务平台 李治坤

第三章 系统的总体规划

一个邮件平台它既可以是C/S结构,向我们平时所使用的outlook,foxmail等软件,它们配上邮件服务器就组成了一个C/S结构的邮件服务平台。而我的毕业设计所做的是基于Web技术的邮件服务平台。它所使用的是B/S结构,用户无论在何地,只要能连接Internet,只要有一个Internet浏览器就可以使用该邮件系统。因此该邮件系统主要是服务器端的配置和用户界面的设计。所有的用户界面都运行在服务器上,对客户端没有其他的要求。

3.1 系统平台的规划

整个邮件系统平台由两台计算机,4个服务器段软件组成,一台计算机安装Windows XP操作系统,上面安装Tomcat和SQL Server 2000作为Web服务器和数据库服务器。Web服务器为用户提供访问界面,将服务器返回的信息反馈给用户。数据库服务器为用户的注册信息和用户登录系统时的身份认证提供数据库支持。另外一台计算机(由VMware Workstation虚拟的计算机)安装Red Hat Linux 9操作系统,上面安装sendmail和Bind作为邮件服务器和DNS服务器。邮件服务器实现与邮件操作有关的所有功能,DNS服务器为邮件服务器和Web服务器提供正确的域名解析。该邮件平台的系统结构图如下所示。

10

大连民族学院计算机科学与工程系2004届毕业论文

图(1) 邮件平台的系统结构图

3.2 邮件系统主要功能的设计

作为一给邮件系统最基本的功能就是收发邮件,但是这还远远不够,用户访问邮件系统需要用户身份认证才能保证用户信息的安全,不能让用户面对大量的个人邮件确束手无策,因此用户邮件的管理功能也是必需的。还有很多的功能,只要是用户想要的就应该建立此功能。

图(2) 邮件系统的功能模块图

3.2.1 登录、身份认证

该模块包括用户的注册,系统的登录记住界面的设计。因为所有的系统维护都是主机的系统管理员在后台进行,所以身份认证只考虑普通用户。已注册的用户在正确输入用户名和密码以后就可以登录进入邮件列表

11

建立基于Web技术的邮件服务平台 李治坤

的界面。未注册的用户需要进入注册界面,输入新的用户名、密码以及确认密码和一些必要的用户信息才能注册,注册成功以后系统自动返回登录界面,重新登陆后方可进入系统的主界面。

3.2.2 用户密码的修改和找回

用户可以随意的修改自己的用户密码,但必须要在用户登录以后。用户进入密码修改界面,会看到自己的用户名。输入用户现在的密码,和用户想要的新密码以及确认新密码后用户就可以成功的修改自己的密码。

忘记自己密码的用户可以在登录页面上选择找回密,输入用户名和用户注册时使用的邮件地址。当用户名以及邮件地址与系统数据库里的用户注册信息相吻合时,系统就会返回用户的密码。

3.2.3 邮件的收发

该模块实现用户收发邮件的功能,包括邮件的读取功能、邮件的编辑功能,邮件的列表功能,邮件的转发功能,邮件的优先级设置功能以及邮件附件的添加功能。编辑功能为用户提供了编写邮件的界面,用户在这个界面可以填写要发送的地址、邮件的标题、邮件的内容,添加附件,设置邮件的优先级并且可以发送邮件。邮件列表功能可以告诉用户邮箱中有多少封邮件,有哪些是新邮件。点击可以进入读取邮件的界面,阅读相应的邮件。在邮件列表中还可以对邮件进行管理。

3.2.4 邮件的管理

用户通过邮件管理模块可以实现邮件的删除,邮件的下载等功能。在邮件列表界面里,每条邮件信息之前有个复选框,选择上复选框在点击删除按键就会删除所选择的邮件。每条邮件信息之后有一个超级链接,通过该链接可以下载邮件中的附件内容。这样用户就可以一目了然的管理自己的邮件。

3.2.5 地址管理

该模块的功能是帮助用户管理联系人的邮件地址,可以对地址进行分类,添加、删除或修改地址。用户在发邮件的时候可以直接从所有地址中导出他所需要的一个或多个地址。

12

大连民族学院计算机科学与工程系2004届毕业论文

第四章 系统的具体实现

在系统实现的过程中,我将整个邮件服务平台划分为服务器平台、数据库、和用户界面三个部分。然后按照由低层到高层的顺序逐步实现。服务器平台位于系统的最底层,从系统安全和效率考虑,我尽可能的简化配置,只安装必要的软件,关闭不需要的服务和端口。数据库的表的设计尽可能的全面。最高层用户界面的设计考虑到系统维护的方便性,我采用了Java Servlet技术。将网页代码和Java代码分离,与数据库连接的代码和邮件操作的代码分别被封装在了两个package内。邮件操作部分我使用了Java Mail API,这样可以使代码更标准,便于进一步开发。

4.1 服务器平台的实现

4.1.1 Web服务器的安装配置

Web服务器的安装配置很简单,安装时跟着安装程序向导一步一步作就可以。配置主要是环境变量的设置。设置JAVA_HOME变量为JSDK的安装目录。设置CATALINA_HOME变量为Tomcat的安装目录,将tools.jar,dt.jar,mail.jar,activation.jar和servlet.jar这几个包的完整路径添加到CLASSPATH变量中。将JSDK和Tomcat下的bin目录添加到Path变量中。

图(3) 设置JAVA_HOME环境变量

13

建立基于Web技术的邮件服务平台 李治坤

图(4) 设置CATALINA_HOME环境变量

图(5) 设置CLASSPATH环境变量

图(6) 设置Path环境变量

4.1.2 DNS服务器的安装配置

在安装Linux系统的时候选择安装DNS server就可以安装Linux自带的DNS服务器。Linux系统安装完毕后只需要对DNS服务器进行配置。 DNS的配置:

(1) 更改/etc/named.conf文件内容如下:

zone \"mailtest.com\" {

type master;

file \"mailtest.coms\"; };

14

大连民族学院计算机科学与工程系2004届毕业论文

zone \"0.168.192.in-addr.arpa\" IN {

type master;

file \"0.168.192.in-addr.arpa.zone\"; };

(2) 在/var/named

目录下添加文件

mailtest.com.zone

0.168.192.in-addr.arpa.zone。 文件mailtest.com.zone内容: $TTL 800 @ IN SOA

mail.mailtest.com. root.localhost ( 2 ; serial 28800 ; refresh 7200 ; retry 604800 ; expire 800 ; ttl )

IN NS mail.mailtest.com. IN MX 10 mail.mailtest.com

IN A 192.168.0.22 IN A 192.168.0.33

www mail

@ IN A 192.168.0.33

文件0.168.192.in-addr.arpa.zone内容: $TTL 800 @ IN SOA

mail.mailtest.com. root.localhost (

5 ; serial 28800 ; refresh 7200 ; retry 604800 ; expire 800 ; ttk

15

建立基于Web技术的邮件服务平台 李治坤

)

IN NS mail.mailtest.com. IN MX 10 mail.mailtest.com

www.mailtest.com. mail.mailtest.com.

22 IN PTR 33 IN PTR

(3) 打开bind的守护进程 #cd /etc/rc.d/init.d

#chkconfig –level 3 named on 这样就配置好了DNS服务器。

4.1.3 邮件服务器的安装配置

邮件服务器也是适用Linux自带的安装包,所以Linux系统安装好以后只需要对邮件服务器进行配置。 邮件服务器配置:

(1) 修改/etc/mail/sendmail.cf配置文件 找到

# SMTP daemon options

O DaemonPortOptions=Port=smtp,Addr=127.0.0.1,Name=MTA 更改为

O DaemonPortOptions=Port=smtp,Addr=192.168.100.134, Name=MTA 这是更改sendmail的监听端口为网络端口而不是本地端口。 (2) 修改/etc/mail/local-host-names文件 文件中设定.就把域名输入进去就可以了:

# local-host-names - include all aliases for your machine here. mailtest.com

(3) 修改/etc/mail/access文件 改完后的access文件应该是这样的:

# Check the /usr/share/doc/sendmail-8.11.2/README.cf file for a description

# of the format of this file. (search for access_db in that file) # The /usr/share/doc/sendmail-8.11.2/README.cf is part of the

16

大连民族学院计算机科学与工程系2004届毕业论文

sendmail-doc # package. #

# by default we allow relaying from localhost... localhost.localdomain RELAY localhost RELAY 127.0.0.1 RELAY maillist.com RELAY 然后运行 #make access.db

这个make access.db命令把新的设定添加到sendmail的hash数据库里.sendmail用它来判断允许那些主机通过你的e-mail服务器来传递邮件。 (1) 修改/etc/xinetd.d/ipop3文件 修改完后的文件如下: # default: off

# description: The POP3 service allows remote users to access their mail # using an POP3 client such as Netscape Communicator, mutt, # or fetchmail. service pop3{

socket_type = stream wait = no user = root

server = /usr/sbin/ipop3d log_on_success += USERID log_on_failure += USERID disable = no }

(2) 重新启动sendmail和xinetd守护进程 #servcie sendmail restart #service xinetd restart

17

建立基于Web技术的邮件服务平台 李治坤

这样就配置好了sendmail服务器。

4.2 数据库的实现

4.2.1 数据库建立的目的

建立数据库是为了给系统用户注册、用户登录时的身份认证和用户信息的保存提供数据库支持。

4.2.2 数据库的设计

邮件系统的数据库使用的是SQL server 2000。建立的邮件系统数据库名为WebMail。我设计了两个表来保存用户的数据。第一个表是member表,这张表用来保存用户的注册信息。 建表代码如下:

CREATE TABLE [dbo].[member] (

[ID] [int] IDENTITY (1, 1) NOT NULL ,

[logname] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL , [realname] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [password] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT [email] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [gender] [int] NULL ,

[phone] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [problem] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [answer] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [province] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [education] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [hobbies] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [selfintro] [ntext] COLLATE Chinese_PRC_CI_AS NULL

NULL ,

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 设置约束代码如下:

ALTER TABLE [dbo].[member] WITH NOCHECK ADD

18

大连民族学院计算机科学与工程系2004届毕业论文

CONSTRAINT [PK_member] PRIMARY KEY CLUSTERED (

[logname] ) ON [PRIMARY]

ID:用户在数据库中的编号,不能为空。

Logname:用户登录时所使用的名字,这是该表的主键。 Realname:用户的真名。 Password:用户密码,不能为空。

Email:用户注册时填写的邮箱,与用户密码的找回有关。 Gender:用户的性别。 Phone:用户的电话号码。 Problem:用户的密码提示问题。 Answer:用户密码提示问题的答案。 Province:用户所在的地区。 Education:用户的受教育程度。 Hobbies:用户的爱好。 Selfintro:用户的自我介绍。

图(7) WebMail数据库中的member表

第二张表是addrlist表,用来保存用户的地址簿信息。

19

建立基于Web技术的邮件服务平台 李治坤

建表代码如下

CREATE TABLE [dbo].[addrlist] (

[ID] [int] IDENTITY (1, 1) NOT NULL ,

[userID] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL , [address] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [addruser] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [class] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL

) ON [PRIMARY] 设置约束代码如下:

ALTER TABLE [dbo].[addrlist] WITH NOCHECK ADD

CONSTRAINT [PK_addrlist] PRIMARY KEY CLUSTERED (

[ID]

) ON [PRIMARY]

ID:编号标识,不能为空。

userID:储存该地址的用户,不能为空。 address:用户储存的地址。

addruser:储存的地址所对应的联系人。 class:地址的分类。

图(8) WebMail数据库中的addrlist表

member表的数据在用户注册和用户登录进行身份认证的时候被使用,addrlist表的数据在用户选择收件人的操作时被使用,在该邮件系统中没有能将两张表联系起来的操作,所以两张表相对对立。

20

大连民族学院计算机科学与工程系2004届毕业论文

4.3 用户界面的设计

4.3.1 用户登录界面

用户的登录界面的代码主要在login.jsp和login.java中。login.jsp生成用户登录信息的表单。表单的内容包括用户名logname和用户密码logpass,为的是给login,java提供用户的登录信息。login.java是一个servlet,它利用javax.servlet.http类库提供的HttpServlet接口建立与Web服务器的连接。通过定义HttpServletRequest request对象获取login.jsp所提供的logname和logpass。然后对logname和logpass进行分析,如为空则给出提示要用户输入用户名和密码。如果和系统数据库中的用户名和密码相吻合,则调用main.jsp页面进入邮件系统。在login.java中通过抛出ServletException类来处理与数据库的连接。

在用户界面上还建立了与用户密码找回界面和用户信息注册界面的链接。用户密码找回界面和用户注册界面分别是findpass.jsp和editpass.jsp。相应的servlet分别是findpwd.java和editpwd.java。这两个servlet所使用的方法和login.java中所使用的方法类似。主要是对数据库的操作和使用try-catch-finally方法来实现队里外的响应。

4.3.2 邮件列表界面

当用户顺利登录系统后会进入系统的欢迎界面,用户点击框架右边的收件箱就可以进入邮件列表界面。

邮件列表界面是mail_list.jsp,它所调用的servlet是maillist.java。maillist.java要连接邮件的存储,然后打开名为INBOX的文件夹。Maillist会创建一个同邮件服务器的会话pop3Session,使用这个会话建立与邮件服务器的store连接,连接的类型为pop3由pop3Session.getStore(“pop3”)方法定义。通过调用Java Mail API中提供的Floder类,使用getFolder()方法定义一个Folder变量folder,使用folder.open(Folder.READ_ONLY)设置目录的打开方式为只读,用folder.getMessageCount()方法可以获得邮箱中的邮件数量,建立一个数组message[]来定位邮件。用folder.getMessages()可以获得邮箱中邮件的数量,然后通过一个循环,使用getFrom()方法和

21

建立基于Web技术的邮件服务平台 李治坤

getSentData方法以及getSubject()方法,分别获取每封邮件的部分信息(包括发件人,发送时间,主题),再通过maillist.jsp格式化输出。

4.3.3 邮件编辑界面

邮件的编辑界面是compose.jsp基调用的servlet是send.java。send.java是邮件的发送程序,改程序定义了6个主要变量:string变量toID用来记录收信人地址,string变量fromID用来设定发信人地址,string变量ccID和bccID用来记录第2、第3收信人地址,string变量subject用来记录邮件的主题,string变量text用来记录邮件的主要内容。在定义变量的时候需要将subject和messageText用getByte(“ISO8859_1”)方法将字符转化为邮件服务器能够识别的字符。使用getSession()方法建立与邮件服务器的会话,用MimeMessage()创建该会话下将要发送的邮件的表单。然后分别用setFrom(fromID)

setRecipients(Message.RecipientType.TO,iAddr)

setSubject(subject)、setText(text)将相对应的内容添加到表单中,再使用Transport.send把邮件发送出去。

4.3.4 邮件读取界面

在邮件列表界面上选择查看就可以读取相应的邮件,这需要调用一个名为read.java的servlet。该程序所使用的方法和send.java类似。不一样的地方在于该程序是从邮件服务器上读取邮件的信息,并将信息格式化后输出,而send.java是获取用户输入到compose.jsp表单中的信息。在读取程序中我也使用到getMessages()方法,这样可以确定所要读取的邮件时那一封,同时也可以防止用户选择了不存在的邮件。

4.3.5 对附件的处理

发送邮件中的附件就像发送邮件一样,先建立构成完整邮件的部分,在邮件正文之后,每添加一附件就需要对其处理,而不像发送邮件是统一处理。附件是文件时,数据资源是FileDataSource。附件是链接是数据资源是URLDataSource。获得数据资源后,在调用setDataHandler()函数粘贴到BodyPart之前,必须传递到DataHandler构造其中。最后用BodyPart对象的setFileName()方法把文件名和附件联系起来。

当一个邮件包含有附件时,邮件的内容是Multipart,而不是Part对象。Multipart实力对象可以通过message.getContent取得。通过

22

大连民族学院计算机科学与工程系2004届毕业论文

part.getDisposition()方法取得Multipart的每一部分,通过

part.getContentType()来去的附件的意向和内容类型并据此加以处理。

4.3.6 用户地址簿的处理

处理用户地址簿的程序是名为addrlist的servlet程序,用户在登录系统以后可以看到地址簿的选项,点击以后就会调用该程序。这个程序主要是对WebMail数据库addrlist表的操作。通过定义一个字符串变量sql,将SQL语句赋值道这个变量中,再定义一个ResultSet变量RS,将executeQuery(sql)方法返回得值赋值到RS变量中。通过这种方法可以直接使用SQL语句进行数据库的操作,将返回的值格式化以后就可以直接使用。在编辑邮件的时候,也可以通过点“选择收件人”调用地址簿界面,用户在选择好地址以后会返回编辑界面。用户所选择的地址将会通过一个Session返回到编辑界面地址的输入栏。

23

建立基于Web技术的邮件服务平台 李治坤

第五章 结论和体会

经过三个多月的设计和开发,基于Web技术的邮件服务平台基本开发完毕,其功能基本符合用户的需求,能够完成新用户的注册,用户密码的找回,用户登录的身份认证,邮件列表的显示,新邮件的编辑,邮件的发送和邮件内容的显示等功能。

本系统开发使用了当今JSP Web应用开发最流行的Servlet技术,将网页代码和Java代码分开处理,系统还使用了符合J2EE标准的Java Mail API这使得整个系统有良好的可扩展性和可维护性,为产品日后的维护和再次开发提供了很有利的条件。在服务器的选择上基本符合中小型企业邮件平台的解决方案。其稳定性,运行速度,还是所能承受的负载都能够满足中小型企业需求。

毕业设计是大学教育的最后一个重要环节,使学生在校期间一次较为系统的工程训练。正因为如此我在选题上尽可能的让所做的题目涵盖大学四年所学的所有知识点,包括成软件工程,程序设计,网络应用,操作系统等等。它锻炼了我综合运用所学基础理论,基本知识的能力,培养了我分析解决实际问题、工作以及查阅资料翻译英文资料的能力,是对我个人中和素质一次提高和检验。

计算机系00-1李治坤

2003年6月

24

大连民族学院计算机科学与工程系2004届毕业论文

致谢

毕业设计虽然只有短短的三个月,但是它具有独特的挑战性,要在这三个月中开发一个邮件服务平台,对于一个从未从事过这项工作的大学商来说并不是一件容易的事。

正是有了指导老师杨明老师和我的同学和朋友,我才能顺利地完成毕业设计。在此我要感谢杨老师的悉心关怀和耐心的指导,向杨老师致以诚挚的协议和美好的祝愿!同时我还有感谢我的同学和朋友在诸多方面给我的帮助和支持。

计算机系00-1李治坤

2003年6月

25

建立基于Web技术的邮件服务平台 李治坤

参考文献

[1]武延军 黄飞跃. 精通JSP编程技术[M]. 北京:人民邮电出版社,2001.8 [2]柏亚军. JSP编程基础及应用实例集锦[M].北京:人民邮电出版社,2001.7 [3]Karl Moss. Java Servlet开发人员指南[M].北京:清华大学出版社,2002 [4]清宏计算机工作室.JSP编程技巧[M].北京:机械工业出版社,2000.1 [5]肖薇 裴植.Linux实用组网技术[M].北京:清华大学出版社,2001 [6]SmarTraining工作室 王娟.Red Hat Linux 9系统管理[M].北京:机械工业出版社,2004

[7]黄理 洪亮 曹林有 张勇.JSP高级编程[M].北京:北京希望出版社,

26

大连民族学院计算机科学与工程系2004届毕业论文

附录A 程序源代码

详见附带光盘

附录B 外文参考资料及译文

Generate dynamic XML using JavaServer Pages

technology

Use embedded Java code to dynamically build your XML template at request time

JavaServer Pages (JSP) technology is typically used for building HTML pages with dynamic content. But you can use this technology to generate dynamic content in other formats as well, including XML. Using real examples, this article will show how to build a JSP page as an XML document template that is \"filled in\" at request time using Java code embedded in the page.

Web application developers traditionally have used JSP technology to build HTML dynamically by including Java code in the HTML source. But did you know that you can use this same approach to generate dynamic content besides HTML? You can, and it's relatively simple. You can build a JSP page using an XML document that will serve as the template for the output, then replace the portions that must be generated dynamically based on the underlying business logic. You use Java code, either written directly within the JSP page or called externally from the page, to generate the dynamic portions of the document. You are in control of how much of that document is generated. For example, you can use Java code to generate data between XML tags, to generate portions of the XML document tree (both tags and data), or even to generate the entire document.

The Java code is removed from the page, processed into a servlet (known as the page servlet) and run by the Java application server as part of the request for the JSP page. The result is pure XML.

A JSP technology overview

Let's begin by talking a little about how JSP pages work. We're going to keep it

I

建立基于Web技术的邮件服务平台 李治坤

simple and focus on some of the basics. For more information, see Resources for links to additional JSP technology information.

In the traditional sense, JSP pages look very much like HTML pages, with a few extra tags. These tags allow the designer to embed Java code (not JavaScript) in the page itself. A Web application server, like the IBM WebSphere Application Server, will intercept requests for JSP pages. It's tipped off to their existence by the page's extension: .jsp (not .html). The Web application server then preprocesses the JSP page, taking out the JSP tags and any embedded Java code, leaving only the HTML. The extracted JSP tags and embedded Java code are used to build a Java servlet (JSP page servlet) that runs the code and inserts the results back into the original page where the JSP tags used to be. The result is pure HTML. The Java is stripped out and run on the server before the requesting browser sees any result.

We can apply the same principle to an XML page. Before the requester of the JSP page containing XML ever sees the XML (be it a browser or some other B2B application), the Java code is stripped out of the JSP page and used to generate additional content, which is inserted back into the page at the points where the JSP tags used to reside. This feature gives you the ability to control exactly where new content is to be inserted, down to the character.

We'll look at how to make this work in a minute. First, let's consider why you might want to create dynamic XML using JSP. Why not simply write a Java application or servlet to generate the entire document? Why bother with JSP at all? The most important reason, providing only portions of an XML document are dynamic, is that it makes sense not to regenerate that static content for every request. Using a JSP page, the static XML within the page acts as a template that is filled out by the dynamic content. Your Java code is tasked with generating only the content that might change over time -- a more efficient approach.

As a practical matter, JSP pages allow you to separate tasks for which different developers will be responsible. In particular, they allow you to better separate the data from the view, allowing you to add new presentations without affecting the logic. Imagine having one Java servlet that performs the business logic and redirects the resulting data to an appropriate JSP page based on the nature of the request. For example, a servlet might redirect data to a JSP page containing WML when it detects a WAP phone browser making the request. It could also redirect the data to a JSP page containing HTML for standard browser requests.

II

大连民族学院计算机科学与工程系2004届毕业论文

The mechanics

Let's walk through an example in which a static XML document is converted to a JSP page, and portions of its content are rewritten to be dynamically generated. The example is based on an XML sample shipped as part of the IBM WebSphere Transcoding Publisher called FlightInfo. This XML document represents information about a specific airline flight itinerary. Transcoding Publisher provides it as a sample to show how the product can be used to render the XML data in device-appropriate formats. But before Transcoding Publisher, or any other application, has a chance to manipulate the document, we want to build some of its content dynamically.

Here's the original XML document (the DTD has been omitted): …… Rename the file using a .jsp extension

First, we need to rename the file with a .jsp extension so that the Web server will know what to do with the file. Web servers have rules for acting on certain URL patterns or file extensions, such as .html or .gif. When a Web application server is added to a Web server, the application server adds rules to the Web server's list for handling URLs and file extensions specific to the application server. When a Web server sees a file with a .jsp extension, it will pass that request on to the Web application server for processing.

Add the page directive

Next, we need to indicate to the JSP page compiler what the format of the generated content will be. By default, the page compiler will assume the content is HTML. To override this, a JSP page directive tag must be added to set the content type. For JSP 1.0, the content type page directive looks like this: …… It's important to note that the JSP page compiler will remove only the characters making up the tag and its contents. If you place a JSP tag on a new line, the page compiler will remove everything but the new line (because that is not part of the tag). For example, suppose we add the content type tag to our new JSP page like so: …… In this case, the page compiler will remove the page directive on the first line,

III

建立基于Web技术的邮件服务平台 李治坤

leaving a blank line before the version tag. In XML documents, the XML version tag must be on the first line, so this example would cause an error in an XML parser. To remedy this, add the page directive to the second line, or concatenate the XML version tag with the content tag. It really doesn't matter where in the document the page directive is placed because the page compiler will add the instruction to the beginning of the resulting page servlet's service() method regardless of its placement in the page. For readability, though, you may want to consider adding it as the second line, like this: …… Add the Java code

Now all that is left is to add the Java code to customize some of the content of the XML. We add the Java code to the file between scriptlet tags (<%...%>). The page compiler will interpret anything between these tags as pure Java code and will add it, unchanged, to the service() method of the resulting page servlet.

All code within the scriptlet tags is added to the service() method in the order that it appears within the JSP page. The scope of the code added is the entire page, and thus the entire service() method. So if you define a variable in one set of scriptlet tags at the beginning of the file, you can reference it later in the file using a completely different set of scriptlet tags. You can impose a scope by adding your own sets of curly braces ({...}) around variable definitions. These braces can even begin and end in different sets of scriptlet tags.

In the following example, I replace a few of the static dates in the original XML file with some Java code using the Calendar class. The code uses the current date and adds hours and minutes along the way to create the appropriate time entries for several of the XML tags. The Java code is boldfaced. Line numbers are added for reference later. …… Here's what's happening in this code segment: Line 2: The page directive is added to indicate that the response generated by the page servlet will contain XML.

Line 3: The Calendar variable cal is defined to contain the current date and time.

Line 12: Using the global out object, we can print directly into the current position of the page being sent as the response. We print the current time stamp back into the page. Note that when the response is generated, the JSP scriptlet

IV

大连民族学院计算机科学与工程系2004届毕业论文

tags will be replaced with the time stamp result.

Lines 15-17: We add 10 minutes to the current time and print the result to the page as the departure time.

Lines 26-28: We add 4 hours to the current time to derive the scheduled arrival time of the flight, which is then printed to the page using the out object. Afterwards, we add another 2 minutes to create the actual arrival time.

Line 31: The equals sign with the scriptlet tags (<%=...%>) will cause the result of anything contained within the tags to be printed to the page. The line in the example is equivalent to the following line using the standard scriptlet tag: …… Note that the cal object is global to the entire page, even though it is used in a different set of scriptlet tags from where it is defined. As I mentioned before, unless you add braces ({...}) to enforce scope, variable declarations are global to the entire page from the point of declaration.

Also, the Java code in this example is used primarily to generate data between XML tags. We could also use Java code to generate entire trees of tags in an XML document. The code must simply print out the tags in addition to the data. This is what lines 15-17 do.

Adding JavaBeans components

The JSP syntax supports adding JavaBeans components to the page and accessing them like any other Java object. The special tag is used to declare and instantiate the bean. The page compiler will use the attributes of the tag to build the Java code in the page servlet, which is necessary to instantiate the bean and populate it with data from the request.

Because JavaBeans components are generically meant to perform a task, it's easy to see how they can be used to perform or interface with complex business logic, moving the complex Java code out of the JSP page. One example is an Integration Object JavaBean component. This bean was built using IBM WebSphere Host Publisher, which encapsulates interactions with legacy data sources, such as 3270 applications or databases, and simply returns their data. Imagine using an Integration Object that interfaces with a host-based airline scheduling application to provide the arrival and departure information in our example. As a user of the Integration Object, you simply request the itinerary data from it, unaware of the complex communication and interactions

V

建立基于Web技术的邮件服务平台 李治坤

with the host application that occur in the background. Here's our example rewritten to use such a bean. …… Let's take a closer look at what's going on in this sample. Line 3 contains the tag that defines and instantiates the bean IntegrationObject.FlightInfo as flightInfo. The next line contains a scriptlet that calls the doHPTransaction() method of flightInfo, causing it to connect to the host flight information application and retrieve pertinent flight information. Lines 13, 16, 25, and 28 simply insert the results back into the XML document. You can use other types of beans in exactly the same manner, perhaps calling some other invocation method besides doHPTransaction() to do the work. You can even add multiple beans to the same document, creating a composite XML view of data from multiple sources.

Conclusion

JavaServer Pages technology has been an open standard for several years and has been widely used for generating dynamic HTML documents. Few have realized that the same flexibility of embedding actual Java code within an HTML document can be applied to generating XML. Consider the possibilities. You could streamline B2B communications by dynamically building only the data that changes. You might build various representations of data from one data source, not just HTML and XML, but WML and HDML for wireless protocols, or simply use products like WebSphere Transcoding Publisher to convert your dynamic XML to device-appropriate representations.

XML clearly has been embraced as the common format for data interchange. Using JavaServer Pages technology provides a powerful tool for sending your data over the Web in XML quickly and easily.

Marshall Lamb

Chief Programmer, WebSphere Transcoding Publisher, IBM December 2000

VI

大连民族学院计算机科学与工程系2004届毕业论文

使用 JavaServer Pages 技术生成动态 XML

在请求时使用内嵌的 Java 代码动态构建您的 XML 模板

JavaServer Pages (JSP) 技术通常用于构建包含动态内容的 HTML 页面。但是您也可以使用这一技术生成其他格式(包括 XML)的动态内容。本文将用实例说明如何将 JSP 页面构建为 XML 文档模板,此模板是在请求时使用嵌在该页面中的 Java 代码“填充”的。

Web 应用程序开发人员传统上使用 JSP 技术动态构建 HTML,方法是将 Java 代码包括在 HTML 源代码中。但您知道可以使用同样的方法生成 HTML 之外的动态内容吗?您可以实现这一点,而且方法比较简单。可以使用 XML 文档构建 JSP 页面,该 XML 文档将用作输出模板,然后替换必须基于基层业务逻辑动态生成的部分。为了生成文档的动态部分,您既可以使用直接编写在 JSP 页面中的 Java 代码,也可以使用从该页面外部调用的 Java 代码。

生成文档的哪些部分由您控制。例如,您可以使用 Java 代码生成两个 XML 标记之间的数据,生成 XML 文档树的各个部分(标记和数据),甚至可以生成整个文档。

Java 代码被从页面中除去,并被加工成一个 servlet(称为页面 servlet),然后 Java 应用程序服务器将其作为 JSP 页面请求的一部分运行。得到的结果是纯 XML。

JSP 技术概述

让我们先对 JSP 页面的工作方式作一些简单的讨论。我们将力求简单,只将注意力集中于一些基本的方面。有关详细信息,请参阅参考资料中到其他 JSP 技术信息的链接。

从传统意义上讲,JSP 页面与 HTML 页面很相似,只是多了一些标记。这些标记使设计人员能够将 Java 代码(不是 JavaScript)嵌入到页面中。Web 应用程序服务器(如 IBM WebSphere Application Server)将截取对 JSP 页面的请求。页面的扩展名 .jsp(不是 .html)向应用程序服务器暗示了这些标记的存在。Web 应用程序服务器随后对 JSP 页面进行预处理,提取其中的 JSP 标记和任何内嵌的 Java 代码,而只保留 HTML。提取出来的 JSP 标记和内嵌 Java 代码用来构建 Java servlet(JSP 页面

V

建立基于Web技术的邮件服务平台 李治坤

servlet),Java servlet 运行该代码并将结果插入到原页面中 JSP 标记所在的位置。得到的结果是纯 HTML。在请求浏览器看到任何结果之前,Java 代码被剥离并在服务器上运行。

我们可以将同样的原理应用于 XML 页面。在包含 XML 的 JSP 页面的请求者(可能是一个浏览器,也可能是某个企业对企业的应用程序)看到 XML 之前,Java 代码被剥离 JSP 页面并用来生成其他内容,生成的内容被插入到 JSP 标记原来所在的页面位置。这种特性使您能够精确地控制将新内容插入到什么位置,甚至可以精确到单个字符。

过一会儿我们将考虑如何使用以上的特性。首先,让我们考虑为什么您可能会想到用 JSP 创建动态 XML。为什么不只是编写 Java 应用程序或 servlet 来生成整个文档?为什么要费心去使用 JSP 呢?最重要的原因是无须为每个请求重新生成静态内容是有意义的(假定 XML 文档只有部分内容是动态的)。通过使用 JSP 页面,页面内的静态 XML 就可以充当一个模板,该模板是用动态内容填充的。Java 代码的任务仅仅是生成可能随时间变化的内容 -- 这是一种更有效的方法。

非常现实的一个问题是,JSP 页面使您能够将不同开发人员负责的任务分开。特别是,它们允许您更好地将数据与视图分离开,从而允许您在不影响逻辑的情况下添加新表示。设想这样一个 Java servlet,它执行业务逻辑,并根据请求的性质将生成的结果重定向到适当的 JSP 页面。例如,当 servlet 检测到 WAP 电话浏览器发出请求时,它就可以将数据重定向到一个包含 WML 的 JSP 页面。对于标准浏览器请求,它可以将数据重定向到包括 HTML 的 JSP 页面。

结构

让我们剖析一个示例,该示例将一个静态 XML 文档转换为一个 JSP 页面,该文档的部分内容被重写为要动态生成。本例基于 IBM WebSphere Transcoding Publisher 附带的一个称为 FlightInfo 的 XML 样例。此 XML 文档表示一个特定航线的信息。Transcoding Publisher 将它作为一个说明如何使用该产品以适合设备的格式再现 XML 数据的样例。但是在 Transcoding Publisher 或其他任何应用程序有机会处理该文档之前,我们希望动态构建它的某些内容。

下面是原始的 XML 文档(已将 DTD 省略): …… 使用 .jsp 扩展名重命名该文件

首先,我们需要使用 .jsp 扩展名重命名该文件,以便 Web 服务器知

VI

大连民族学院计算机科学与工程系2004届毕业论文

道如何处理它。Web 服务器按一定的规则作用于某些 URL 模式或文件扩展名,如 .html 或 .gif。当将一个 Web 应用程序服务器添加到一个 Web 服务器中时,该应用程序服务器就会在 Web 服务器列表中添加规则,以便处理特定于该应用程序服务器的 URL 和文件扩展名。当 Web 服务器看到一个带有 .jsp 扩展名的文件时,它就会将此请求传递给 Web 应用程序服务器进行处理。

添加页面指令

下一步,我们需要把将要生成的内容的格式通知 JSP 页面编译器。缺省情况下,页面编译器将假定内容的格式是 HTML。要覆盖这一设置,必须添加 JSP 页面指令来设置内容类型。对于 JSP 1.0,内容类型页面指令类似以下的形式: …… 重要的是要注意 JSP 页面编译器只会除去组成标记及其内容的字符。如果将 JSP 标记放在一个新行上,页面编译器将除去除换行符之外的任何字符(因为换行符不是标记的一部分)。例如,假定我们按以下方式将内容类型标记添加到新 JSP 页面中: …… 在这种情况下,页面编译器将除去第一行中的页面指令,并在 版本标记之前留下一个空行。在 XML 文档中,XML 版本标记必须位于第一行,所以这个示例将在 XML 分析程序中导致错误。要修正这个错误,请将此页面指令添加到第二行,或者将内容标记连接在 XML 版本标记之后。实际上将页面指令放在文档中的什么位置并不重要,因为页面编译器会将此指令添加到所生成的页面 servlet 的 service() 方法的开头,而不管它在页面中处在什么位置。尽管这样,为了具有较好的可读性,您可能希望将它添加为第二行,如下所示: …… 添加 Java 代码

现在剩下要做的事情就是添加 Java 代码来定制 XML 的某些内容。我们将 Java 代码添加到文件中的 scriptlet 标记 (<%...%>) 之间。页面编译器将把这两个标记之间的任何内容解释为纯 Java 代码,并不加修改地将它添加到所生成的页面 servlet 的 service() 方法中。

scriptlet 标记内的所有代码都被按它们在 JSP 页面出现的次序添加到 service() 方法中。添加的代码的作用域是整个页面,从而是整个 service() 方法。因此,如果您在文件开头的一对 scriptlet 标记之间定义一个变量,

VII

建立基于Web技术的邮件服务平台 李治坤

则以后您可以在文件中使用一对完全不同的 scriptlet 标记引用这个变量。可以通过在变量定义两侧添加您自己的一对花括号 ({...}) 来强加一个作用域。这两个花括号甚至可以在一对 scriptlet 标记之间开始,而在另一对 scriptlet 标记之间结束。

在下面的示例中,我用一些使用 Calendar 类的 Java 代码来替换原始 XML 文件中的几个静态日期。这段代码在为几个 XML 标记创建适当时间条目的同时,使用当前日期,并添加时和分。Java 代码用粗体表示。添加行号是为了便于以后引用。 …… 下面是在这个代码段中所进行的操作: 第 2 行:添加页面指令来指明这个页面 servlet 生成的响应将包含 XML。

第 3 行:定义类型为 Calendar 的变量 cal 来包含当前日期和时间。 第 12 行:使用全局 out 对象,我们可以直接显示到正在作为响应发送的页面的当前位置。我们将当前的时间戳显示到页面上。请注意,当生成响应时,JSP scriptlet 标记将被时间戳结果取代。 第 15-17 行:在当前时间上加上 10 分钟,并将这个结果显示到页面上作为出发时间。

第 26-28 行:在当前时间上加上 4 个小时以得出航班的预定到达时间,然后使用 out 对象将这个结果显示到页面上。然后再加上 2 分钟来创建实际到达时间。

第 31 行:带有 scriptlet 标记的等号 (<%=...%>) 将导致将标记内所包含的任何结果显示到页面上。示例中的这一行等价于使用标准 scriptlet 标记的以下一行: …… 请注意,cal 对象对整个页面都是全局的,尽管使用它的一对 scriptlet 标记并不是定义它的同一对 scriptlet 标记。如前所述,除非添加花括号 ({...}) 来强制使用作用域,否则变量声明从声明之处对于整个页面都是全局的。

同样,本例中的 Java 代码主要用来生成 XML 标记之间的数据。我们还可以使用 Java 代码生成一个 XML 文档中的整个标记树。代码除了显示数据之外,还必须简单地显示出标记。这正是第 15-17 行所完成的任务。

添加 JavaBeans 组件

JSP 语法支持将 JavaBeans 组件添加到页面中,并像访问任何其他 Java 对象一样访问它们。专用的 标记用来声明和实例化 bean。页面编译器将使用 标记的属性来构建页面 servlet

VIII

大连民族学院计算机科学与工程系2004届毕业论文

中的 Java 代码,这对于实例化 bean 以及将请求中的数据置入 bean 是必需的。

因为 JavaBeans 组件通常必须执行一项任务,所以很容易看出如何使用它们来执行或干预复杂的业务逻辑,同时也从 JSP 页面中移去复杂的 Java 代码。一个示例是 Integration Object JavaBean 组件。这个 bean 是使用 IBM WebSphere Host Publisher 构建的,它封装了与旧有数据源(如 3270 应用程序或数据库)的交互,并只是返回它们的数据。设想使用一个 Integration Object,为了在我们示例中提供到达和出发信息,它与基于主机的航空调度应用程序对接。作为 Integration Object 的一个用户,您只须请求它的航线数据,而不会察觉到在后台发生的与主机应用程序之间的复杂通信和交互。

下面是为了使用这样一个 bean 而重新编写的示例。 …… 让我们进一步分析一下本例中进行的操作。 第 3 行包含 标记,它将 bean IntegrationObject.FlightInfo 定义并实例化为 flightInfo。下一行包含一个 scriptlet,它调用 flightInfo 的 doHPTransaction() 方法,使它连接到主机航班信息应用程序并检索相关的航班信息。第 13、16、25 和 28 行只是将结果插入到 XML 文档中。 您可以按完全相同的方式使用其他类型的 bean,也许以调用 doHPTransaction() 之外的某个其他调用方法完成这一操作。您甚至可以在同一个文档中添加多个 bean,并为来自多个数据源的数据创建一个复合的 XML 视图。

小结

JavaServer Pages 技术成为一个开放标准已经几年了,并已广泛用于生成动态 HTML 文档。少数人已经认识到将实际的 Java 代码嵌在 HTML 文档中所具有的同等灵活性也适用于生成 XML。请考虑这种可能性。通过只动态构建那些变化的数据,您就能够改进企业对企业的通信。您可以构建来自一个数据源的数据的各种表示,不仅仅是 HTML 和 XML,还有用于无线协议的 WML 和 HDML,或者简单使用类似 WebSphere Transcoding Publisher 这样的产品将动态 XML 转换为适合设备的表示。

XML 无疑已成为数据交换的通用格式。使用 JavaServer Pages 技术为以 XML 格式在 Web 上快速而容易地发送数据提供了强有力的工具。

Marshall Lamb

IBM WebSphere Transcoding Publisher 首席程序员 2000 年 12 月

IX

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务