当前位置:文档之家› 基于JAVA的邮件客户端的设计和实现毕业设计

基于JAVA的邮件客户端的设计和实现毕业设计

基于JAVA的邮件客户端的设计和实现毕业设计
基于JAVA的邮件客户端的设计和实现毕业设计

基于JAVA的邮件客户端的设计和实现毕业设计

目录

第1章绪论 (1)

1.1 问题的提出 (1)

1.2 本设计的目的、意义、范围、应达到的技术要求 (1)

1.3 本文研究的主要内容、目标与方法 (1)

1.4 各部分主要内容 (2)

1.4.1 Java概述 (2)

1.4.2 JavaMail API详解 (2)

1.4.3 邮件客户端的设计和实现 (2)

第2章Java概述 (3)

2.1 Java语言的出现 (3)

2.2 Java语言的发展 (3)

2.3 Java标准技术要点 (6)

2.3.1 Java的特点 (6)

2.3.2 Java的应用 (7)

第3章JavaMail API技术研究 (10)

3.1 JavaMail API简介 (10)

3.2相关协议一览 (10)

3.3初次认识JavaMail API (11)

3.4 使用JavaMail API (14)

3.4.1 发送邮件 (14)

3.4.2 接收邮件 (15)

3.4.3删除邮件和标志 (16)

3.4.4 邮件认证 (17)

3.4.5 回复邮件 (17)

3.4.6 转发邮件 (18)

3.4.7 使用附件 (18)

3.4.8 处理HTML邮件 (21)

3.4.9 在邮件中搜索短语 (22)

第4章邮件客户端的设计和实现 (23)

4.1 需求分析 (23)

4.2 概要设计 (23)

4.2.1 邮件客户端基本功能 (23)

4.2.2 电子邮件传输过程 (24)

4.2.3 邮件客户端设计概要 (24)

4.3 详细设计 (25)

4.3.1 JDK的安装 (25)

4.3.2 环境变量配置 (28)

4.3.3 JBuilder的安装配置 (30)

5.3.4 详细设计说明 (34)

4.4 安装程序的设计和制作 (53)

4.4.1 应用程序的设计和制作 (53)

4.4.2 安装应用程序 (56)

结论 (61)

致谢 (62)

参考文献 (63)

附录 (64)

第1章绪论

1.1 问题的提出

电子邮件(e-mail)是因特网上使用得最多的和最受用户欢迎的一种应用,将邮件发送到ISP的邮件服务器,并放在其中的收信人邮箱(mail box)中,收信人可随时上网到ISP的邮件服务器进行读取。电子邮件不仅使用方便,而且还具有传递迅速和费用低廉的优点,不仅可传递文字信息,而且还可附上声音和图像。所以开发一个安装于PC上的邮件客户端不仅使收、发邮件方便、快捷,也可完善后作为产品投入市场。而之所以基于Java,是因为Java 是当今企业级计算和应用中相当成熟和稳定的平台,在这个领域中不可否认地占据着领导地位。它的跨平台性和面向对象的设计,使程序移植方便可行,也使开发过程简单而直观。

1.2 本设计的目的、意义、范围、应达到的技术要求

本次毕业设计的目的在于学习Java程序设计基本技术,学习电子邮件收发的相关技术,熟悉JBuilder软件开发环境,熟悉基于C/S模式的程序设计技术,学习用Javamail来开发邮件收发系统,熟悉项目开发的完整过程。

通过本次毕业设计,应该学会怎样进行一个项目的需求分析、概要设计、详细设计等软件开发过程,熟练地掌握Java程序设计的基本技术和方法,熟练地掌握JBuilder环境的使用方法,培养初步的项目分析能力和程序设计能力,把理论与实践相结合,为今后工作打下坚实的基础。

应完成项目的需求分析、概要设计、详细设计等前期工作,在此基础上,采用基于Java的程序设计技术完成邮件客户端的主界面设计,包括收件箱、发件箱、草稿箱、垃圾箱以及邮件阅读功能,采用基于Javamail的程序设计技术完成邮件的发送和收取功能,最终实现邮件客户端的各项基本功能。1.3 本文研究的主要内容、目标与方法

本文主要讨论Java的应用,Java是Sun Microsystem公司推出的新一代面向对象和面向网络的程序设计语言,特别适合于Internet/Intranet上的应用软件开发,因此也把Java语言称为新一代网络程序设计语言。Java语言将面向对象、多线程、安全和网络等特征集于一身,为软件开发人员提供了很好的程序设计环境。Java是当今企业级计算和应用中相当成熟和稳定的平台,在这个领域中不可否认地占据着领导地位。

通过采用基于Java的程序设计技术完成邮件客户端的主界面设计,包括收件箱、发件箱、草稿箱、垃圾箱以及邮件阅读功能,采用基于Javamail 的程序设计技术完成邮件的发送和收取功能,提供给用户一个美观、易用的邮件客户端。

主要用到Java中的Javamail组件,实现邮件的接收与发送,也可对基本功能进行扩展,JavaMail API是读取、撰写、发送电子信息的可选包,可用它来建立如Eudora、Foxmail、MS Outlook Express一般的邮件用户代理程序(Mail User Agent,简称MUA)。在JBuilder开发环境下进行开发,JBuilder 是Borland公司推出的Java可视化集成开发工具,是目前最优秀的Java集成开发工具之一。利用JBuilder可以很方便的进行Web、数据库、XML、JavaBean 以及EJB的开发,同时JBuilder还内置了Bea公司的WebLogic服务器、IBM 的WebSphere服务器等,大大提高了JBuilder对企业级应用开发以及团体开发的支持。

1.4 各部分主要内容

1.4.1 Java概述

Java是Sun Microsystem公司推出的新一代面向对象和面向网络的程序设计语言,特别适合于Internet/Intranet上的应用软件开发,Java语言将面向对象、多线程、安全和网络等特征集于一身,为软件开发人员提供了很好的程序设计环境。这部分将叙述Java的出现、发展及特点等。

1.4.2 JavaMail API详解

JavaMail是Java中的一个组件,主要实现电子邮件的读取、撰写和发送等功能。这部分将主要介绍JavaMail API。

1.4.3 邮件客户端的设计和实现

这一部分将介绍基于Java的邮件客户端的设计和实现,包括详细的过程说明、部分源代码和安装程序设计与制作。

第2章Java概述

2.1 Java语言的出现

自从1946年世界上第一台电子计算机问世以来,计算模式的发展经历了三个阶段:集中计算模式、分散计算模式和网络计算模式。Internet的出现,为在网络计算模式下的科学计算和信息处理提供了良好平台。然而,要充分利用网络计算模式的功能与效益,平台的运行环境是个制约因素,而Java语言和Java技术则是解决这一问题的最佳途径。

1991年,SUN公司的JameGosling,BillJoe等人试图为电视、烤箱等家用电器开发一种交互式的软件系统,这种应用需要的是那种小而可靠的系统,它能够移植,并且实时性好,适用于网络分布环境。流行的C 是自然的选择。不过,开发过程中遇到的许多难以克服的困难使他们意识到必须彻底解决问题了,最终,开发成功了一个名为Oak的软件,此中蕴藏着Java的原型,当时,并未引起人们的注意。

1994年下半年,随着Internet的迅猛发展,环球信息网WWW的快速增长,促进了Java语言研制的进展,使得它逐渐成为Internet上倍受欢迎的开发与编程语言。

1995年5月Java正式问世,一些著名的计算机公司纷纷购买了Java语言的使用权,如Microsoft、IBM、Netscape、Novell、Apple、DEC、SGI等。因此,Java语言被美国著名杂志PCMagazine评为1995年十大优秀科技产品(计算机类仅此一项入选)之一,随之大量出现了用Java编写的软件产品,受到工业界的重视与好评,认为“Java是八十年代以来计算机界的一件大事”。微软总裁比尔·盖茨在认真观察了一段时间后,确认“Java是长时间以来最卓越的程序设计语言”,并确定微软整个软件的开发战略从PC单机时代向以网络为中心的计算时代转移,而购买Java则是他的重大战略决策的实施部署。

因此,Java的诞生必将对整个计算机产业发生深远的影响,对传统的计算模型提出了新的挑战。SunMicrosystem公司的总裁ScottMcNealy认为:Java 对Internet和WWW开辟了一个崭新的时代。有人预言:Java将成为网络上的“世界语”,今后,用其他语言编写的软件统统都要用Java语言来改写。

2.2 Java语言的发展

Java自正式问世以来到1999年经历了四年的历程,时间虽短,发展极快。一年一度在美国旧金山召开的世界JavaOne语言开发者大会(JavaOneDeveloperConference)盛况空前正说明了这一点。四年中每年的JavaOne大会,既是了解Java最新技术动态、应用成果和下一步发展趋势的最好场所,又是推动下一年Java快速发展的重要动力。

首届JavaOne大会于1996年召开,各届简况如下:

1996年5月29-31日,第一届,出席会议者6500余人,来自工业界的超过一半。有人评价说:“这是近年计算机界最光辉的一次盛会”。工业界相当

看好Java语言,认为它的使用将会引起一场软件革命:从软件的设计风格、设计方法、设计目标到设计过程,都会产生彻底的变革,“甚至会改变此星球的生活方式”。

1997年,第二届,出席会议者10000人。Java的追随者不断增加,应用开发迅速起步。

1998年3月24-27日,第三届,出席会议者14000余人(注册人数),注册门票售价1195美元,否则1395美元,即使如此,仍有不少人不惜工本,挤入会场。本次会议除了软件巨头微软未参加会议外,几乎所有的计算机公司都参加了。展厅内设300多个展台,先后举行了90场专题讨论会,每场参加的人数从千人至五六千人不等。会议的主题是:通过Java的培训来带动Java 软件的开发和技术研究,从而发展生产力,获取高额利润,提高生活质量,推动信息产业的进步。会议展出的内容大致如下:Java开发工具软件,如:JMF、JDK、SymantecVisualCafe、JavaDynamicManagementKit、JFC、JNDI、JavaStudio等;企业信息管理解决方案软件,如:EJB(EnterpriseJavaBeans);基于Java技术的信息家电,如:机顶盒、Java电话等;个人信息综合服务(Java 戒指)、社会信息综合查询亭(Kiosk);电子商务软件、智能卡、JavaCardAPI 等;网络计算环境下的Java服务器软件、远程方法调用(RMI)、基于Java 技术的移动计算设备;JMS(JavaMessageService)用于出版、票据订阅的软件;JOS(JavaOS)、基于Java技术的NC和JavaStation。

1999年6月15-18日,第四届,出席会议者达20000人,300多家厂商参展,举办400多场技术讲座,555名演讲者慷慨陈词,精彩纷呈。这次大会的主要特点是:

1)Java框架结构被梳理清晰。本次JavaOne大会上,Sun公司的一个重大举措就是公布了Java平台的最新架构。重新定义的Java平台以Java2为核心,由面向企业和服务器市场的企业版Java2(J2EE)、面向传统PC客户机市场的标准版Java2(J2SE)和面向信息电器等后PC终端设备市场的Micro版Java2(J2ME)三大部分组成。其中,J2EE包括EnterpriseJavaBeans(EJB)、JavaServerPages&JavaServlets、JavaMailAPI和JavaMassageService组成。而J2ME则是原有的PersonalJava、EmbeddedJava、JavaCard以及刚刚推出的Kjava组成。虽然新框架结构中的内容都是已有的,但这样重新定义和组合,使得Java平台的概念简单化,从而变得易于理解,更适合于进行市场推广。

2)重点放在企业平台随着Internet的飞速发展,企业计算模式正摒弃C/S 结构而采用Web-Browser结构,此即瘦客户端/胖服务器、大容量数据库的3层或N层体系结构。由于Java的特点,使得它在开发服务器端的应用程序方面有着得天独厚的优势,面向服务器端的J2EE为当今逐渐流行的N层体系结构提供了一个标准的Java计算平台:界面一致、工具简易、丰富、Web页面互联便捷,从而能大大加速和简化各种应用系统的开发。

3)加速后PC时代的进程计算机的发展创造了Internet,但是计算机现在却不是访问Internet的唯一方式。正在出现的信息化、智能化的消费类电子产品打破了PC作为信息终端的垄断地位,成为人类进入Internet的新门户。信息终端的多元化预示着所谓后PC(post-PC)时代的到来。消费类的信息终端量大面广,是典型的瘦客户机,其本身的资源和能力不能与PC相比,但必须更加智能化,并对服务器端的管理提出了更高的要求。而Java平台恰恰满足了这种要求。本次大会推出的Kjava虚拟机能运行在16以上的微处理器上,占用内存少,人们可以随心所欲,在资源有限的设备上方便地开发出各种各样的应用,直接运行在不同的消费类或其它电子设备上;而Jini的出现为Java 网络连接提供了公共标准,使得任何Java设备都可以连入网络中被自动识别,并可充分利用网络上已有的各种资源。大力推进Jini的发展是Sun公司加速后PC时代进程的一项重要策略。

4)应用系统异彩纷呈与上届大会一样,展出内容有:应用工具、应用系统、信息家电等。特别在实时系统开发方面,以IBM为首开发出了应用于工业实时环境的Java嵌入系统,展现出Java在工业领域的广阔应用前景。

Java语言的出现和发展,得到了IT业界的青睐,它像一面大旗,凝聚了世界众多的厂商与Sun公司一道,结成了对抗微软垄断的联盟。许多知名厂商纷纷购买Java许可证,目前已有90多万个软件开发商加入了Java阵营,1亿个Java最终用户,几千种Java应用软件产品,1500余种Java书籍(自Java 问世4年来,平均每天出版一本)。这真是IT业界的盛事!IBM公司提出“高举Java大旗,全力以赴”的口号,它在全世界的11个国家有28个实验室,集聚了2500余名技术人员,全天侯24小时进行全方位开发;芯片巨人Intel提出“抓住时机,占领Java阵地”!决心使Intel芯片系统成为开发Java应用运行的最佳平台;Novell则宣称“Java是Novell的未来,未来是服务器端Java 的市场”;作为Java发明者的Sun公司,坚持“保卫Java大旗,发展Java之路”的方针,通过对Java的“研究-构造-推广”的过程,从而占领市场。此外,HP、Oracle、Apple、Sybase、Netscape、Informix、3Com、Motorola等公司均是Sun的坚强同盟。

在我国,Java的引进与开发起步早,发展水平基本与世界同步。目前,Sun公司已在中国建成了由5个授权中心、20多个Internet/IntranetJava解决方案中心和10所Java大学、若干培训中心组成的三级结构。全面推动Java 在中国的普及、应用、研究、开发,培养了数以十万计的Java开发人员。此外,Sun还牵头成立了中外软件厂商的开发联盟。在中国,Java的开发可以说是“人才济济,成果累累”。如清华大学王克宏教授带领的课题组面向全国,自96年开始举办了多期Java培训班和讲座,开设了数期本科生、研究生Java 课程,出版了“Java系列丛书”10余册,承担了国家“九五”攻关项目“基于Java 技术的交互式远程教学系统”,并与日本就Java开发进行了国际合作,成绩

斐然;东大阿派下属的宝钢东软软件技术研究中心是国内是首屈一指的Java 研发骨干企业,该中心从95年起就开始了Java的研发,目前,已掌握了PersonalJava的核心移植技术,并成功地将JVM移植到汽车导航平台。此外,他们还开发出支持Jini协议的即插即用网络打印机软件,以及一套Jini信息家电网络的可视化演示环境,完成了基于JavaBeans的组件化软件开发及运行支持环境等多项成果;在台湾,22家知名计算机公司成立了“Java联盟”,并在台北建立了“Java开发中心”,新竹建立了“Java语言实验室”;在香港,举行了全岛Java杯比赛,掀起了学习Java的热潮。Java的浪潮汹涌澎湃,席卷全球!

2.3 Java标准技术要点

2.3.1 Java的特点

一、Java的跨平台性,即一次编译到处运行

简单地说Java的跨平台性就是指,编译后的Java程序可直接在不同的平台上运行而不用重新编译,这一特性使得Java随着Web应用的普及而迅速普及起来。而Java的跨平台性是如何实现的呢?这就要理解Java虚拟机和字节码的概念。

实际上,编译后的Java代码并不是传统的二进制代码(如Windows下的.exe文件),而是Java字节码,这种字节码文件是不能直接在操作系统上执行的。要想在一个操作系统上运行一个Java程序必须有一个中间环节来负责将Java字节码解释成二进制码,这个中间环节就是Java虚拟机(简称JVM)。由于目前大多数操作系统已经实现了JVM,所以Java轻松实现跨平台性。二、面向对象技术

Java全面支持面向对象技术,这体现在Class(类)是Java程序构成的基本单元,一个Java程序通常由许多Class组成,而且这些Class还会有一定的继承关系,Java支持Class的单继承,从而使类之间的继承关系更明确。继承的结果产生类的多态性,类的多态本质上讲就是可以用父类的引用访问继承类的实现(子类对象),类的这种多态性最终形成了组件对象模型的基础,即通过接口(父类)访问实现(子类)。

三、Java中的I/O操作

Java中以字节流(InputStream和OutputStream)、字符流(Reader和Writer)来分别读写二进制数据和字符数据,使用非常简单有效。Java类库中的File 类不仅提供文件操作而且还包含文件夹操作,如下面这几行代码可以列出C 盘根目录下的所有文件:

File f=new File("c://";

String [] m_dir= f.list();

for(int i=0;i

System.out.println(m_dir);

四、Java中的图形及事件处理

可以用awt包或swing包的Java类来进行大部分的Java图形界面设计,下面的几行代码将产生一个200*200像素的窗体:

Frame f=new Frame("Welcome";

f.setSize(200,200);

f.setVisible(true);

默认情况下,Frame窗体的关闭按钮不起作用,这也是Java初学者迷惑的地方。为了使用户按下关闭按钮时能关闭Frame窗体,需要让这个窗体响应一个WindowEvent事件,具体的做法就是给这个窗体添加一个事件监听器对象,这个事件监听器就是WindowListener接口的实现。在上面的代码中插入如下代码就可以关闭窗体:

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0);

}

}

这里用到一个无名内部类,无名内部类是Java中内部类的一种灵活运用方式。

五、Java中线程及同步控制

线程概念的引入是为了实现并行处理,从而提高程序的效率。Java中的线程实现非常简单,可以用两种方式来创建线程,一种是实现Runnable接口,另一种是继承Thread类重写run()方法。两种方式唯一的不同就是前者保留了继承一个类的可能(因为Java只支持类的单继承,但接口没有此限制)。

永远都用start()方法来启动一个线程,线程类中的run()可以被直接调用,但决不是启动一个线程,二者有着本质的区别。

用同步控制关键字synchronized来保护线程敏感数据,synchronized块中的内容可以保证同一时刻只能被一个线程访问,所以其中的数据是线程安全的。

用Object类中的wait()和notify()方法可以实现线程间交互,但要记住wait()和notify()方法只有发生在同一个对象上才能真正实现线程间交互。被某一对象wait()方法阻塞的线程需要另外一个调用了同一对象notify()的线程干预才能恢复运行。notify()方法一次唤醒一个被wait()方法阻塞的线程,notifyAll()方法可以一次唤醒所有被wait()方法阻塞的线程。

六、Java本地方法(native方法)的实现

Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java 使用native方法来扩展Java程序的功能。

可以将native方法比作Java程序同C程序的接口,其实现步骤:

1、在Java中声明native()方法,然后编译;

2、用javah产生一个.h文件;

3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h 文件(注意其中又包含了JDK带的jni.h文件);

4、将第三步的.cpp文件编译成动态链接库文件;

5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。

2.3.2 Java的应用

上述所提及的一些Java技术具有一定的普遍性,它们基本上是在Java

各个方面的运用中都需要掌握的技术。实际上Java的运用非常广泛,而且每个方面都需要遵循不同的规范。以下是对Java应用的简要介绍。

(一)理解Java SDK的三个版本:

Java SDK Micro Edition (J2ME)

用于开发掌上电脑、手机等移动通信设备上使用的应用程序。并不是所有的移动设备都支持Java,只有具备J2ME运行环境(JVM+J2ME API)的设备才能运行Java程序。J2ME的集成开发工具(通常都有带有一些仿真器)有Sun 的J2ME Wireless Toolkit 、IBM的Visul Age Micro Edition 等。

Java SDK Standard Edition(J2SE)

主要用于开发一般台式机应用程序。我们平时所说的JDK就指J2SE,而我们学Java就是从学习J2SE开始的。

Java SDK Enterprise Edition (J2EE)

用于开发分布式的企业级大型应用程序。其中的核心是Entetprise Java Beans(EJB,分布式Java组件)的开发。

(二)Java小程序(Applet)

Java小程序是一个继承了Applet类并重写了init()、paint()、stop()等方法的的Java类,它被布署在Web服务器(如IIS)上,当客户端请求Web页时,浏览器从Web服务器上将其下载到本地客户端,然后,浏览器创建该Applet 类的实例并调用其init()方法,从安全角度考虑,Applet没有访问本地文件的权限。由于Applet是被浏览器执行的,所以Applet不需要一个main()方法。实际上,除了Java Application之外,所有其它Java应用都不需要一个main()方法。

(三)服务器端Java小程序(Servlet)

Servlet也是一个Java类,和Applet形成对比,Servlet是运行于服务器端的Java小程序,而且Servlet需要一个单独的Web服务器(如Tomcat)做容器。除此之外,Servlet中用到的一些类(如HttpServlet)并不包含在J2SE API 中,所以需要将Servlet.jar(在Tomcat的common\lib文件夹下)加到环境变量中去。下面是一个简单的Servlet例子:

public class Myservlet extends HttpServlet{

public void doGet(HttpServletRequest request,HttpServletResponse response) {

try{

response.setContentType("text/html";

PrintWriter out=response.getWriter();

out.println("");

out.println("");

out.println("Hello world");

out.println("");

out.println("");

}catch(IOException e){}

}

}

将这个Class文件编译后放至Tomcat\webapps\examples\WEB-INF\classes下,

然后在浏览器地址栏里输入http://127.0.0.1:8080/examples/servlet/Myservlet 即可看到Hello world出现在浏览器中。

(四)Java Server Page (JSP)

同Servlet相似的是,JSP运行于Web服务器端,并且也需要Tomcat之类的容器。不同的是,由于JSP是将Java代码嵌在html标记里(同ASP一样用),JSP的界面设计同后台开发人员的工作可以有效分离。可以想像让开发人员用Servlet写一个花捎的Web页面有多困难,所以JSP+Servlet混合Web 应用是比较理想的选择。

看起来JSP同ASP的实现机制大同小异,其实也存在着本质的区别。所有的ASP页面都是解释运行的,而JSP页在第一次被请求时会被编译,再以后的客户请求都是直接运行服务器上的.class文件(在Tomcat的Work文件夹下),所以JSP要比ASP速度上快许多。

(五)Java Beans

Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。

(六)Enterprise Java Beans (EJB)

Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB 容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。

这种模型很像COM+管理器,其实EJB容器正是起到COM+管理器的作用,只是EJB组件相对COM组件来说更易用、更安全。

总的说来,Java作为面向对象技术的一个代表,在当今商业应用中更容易开发出高效的、多层的分布式应用程序,而且,由于Java技术有很强的健壮性和易用性,加上同UML应用的结合,开发一个商业应用软件的周期会大大缩短,所以Java会有不错的前景。

第3章JavaMail API技术研究

3.1 JavaMail API简介

JavaMail API是读取、撰写、发送电子信息的可选包。我们可用它来建立如Eudora、Foxmail、MS Outlook Express一般的邮件用户代理程序(Mail User Agent,简称MUA)。而不是像sendmail或者其它的邮件传输代理(Mail Transfer Agent,简称MTA)程序那样可以传送、递送、转发邮件。从另外一个角度来看,我们这些电子邮件用户日常用MUA程序来读写邮件,而MUA 依赖着MTA处理邮件的递送。

JavaMail API被设计用于以不依赖协议的方式去发送和接收电子信息,这个API被分为两大部分:基本功能:如何以不依赖于协议的方式发送接收电子信息,不过这只是一厢情愿而已。第二个部分则是依赖特定协议的,比如SMTP、POP、IMAP、NNTP协议。

3.2相关协议一览

在正式了解JavaMail API之前,先看一下API所涉及的协议。以下便是大家日常所知、所乐于使用的4大信息传输协议:SMTP、POP、IMAP、MIME。

当然,上面的4个协议,并不是全部,还有NNTP和其它一些协议可用于传输信息,但是不常用到。理解这4个基本的协议有助于更好的使用JavaMail API。然而JavaMail API是被设计为与协议无关的,目前并不能克服这些协议的束缚。确切的说,如果使用的功能并不被选择的协议支持,那么JavaMail API并不可能实现这种能力。

1.S MTP

简单邮件传输协议定义了递送邮件的机制。在下文中,将使用基于Java-Mail的程序与公司或者ISP的SMTP服务器进行通讯。这个SMTP服务器将邮件转发到接收者的SMTP服务器,直至最后被接收者通过POP或者IMAP协议获取。这并不需要SMTP服务器使用支持授权的邮件转发,但是却的确要注意SMTP服务器的正确设置(SMTP服务器的设置与JavaMail API 无关)。

2.P OP

POP是一种邮局协议,目前为第3个版本,即众所周知的POP3。POP 定义了一种用户如何获得邮件的机制。它规定了每个用户使用一个单独的邮箱。大多数人在使用POP时所熟悉的功能并非都被支持,例如查看邮箱中的新邮件数量。而这个功能是微软的Outlook内建的,那么就说明微软Outlook 之类的邮件客户端软件是通过查询最近收到的邮件来计算新邮件的数量来实现前面所说的功能。因此在使用JavaMail API时需要注意,当需要获得如前面所讲的新邮件数量之类的信息时,不得不自己进行计算。

3.I MAP

IMAP使用在接收信息的高级协议,目前版本为第4版,所以也被称为IMAP4。需要注意的是在使用IMAP时,邮件服务器必须支持该协议。从这个方面讲,并不能完全使用IMAP来替代POP,不能期待IMAP在任何地方

都被支持。假如邮件服务器支持IMAP,那么邮件程序将能够具有以下被IMAP 所支持的特性:每个用户在服务器上可具有多个目录,这些目录能在多个用户之间共享。

其与POP相比高级之处显而易见,但是在尝试采取IMAP时,认识到它并不是十分完美的:由于IMAP需要从其它服务器上接收新信息,将这些信息递送给用户,维护每个用户的多个目录,这都为邮件服务器带来了高负载。并且IMAP与POP的一个不同之处是POP用户在接收邮件时将从邮件服务器上下载邮件,而IMAP允许用户直接访问邮件目录,所以在邮件服务器进行备份作业时,由于每个长期使用此邮件系统的用户所用的邮件目录会占有很大的空间,这将直接导致邮件服务器上磁盘空间暴涨。

4.M IME

MIME并不是用于传送邮件的协议,它作为多用途邮件的扩展定义了邮件内容的格式:信息格式、附件格式等等。一些RFC标准都涉及了MIME:RFC 822, RFC 2045, RFC 2046, RFC 2047。作为JavaMail API的开发者,并不需关心这些格式定义,但是这些格式被用在了程序中。

5.N NTP和其它的第三方协议

正因为JavaMail API在设计时考虑到与第三方协议实现提供商之间的分离,故可以很容易的添加一些第三方协议。SUN维护着一个第三方协议实现提供商的列表:https://www.doczj.com/doc/fa5597313.html,/products/javamail/Third_Party.html,通过此列表可以找到所需要的而又不被SUN提供支持的第三方协议:比如NNTP这个新闻组协议和S/MIME这个安全的MIME协议。

3.3初次认识JavaMail API

A.纵览JavaMail核心类结构

打开JavaMail.jar文件,将发现在javax.mail的包下面存在着一些核心类:Session、Message、Address、Authenticator、Transport、Store、Folder。而且在javax.mail.internet包中还有一些常用的子类。

B.Session

Session类定义了基本的邮件会话。就像Http会话那样,进行收发邮件的工作都是基于这个会话的。Session对象利用了java.util.Properties对象获得了邮件服务器、用户名、密码信息和整个应用程序都要使用到的共享信息。

Session类的构造方法是私有的,所以可以使用Session类提供的getDefaultInstance()这个静态工厂方法获得一个默认的Session对象:Properties props = new Properties();

// fill props with any information

Session session = Session.getDefaultInstance(props, null);

或者使用getInstance()这个静态工厂方法获得自定义的Session: Properties props = new Properties();

// fill props with any information

Session session = Session.getInstance(props, null);

从上面的两个例子中不难发现,getDefaultInstance()和getInstance()方法的第二个参数都是null,这是因为在上面的例子中并没有使用到邮件授权,下文中将对授权进行详细介绍。

从很多的实例看,在对mail server进行访问的过程中使用共享的Session是足

够的,即使是工作在多个用户邮箱的模式下也不例外。

C.Message

当我们建立了Session对象后,便可以构造被发送的信息体了。在这里SUN提供了Message类型来帮助开发者完成这项工作。由于Message是一个抽象类,大多数情况下,使用javax.mail.internet.MimeMessage这个子类,该类是使用MIME类型、MIME信息头的邮箱信息。信息头只能使用US-ASCII 字符,而非ASCII字符将通过编码转换为ASCII的方式使用。

为了建立一个MimeMessage对象,必须将Session对象作为MimeMessage 构造方法的参数传入:

MimeMessage message = new MimeMessage(session);

注意:对于MimeMessage类来讲存在着多种构造方法,比如使用输入流作为参数的构造方法。

在建立了MimeMessage对象后,需要设置它的各个part,对于MimeMessage类来说,这些part就是MimePart接口。最基本的设置信息内容的方法就是通过表示信息内容和什么类型的参数调用setContent()方法:message.setContent("Hello", "text/plain");

然而,如果所使用的MimeMessage中信息内容是文本的话,便可以直接使用setText()方法来方便的设置文本内容。

message.setText("Hello");

前面所讲的两种方法,对于文本信息,后者更为合适。而对于其它的一些信息类型,比如HTML信息,则要使用前者。

使用setSubject()方法对邮件设置邮件主题:

message.setSubject("First");

D.Address

到这里,已经建立了Session和Message,下面将介绍如何使用邮件地址类:Address。像Message一样,Address类也是一个抽象类,所以将使用javax.mail.internet.InternetAddress这个子类。

通过传入代表邮件地址的字符串,可以建立一个邮件地址类:

Address address = new InternetAddress("president@https://www.doczj.com/doc/fa5597313.html,");

如果要在邮件地址后面增加名字的话,可以通过传递两个参数:代表邮件地址和名字的字符串来建立一个具有邮件地址和名字的邮件地址类:Address address = new InternetAddress("president@https://www.doczj.com/doc/fa5597313.html,", "George Bush");

这里所讲的邮件地址类是为了设置邮件信息的发信人和收信人而准备的,在建立了邮件地址类后,通过message的setFrom()和setReplyTo()两种方法设置邮件的发信人:

message.setFrom(address);

message.setReplyTo(address);

若在邮件中存在多个发信人地址,可用addForm()方法增加发信人:Address address[] = ...;

message.addFrom(address);

为了设置收信人,使用addRecipient()方法增加收信人,此方法需要使用Message.RecipientType的常量来区分收信人的类型:

message.addRecipient(type, address)

下面是Message.RecipientType的三个常量:

Message.RecipientType.TO

https://www.doczj.com/doc/fa5597313.html,

Message.RecipientType.BCC

因此,如果要发送邮件给总统,并发用一个副本给第一夫人的话,下面的方法将被用到:

Address toAddress = new InternetAddress("vice.president@https://www.doczj.com/doc/fa5597313.html,");

Address ccAddress = new InternetAddress("https://www.doczj.com/doc/fa5597313.html,dy@https://www.doczj.com/doc/fa5597313.html,");

message.addRecipient(Message.RecipientType.TO, toAddress);

message.addRecipient(https://www.doczj.com/doc/fa5597313.html,, ccAddress);

JavaMail API并没有提供检查邮件地址有效性的机制。当然我们可以自己完成这个功能:验证邮件地址的字符是否按照RFC822规定的格式书写或者通过DNS服务器上的MX记录验证等。

E.Authenticator

像https://www.doczj.com/doc/fa5597313.html,类那样,JavaMail API通过使用授权者类(Authenticator)以用户名、密码的方式访问那些受到保护的资源,在这里“资源”就是指邮件服务器。在javax.mail包中可以找到这个JavaMail的授权者类(Authenticator)。在使用Authenticator这个抽象类时,我们必须采用继承该抽象类的方式,并且该继承类必须具有返回PasswordAuthentication对象(用于存储认证时要用到的用户名、密码)getPasswordAuthentication()方法。并且要在Session中进行注册,使Session能够了解在认证时该使用哪个类。

下面代码片断中的MyAuthenticator就是一个Authenticator的子类。

Properties props = new Properties();

// fill props with any information

Authenticator auth = new MyAuthenticator();

Session session = Session.getDefaultInstance(props, auth);

F.Transport

在发送信息时,Transport类将被用到。这个类实现了发送信息的协议(通称为SMTP),此类是一个抽象类,我们可以使用这个类的静态方法send()来发送消息:

Transport.send(message);

当然,方法是多样的。我们也可由Session获得相应协议对应的Transport 实例。并通过传递用户名、密码、邮件服务器主机名等参数建立与邮件服务器的连接,并使用sendMessage()方法将信息发送,最后关闭连接:message.saveChanges(); // implicit with send()

Transport transport = session.getTransport("smtp");

transport.connect(host, username, password);

transport.sendMessage(message, message.getAllRecipients());

transport.close();

评论:上面的方法是一个很好的方法,尤其是在我们在同一个邮件服务器上发送多个邮件时。因为这时我们将在连接邮件服务器后连续发送邮件,然后再关闭掉连接。send()这个基本的方法是在每次调用时进行与邮件服务器的连接的,对于在同一个邮件服务器上发送多个邮件来讲可谓低效的方式。

注意:如果需要在发送邮件过程中监控mail命令的话,可以在发送前设置debug标志:

session.setDebug(true)。

G.Store和Folder

接收邮件和发送邮件很类似都要用到Session。但是在获得Session后,我们需要从Session中获取特定类型的Store,然后连接到Store,这里的Store 代表了存储邮件的邮件服务器。在连接Store的过程中,极有可能需要用到用户名、密码或者Authenticator。

// Store store = session.getStore("imap");

Store store = session.getStore("pop3");

store.connect(host, username, password);

在连接到Store后,一个Folder对象即目录对象将通过Store的getFolder()方法被返回,我们可从这个Folder中读取邮件信息:

Folder folder = store.getFolder("INBOX");

folder.open(Folder.READ_ONLY);

Message message[] = folder.getMessages();

上面的例子首先从Store中获得INBOX这个Folder(对于POP3协议只有一个名为INBOX的Folder有效),然后以只读(Folder.READ_ONLY)的方式打开Folder,最后调用Folder的getMessages()方法得到目录中所有Message的数组。

注意:对于POP3协议只有一个名为INBOX的Folder有效,而对于IMAP 协议,我们可以访问多个Folder(想想前面讲的IMAP协议)。而且SUN在设计Folder的getMessages()方法时采取了很智能的方式:首先接收新邮件列表,然后再需要的时候(比如读取邮件内容)才从邮件服务器读取邮件内容。在读取邮件时,我们可以用Message类的getContent()方法接收邮件或是writeTo()方法将邮件保存,getContent()方法只接收邮件内容(不包含邮件头),而writeTo()方法将包括邮件头。

System.out.println(((MimeMessage)message).getContent());

在读取邮件内容后,别忘记了关闭Folder和Store。

folder.close(aBoolean);

store.close();

传递给Folder.close()方法的boolean 类型参数表示是否在删除操作邮件后更新Folder。

3.4 使用JavaMail API

3.4.1 发送邮件

在获得了Session后,建立并填入邮件信息,然后发送它到邮件服务器。这便是使用Java Mail API发送邮件的过程,在发送邮件之前,需要设置SMTP 服务器:通过设置Properties的mail.smtp.host属性。

String host = ...;

String from = ...;

String to = ...;

// Get system properties

Properties props = System.getProperties();

// Setup mail server

props.put("mail.smtp.host", host);

// Get session

Session session = Session.getDefaultInstance(props, null);

// Define message

MimeMessage message = new MimeMessage(session);

message.setFrom(new InternetAddress(from));

message.addRecipient(Message.RecipientType.TO,

new InternetAddress(to));

message.setSubject("Hello JavaMail");

message.setText("Welcome to JavaMail");

// Send message

Transport.send(message);

由于建立邮件信息和发送邮件的过程中可能会抛出异常,所以需要将上面的代码放入到try-catch结构块中。

3.4.2 接收邮件

为了读取邮件,获得session,并且连接到了邮箱的相应store,打开相应的Folder,然后得到想要的邮件,当然别忘记了在结束时关闭连接。

String host = ...;

String username = ...;

String password = ...;

// Create empty properties

Properties props = new Properties();

// Get session

Session session = Session.getDefaultInstance(props, null);

// Get the store

Store store = session.getStore("pop3");

store.connect(host, username, password);

// Get folder

Folder folder = store.getFolder("INBOX");

folder.open(Folder.READ_ONLY);

// Get directory

Message message[] = folder.getMessages();

for (int i=0, n=message.length; i

System.out.println(i + ": " + message[i].getFrom()[0] + "\t" + message[i].getSubject());

}

// Close connection

folder.close(false);

store.close();

上面的代码所作的是从邮箱中读取每个邮件,并且显示邮件的发信人地址和主题。从技术角度讲,这里存在着一个异常的可能:当发信人地址为空

时,getFrom()[0]将抛出异常。

下面的代码片断有效的说明了如何读取邮件内容,在显示每个邮件发信人和主题后,将出现用户提示从而得到用户是否读取该邮件的确认,如果输入YES的话,可用Message.writeTo(java.io.OutputStream os)方法将邮件内容输出到控制台上。

BufferedReader reader = new BufferedReader (

new InputStreamReader(System.in));

// Get directory

Message message[] = folder.getMessages();

for (int i=0, n=message.length; i

System.out.println(i + ": " + message[i].getFrom()[0] + "\t" + message[i].getSubject());

System.out.println("Do you want to read message? " +

"[YES to read/QUIT to end]");

String line = reader.readLine();

if ("YES".equals(line)) {

message[i].writeTo(System.out);

} else if ("QUIT".equals(line)) {

break;

}

}

3.4.3删除邮件和标志

设置与message相关的Flags是删除邮件的常用方法。这些Flags表示了一些系统定义和用户定义的不同状态。在Flags类的内部类Flag中预定义了一些标志:

Flags.Flag.ANSWERED

Flags.Flag.DELETED

Flags.Flag.DRAFT

Flags.Flag.FLAGGED

Flags.Flag.RECENT

Flags.Flag.SEEN

https://www.doczj.com/doc/fa5597313.html,ER

但需要在使用时注意的:标志存在并非意味着这个标志被所有的邮件服务器所支持。例如,对于删除邮件的操作,POP协议不支持上面的任何一个。所以要确定哪些标志是被支持的——通过访问一个已经打开的Folder对象的getPermanetFlags()方法,它将返回当前被支持的Flags类对象。

删除邮件时,可以设置邮件的DELETED标志:

message.setFlag(Flags.Flag.DELETED, true);

但是首先要采用READ_WRITE的方式打开Folder:

folder.open(Folder.READ_WRITE);

在对邮件进行删除操作后关闭Folder时,需要传递一个true作为对删除邮件的擦除确认。

folder.close(true);

Folder类中另一种用于删除邮件的方法expunge()也同样可删除邮件,但是它并不为sun提供的POP3实现支持,而其它第三方提供的POP3实现支持或者并不支持这种方法。

另外,介绍一种检查某个标志是否被设置的方法:Message.isSet(Flags.Flag flag)方法,其中参数为被检查的标志。

3.4.4 邮件认证

前面已经介绍了如何使用Authenticator类来代替直接使用用户名和密码这两字符串作为Session.getDefaultInstance()或者Session.getInstance()方法的参数,现在将全面认识一下邮件认证。

在此取代了直接使用邮件服务器主机名、用户名、密码这三个字符串作为连接到POP3 Store的方式,使用存储了邮件服务器主机名信息的属性文件,并在获得Session时传入自定义的Authenticator实例:

// Setup properties

Properties props = System.getProperties();

props.put("mail.pop3.host", host);

// Setup authentication, get session

Authenticator auth = new PopupAuthenticator();

Session session = Session.getDefaultInstance(props, auth);

// Get the store

Store store = session.getStore("pop3");

store.connect();

PopupAuthenticator类继承了抽象类Authenticator,并且通过重载Authenticator类的getPasswordAuthentication()方法返回PasswordAuthentication类对象。而getPasswordAuthentication()方法的参数param是以逗号分割的用户名、密码组成的字符串。

import javax.mail.*;

import java.util.*;

public class PopupAuthenticator extends Authenticator {

public PasswordAuthentication getPasswordAuthentication(String param) {

String username, password;

StringTokenizer st = new StringTokenizer(param, ",");

username = st.nextToken();

password = st.nextToken();

return new PasswordAuthentication(username, password);

}

}

3.4.5 回复邮件

回复邮件的方法很简单:使用Message类的reply()方法,通过配置回复邮件的收件人地址和主题(如果没有提供主题的话,系统将默认将“Re:”作为邮件的主体),这里不需要设置任何的邮件内容,只要复制发信人或者reply-to到新的收件人。而reply()方法中的boolean参数表示是否将邮件

回复给发送者(参数值为false),或是回复给所有人(参数值为true)。

补充一下,reply-to地址需要在发信时使用setReplyTo()方法设置。

MimeMessage reply = (MimeMessage)message.reply(false);

reply.setFrom(new InternetAddress("president@https://www.doczj.com/doc/fa5597313.html,"));

reply.setText("Thanks");

Transport.send(reply);

3.4.6 转发邮件

转发邮件的过程不如前面的回复邮件那样简单,它将建立一个转发邮件,这并非一个方法就能做到。每个邮件是由多个部分组成,每个部分称为一个

邮件体部分,是一个BodyPart类对象,对于MIME类型邮件来讲就是MimeBodyPart类对象。这些邮件体包含在成为Multipart的容器中对于MIME 类型邮件来讲就是MimeMultiPart类对象。在转发邮件时,建立一个文字邮

件体部分和一个被转发的文字邮件体部分,然后将这两个邮件体放到一个Multipart中。说明一下,复制一个邮件内容到另一个邮件的方法是仅复制

它的DataHandler(数据处理者)即可。这是由JavaBeans Activation Framework定义的一个类,它提供了对邮件内容的操作命令的访问、管理了

邮件内容操作,是不同的数据源和数据格式之间的一致性接口。

// Create the message to forward

Message forward = new MimeMessage(session);

// Fill in header

forward.setSubject("Fwd: " + message.getSubject());

forward.setFrom(new InternetAddress(from));

forward.addRecipient(Message.RecipientType.TO,

new InternetAddress(to));

// Create your new message part

BodyPart messageBodyPart = new MimeBodyPart();

messageBodyPart.setText(

"Here you go with the original message:\n\n");

// Create a multi-part to combine the parts

Multipart multipart = new MimeMultipart();

multipart.addBodyPart(messageBodyPart);

// Create and fill part for the forwarded content

messageBodyPart = new MimeBodyPart();

messageBodyPart.setDataHandler(message.getDataHandler());

// Add part to multi part

multipart.addBodyPart(messageBodyPart);

// Associate multi-part with message

forward.setContent(multipart);

// Send message

Transport.send(forward);

3.4.7 使用附件

附件作为与邮件相关的资源经常以文本、表格、图片等格式出现,如流

毕业设计外文翻译资料

外文出处: 《Exploiting Software How to Break Code》By Greg Hoglund, Gary McGraw Publisher : Addison Wesley Pub Date : February 17, 2004 ISBN : 0-201-78695-8 译文标题: JDBC接口技术 译文: JDBC是一种可用于执行SQL语句的JavaAPI(ApplicationProgrammingInterface应用程序设计接口)。它由一些Java语言编写的类和界面组成。JDBC为数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。 一、ODBC到JDBC的发展历程 说到JDBC,很容易让人联想到另一个十分熟悉的字眼“ODBC”。它们之间有没有联系呢?如果有,那么它们之间又是怎样的关系呢? ODBC是OpenDatabaseConnectivity的英文简写。它是一种用来在相关或不相关的数据库管理系统(DBMS)中存取数据的,用C语言实现的,标准应用程序数据接口。通过ODBCAPI,应用程序可以存取保存在多种不同数据库管理系统(DBMS)中的数据,而不论每个DBMS使用了何种数据存储格式和编程接口。 1.ODBC的结构模型 ODBC的结构包括四个主要部分:应用程序接口、驱动器管理器、数据库驱动器和数据源。应用程序接口:屏蔽不同的ODBC数据库驱动器之间函数调用的差别,为用户提供统一的SQL编程接口。 驱动器管理器:为应用程序装载数据库驱动器。 数据库驱动器:实现ODBC的函数调用,提供对特定数据源的SQL请求。如果需要,数据库驱动器将修改应用程序的请求,使得请求符合相关的DBMS所支持的文法。 数据源:由用户想要存取的数据以及与它相关的操作系统、DBMS和用于访问DBMS的网络平台组成。 虽然ODBC驱动器管理器的主要目的是加载数据库驱动器,以便ODBC函数调用,但是数据库驱动器本身也执行ODBC函数调用,并与数据库相互配合。因此当应用系统发出调用与数据源进行连接时,数据库驱动器能管理通信协议。当建立起与数据源的连接时,数据库驱动器便能处理应用系统向DBMS发出的请求,对分析或发自数据源的设计进行必要的翻译,并将结果返回给应用系统。 2.JDBC的诞生 自从Java语言于1995年5月正式公布以来,Java风靡全球。出现大量的用java语言编写的程序,其中也包括数据库应用程序。由于没有一个Java语言的API,编程人员不得不在Java程序中加入C语言的ODBC函数调用。这就使很多Java的优秀特性无法充分发挥,比如平台无关性、面向对象特性等。随着越来越多的编程人员对Java语言的日益喜爱,越来越多的公司在Java程序开发上投入的精力日益增加,对java语言接口的访问数据库的API 的要求越来越强烈。也由于ODBC的有其不足之处,比如它并不容易使用,没有面向对象的特性等等,SUN公司决定开发一Java语言为接口的数据库应用程序开发接口。在JDK1.x 版本中,JDBC只是一个可选部件,到了JDK1.1公布时,SQL类包(也就是JDBCAPI)

毕业论文英文参考文献与译文

Inventory management Inventory Control On the so-called "inventory control", many people will interpret it as a "storage management", which is actually a big distortion. The traditional narrow view, mainly for warehouse inventory control of materials for inventory, data processing, storage, distribution, etc., through the implementation of anti-corrosion, temperature and humidity control means, to make the custody of the physical inventory to maintain optimum purposes. This is just a form of inventory control, or can be defined as the physical inventory control. How, then, from a broad perspective to understand inventory control? Inventory control should be related to the company's financial and operational objectives, in particular operating cash flow by optimizing the entire demand and supply chain management processes (DSCM), a reasonable set of ERP control strategy, and supported by appropriate information processing tools, tools to achieved in ensuring the timely delivery of the premise, as far as possible to reduce inventory levels, reducing inventory and obsolescence, the risk of devaluation. In this sense, the physical inventory control to achieve financial goals is just a means to control the entire inventory or just a necessary part; from the perspective of organizational functions, physical inventory control, warehouse management is mainly the responsibility of The broad inventory control is the demand and supply chain management, and the whole company's responsibility. Why until now many people's understanding of inventory control, limited physical inventory control? The following two reasons can not be ignored: First, our enterprises do not attach importance to inventory control. Especially those who benefit relatively good business, as long as there is money on the few people to consider the problem of inventory turnover. Inventory control is simply interpreted as warehouse management, unless the time to spend money, it may have been to see the inventory problem, and see the results are often very simple procurement to buy more, or did not do warehouse departments . Second, ERP misleading. Invoicing software is simple audacity to call it ERP, companies on their so-called ERP can reduce the number of inventory, inventory control, seems to rely on their small software can get. Even as SAP, BAAN ERP world, the field of

java毕业设计论文总结

java毕业设计论文总结 java毕业设计论文总结 1.Java语言的出现 自从1946年世界上第一台电子计算机问世以来,计算模式的发展经历了三个阶段:集中计算模式、分散计算模式和网络计算模式。Internet的出现,为在网络计算模式下的科学计算和信息处理提供了良好平台。然而,要充分利用网络计算模式的功能与效益,平台的运行环境是个制约因素,而Java语言和Java技术则是解决这一问题的最佳途径。 1991年,SUN公司的Jame Gosling,Bill Joe等人试图为电视、烤箱等家用电器开发一种交互式的软件系统,这种应用需要的是那种小而可靠的系统,它能够移植,并且实时性好,适用于网络分布环境。流行的C++是自然的选择。不过,开发过程中遇到的许多难以克服的困难使他们意识到必须彻底解决问题了,最终,开发成功了一个名为Oak的软件,此中蕴藏着Java的原型,当时,并未引起人们的注意。1994年下半年,随着Internet的迅猛发展,环球信息网WWW的快速增长,促进了Java语言研制的进展,使得它逐渐成为Internet上倍受欢迎的开发与编程语言。1995年5月Java正式问世,一些著名的计算机公司纷纷购买了Java语言的使用权,如Microsoft、IBM、Netscape、Novell、Apple、DEC、SGI等。因此,Java语言被美国著名杂志PC Magazine评为1995年十大优秀科技产品(计算机类仅此一项入选)之一,随之大量出现了用Java编写的软件产品,受到工业界

的重视与好评,认为“Java是八十年代以来计算机界的一件大事”。微软总裁比尔·盖茨在认真观察了一段时间后,确认“Java是长时间以来最卓越的程序设计语言”,并确定微软整个软件的开发战略从PC单机时代向以网络为中心的计算时代转移,而购买Java则是他的重大战略决策的实施部署。 因此,Java的诞生必将对整个计算机产业发生深远的影响,对传统的计算模型提出了新的挑战。SUN Microsystem公司的总裁Scott McNealy认为:Java对Internet和WWW开辟了一个崭新的时代。 有人预言:Java将成为网络上的“世界语”,今后,用其他语言编写的软件统统都要用Java语言来改写。 2.Java语言的主要特点 Java语言是一种适用于网络编程的语言,它的基本结构与C++极为相似,但却简单得多。它集成了其它一些语言的特点和优势,又避开了它们的不足之处。它的主要特点如下: 2.1简单性 Java与C++相比,不再支持运算符重载、多级继承及广泛的自动强制等易混淆和较少使用的特性,而增加了内存空间自动垃圾收集的功能,复杂特性的省略和实用功能的增加使得开发变得简单而可靠。 简单化的另一个方面是Java的系统非常小,其基本解释和类

java毕业设计中英文翻译

java毕业设计中英文翻译 篇一:JAVA外文文献+翻译 Java and the Internet If Java is, in fact, yet another computer programming language, you may question why it is so important and why it is being promoted as a revolutionary step in computer programming. The answer isn’t immediately obvious if you’re coming from a traditional programming perspective. Although Java is very useful for solving traditional stand-alone programming problems, it is also important because it will solve programming problems on the World Wide Web. 1. Client-side programming The Web’s initial server-browser design provided for interactive content, but the interactivity was completely provided by the server. The server produced static pages for the client browser, which would simply interpret and display them. Basic HTML contains simple mechanisms for data gathering: text-entry boxes, check boxes, radio boxes, lists and drop-down lists, as well as a button that can only be programmed to reset the

软件开发概念和设计方法大学毕业论文外文文献翻译及原文

毕业设计(论文)外文文献翻译 文献、资料中文题目:软件开发概念和设计方法文献、资料英文题目: 文献、资料来源: 文献、资料发表(出版)日期: 院(部): 专业: 班级: 姓名: 学号: 指导教师: 翻译日期: 2017.02.14

外文资料原文 Software Development Concepts and Design Methodologies During the 1960s, ma inframes and higher level programming languages were applied to man y problems including human resource s yste ms,reservation s yste ms, and manufacturing s yste ms. Computers and software were seen as the cure all for man y bu siness issues were some times applied blindly. S yste ms sometimes failed to solve the problem for which the y were designed for man y reasons including: ?Inability to sufficiently understand complex problems ?Not sufficiently taking into account end-u ser needs, the organizational environ ment, and performance tradeoffs ?Inability to accurately estimate development time and operational costs ?Lack of framework for consistent and regular customer communications At this time, the concept of structured programming, top-down design, stepwise refinement,and modularity e merged. Structured programming is still the most dominant approach to software engineering and is still evo lving. These failures led to the concept of "software engineering" based upon the idea that an engineering-like discipl ine could be applied to software design and develop ment. Software design is a process where the software designer applies techniques and principles to produce a conceptual model that de scribes and defines a solution to a problem. In the beginning, this des ign process has not been well structured and the model does not alwa ys accurately represent the problem of software development. However,design methodologies have been evolving to accommo date changes in technolog y coupled with our increased understanding of development processes. Whereas early desig n methods addressed specific aspects of the

毕业设计(论文)外文文献译文

毕业设计(论文) 外文文献译文及原文 学生:李树森 学号:201006090217 院(系):电气与信息工程学院 专业:网络工程 指导教师:王立梅 2014年06月10日

JSP的技术发展历史 作者:Kathy Sierra and Bert Bates 来源:Servlet&JSP Java Server Pages(JSP)是一种基于web的脚本编程技术,类似于网景公司的服务器端Java脚本语言—— server-side JavaScript(SSJS)和微软的Active Server Pages(ASP)。与SSJS和ASP相比,JSP具有更好的可扩展性,并且它不专属于任何一家厂商或某一特定的Web服务器。尽管JSP规范是由Sun 公司制定的,但任何厂商都可以在自己的系统上实现JSP。 在Sun正式发布JSP之后,这种新的Web应用开发技术很快引起了人们的关注。JSP为创建高度动态的Web应用提供了一个独特的开发环境。按照Sun的说法,JSP能够适应市场上包括Apache WebServer、IIS4.0在内的85%的服务器产品。 本文将介绍JSP相关的知识,以及JavaBean的相关内容,当然都是比较粗略的介绍其中的基本内容,仅仅起到抛砖引玉的作用,如果读者需要更详细的信息,请参考相应的JSP的书籍。 1.1 概述 JSP(Java Server Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准,其在动态网页的建设中有其强大而特别的功能。JSP与Microsoft的ASP技术非常相似。两者都提供在HTML代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。下面我们简单的对它进行介绍。 JSP页面最终会转换成servlet。因而,从根本上,JSP页面能够执行的任何任务都可以用servlet 来完成。然而,这种底层的等同性并不意味着servlet和JSP页面对于所有的情况都等同适用。问题不在于技术的能力,而是二者在便利性、生产率和可维护性上的不同。毕竟,在特定平台上能够用Java 编程语言完成的事情,同样可以用汇编语言来完成,但是选择哪种语言依旧十分重要。 和单独使用servlet相比,JSP提供下述好处: JSP中HTML的编写与维护更为简单。JSP中可以使用常规的HTML:没有额外的反斜杠,没有额外的双引号,也没有暗含的Java语法。 能够使用标准的网站开发工具。即使是那些对JSP一无所知的HTML工具,我们也可以使用,因为它们会忽略JSP标签。 可以对开发团队进行划分。Java程序员可以致力于动态代码。Web开发人员可以将经理集中在表示层上。对于大型的项目,这种划分极为重要。依据开发团队的大小,及项目的复杂程度,可以对静态HTML和动态内容进行弱分离和强分离。 此处的讨论并不是说人们应该放弃使用servlet而仅仅使用JSP。事实上,几乎所有的项目都会同时用到这两种技术。在某些项目中,更适宜选用servlet,而针对项目中的某些请求,我们可能会在MVC构架下组合使用这两项技术。我们总是希望用适当的工具完成相对应的工作,仅仅是servlet并不一定能够胜任所有工作。 1.2 JSP的由来 Sun公司的JSP技术,使Web页面开发人员可以使用HTML或者XML标识来设计和格式化最终

Java版学生管理系统毕业设计论文

Java版学生管理系统毕业设计论文 目录 摘要 (1) 引言 (4) 第一章可行性分析 (6) 1.1 问题的定义 (6) 1.2 系统可行性分析 (7) 第二章需求分析 (7) 2.1 系统开发环境 (7) 2.1.1 Java的主要特性 (7) 2.1.2 SQL介绍 (9) 2.1.3 C/S结构介绍 (9) 2.2 系统需要解决的主要问题 (10) 2.3 系统具备的基本功能 (10) 第三章系统设计 (11) 3.1 系统目标设计 (11) 3.2 开发设计思想 (12) 3.3 系统功能分析 (12) 3.4 系统功能模块设计 (12) 第四章数据库设计 (13) 4.1 数据库需求分析 (13) 4.2 数据库概念结构设计 (14) 4.3 数据库逻辑结构设计 (14) 4.4 SQL脚本实现 (14) 第五章系统主要功能模块 (16) 5.1 登陆和主窗体界面设计 (16) 5.1.1 管理员界面主要代码 (19) 5.2 学生界面设计 (22) 5.2.1 学生界面主要代码 (24) 5.3 教师界面设计 (26)

5.3.1 教师界面主要代码 (28) 结论 (30) 参考文献 (31) 附录 (32) 谢辞 (47) 第一章可行性分析 1.1 问题的定义 学生信息的管理是学校日常工作的重要组成部分。高校招生规模逐渐扩大和认识制度的改革,在校学生人数将不断增加,而学生管理人员则相对减少。加上我国高等学校基层学生管理头绪多,容杂,管理细,要求高,传统管理办法以基本不适用新形势的要求。在校生的基本信息的管理,选课及成绩的信息的管理,学生学籍的管理,稍有不慎就会出现错误。同时学生成绩的手工登录与查询,是一项非常繁重而枯燥的劳动,每天课程的变化都需要重新规划,耗费许多人力和物力,而且会因人的情绪烦操而出现失误。因此在计算机飞速发展的今天,应用数据库技术实现学生信息的管理是可行而必要的工作,实现高校学生信息网上管理,既能够提高工作效率,又可以提高工作水平。 计算机具有速度快、精度高、能按照设计逻辑处理问题等特性,在学生信息的录入、统计中如采用一个计算机化的信息系统进行处理,就不会发生信息遗漏或者数据输入不正确的情形。 在学校长期以来,学生信息管理都是依赖人工进行的,面对如此众多的学生信息,其工作量可想而知。不仅仅浪费了大量的人力物力,而且由于人工管理存在着大量的不可控因素,造成了信息管理系的某些不规。作为计算机应用的一部分,使用计算机对学生信息进行管理,具有手工管理无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、性好、寿命长、成本低等。这些优点

英语毕业论文引用和参考文献格式

英语毕业论文引用和参考文献格式 英语专业毕业论文引用和参考文献格式采用APA格式及规范。 一、文中夹注格式 英语学位论文引用别人的观点、方法、言论必须注明出处,注明出处时使用括号夹注的方法(一般不使用脚注或者尾注),且一般应在正文后面的参考文献中列出。关于夹注,采用APA格式。 (一)引用整篇文献的观点 引用整篇文献(即全书或全文)观点时有两种情况: 1.作者的姓氏在正文中没有出现,如:CharlotteandEmilyBrontewerepolaropposites,notonlyintheirpersonalitiesbutinthe irsourcesofinspirationforwriting(Taylor,1990). 2.作者的姓氏已在正文同一句中出现,如:TaylorclaimsthatCharlotteandEmilyBrontewerepolaropposites,notonlyintheirperso nalitiesbutintheirsourcesofinspirationforwriting(1990). 3.如果作者的姓氏和文献出版年份均已在正文同一句中出现,按APA的规范不需使用括号夹注,如: Ina1990article,TaylorclaimsthatCharlotteandEmilyBrontewerepolaropposites,noto nlyintheirpersonalitiesbutintheirsourcesofinspirationforwriting. 4.在英文撰写的论文中引用中文着作或者期刊,括号夹注中只需用汉语拼音标明作者的姓氏,不得使用汉字,如:(Zhang,2005) (二)引用文献中具体观点或文字 引用文献中某一具体观点或文字时必须注明该观点或者该段文字出现的页码出版年份,没有页码是文献引用不规范的表现。 1.引用一位作者的文献 (1)引用内容在一页内,如: EmilyBronte“expressedincreasinghostilityfortheworldofhumanrelationships,whet hersexualorsocial”(Taylor,1988:11). (2)引用内容在多页上,如: Newmark(1988:39-40)notesthreecharacteristicallyexpressivetext-types:(a)seriousimaginativel iterature注意在这些例子中引文超过一页时的页码标记方法:APA的规范是(1988,。 假若作者的姓氏已在正文同一句中出现,则不需要在括号夹注中重复,如:TaylorwritesthatEmilyBronte“expressedincreasinghostilityfortheworldofhumanre lationships,whethersexualorsocial”(1988:11).

(完整版)JAVA课程设计_基于mysql的学生信息管理系统毕业论文

1.目录 概述 (3) 一、课题介绍 (3) 二、目的和要求 (3) 三、任务计划 (3) 需求分析 (5) 一、学生管理系统的发展现状 (5) 二、系统功能分析 (5) 三、系统结构框图 (5) 数据库设计 (7) 一、创建数据表的结构 (7) 二、各表功能及其关系 (7) 系统模块功能的实现与界面设计 (8) 一、系统主要模块 (8) 二、欢迎界面 (9) 三、主菜单界面 (9) 四、子菜单 (10) 五、学生信息录入 (11) 六、学生信息查找 (12) 七、学生信息删除 (13) 八、学生信息修改 (14)

课程设计心得 (15) 一、程序结构设计培养 (15) 二、书写习惯养成 (15) 三、注意程序简洁 (15) 总结 (16) 参考文献 (17) 附录:项目源代码 (18) 一、数据库连接(D B C ONNECTION.JAVA) (18) 二、学生信息数据库管理(S TUDENT_D AO.JAVA) (18) 三、欢迎界面(W ELCOME.JAVA) (23) 四、主菜单界面(M ENU.JAVA) (24) 五、子菜单界面(S ON_M ENU.JAVA) (27) 六、添加功能(A DD_M ENU.JAVA) (31) 七、查找功能(F IND_M ENU.JAVA) (34) 八、删除功能(D ELET_M ENU.JAVA) (36) 九、修改功能(C HANGE_M ENU.JAVA) (38)

概述 一、课题介绍 本次课程设计要求实现一个面向学生信息的管理系统。学生信息系统是一个非常通用的管理系统。很多大、中、小学校都需要拥有自己的学生档案管理系统,以便对本校学生的基本信息和学习情况进行管理,另一方面,较完整的学校信息管理系统同样也需要有学生信息管理系统的支持。 由通用的学生相关数据分析可知,系统包括院系管理、学生基本信息管理、课程管理、学生从成绩管理等主要功能。 该系统要求使用JA V A和MySQL作为开发工具和数据库管理系统,因此,系统设计涉及系统功能设计、数据库设计和系统界面等几个方面内容。 二、目的和要求 2.了解JA V A语言的特点及使用的范围,掌握开发软件平台的搭建。 3.要求使用JA V A和MySQL开发一个学生信息管理系统,系统主要 功能如下: 1)院系信息管理 院系系统信息的录入,包括院系编号、院系名称等信息; 院系信息的修改、删除、查询。 2)学生基本信息管理 学生基本信息的录入,包括学号、姓名、性别、出生日期、所在院系、班级等信息;

本科毕业设计方案外文翻译范本

I / 11 本科毕业设计外文翻译 <2018届) 论文题目基于WEB 的J2EE 的信息系统的方法研究 作者姓名[单击此处输入姓名] 指导教师[单击此处输入姓名] 学科(专业 > 所在学院计算机科学与技术学院 提交日期[时间 ]

基于WEB的J2EE的信息系统的方法研究 摘要:本文介绍基于工程的Java开发框架背后的概念,并介绍它如何用于IT 工程开发。因为有许多相同设计和开发工作在不同的方式下重复,而且并不总是符合最佳实践,所以许多开发框架建立了。我们已经定义了共同关注的问题和应用模式,代表有效解决办法的工具。开发框架提供:<1)从用户界面到数据集成的应用程序开发堆栈;<2)一个架构,基本环境及他们的相关技术,这些技术用来使用其他一些框架。架构定义了一个开发方法,其目的是协助客户开发工程。 关键词:J2EE 框架WEB开发 一、引言 软件工具包用来进行复杂的空间动态系统的非线性分析越来越多地使用基于Web的网络平台,以实现他们的用户界面,科学分析,分布仿真结果和科学家之间的信息交流。对于许多应用系统基于Web访问的非线性分析模拟软件成为一个重要组成部分。网络硬件和软件方面的密集技术变革[1]提供了比过去更多的自由选择机会[2]。因此,WEB平台的合理选择和发展对整个地区的非线性分析及其众多的应用程序具有越来越重要的意义。现阶段的WEB发展的特点是出现了大量的开源框架。框架将Web开发提到一个更高的水平,使基本功能的重复使用成为可能和从而提高了开发的生产力。 在某些情况下,开源框架没有提供常见问题的一个解决方案。出于这个原因,开发在开源框架的基础上建立自己的工程发展框架。本文旨在描述是一个基于Java的框架,该框架利用了开源框架并有助于开发基于Web的应用。通过分析现有的开源框架,本文提出了新的架构,基本环境及他们用来提高和利用其他一些框架的相关技术。架构定义了自己开发方法,其目的是协助客户开发和事例工程。 应用程序设计应该关注在工程中的重复利用。即使有独特的功能要求,也

毕业论文外文文献

毕业论文外文文献 Photography Pen Film director and critic Alexander Astruc's comments in today, wrote a famous: "Following a variety of other arts, especially painting, novel, film is rapidly becoming a tool to express ideas. It swept the market, a mall next to the theater's entertainment products. It is a well preserved image of the times methods. Now is gradually becoming a language, that is, the artist can use it to express themselves through a means of thinking, no matter how abstract this idea, or that it is also used as a kind of artists like prose or fiction a form to express their themes. So, I put this new era for film today called "photo pen" era, that era of writing, the use of the camera …… "Silent film attempts to use symbolic links to all the concept and meaning of the expression. We know, Lenovo exist in the image itself, naturally present in the film development process, there is the role of performance in each posture and expression, present in every word of in; also present in the camera movement, this movement linked to a piece of things, to link people and things …… "Obviously, that is, screenwriter making his own films. Or even say that there is no longer what the movie writer. Because, in such films, the playwright and director, there is nothing between significant

基于JAVA局域网聊天软件_毕业设计论文-

本科毕业论文(毕业设计) 题目:局域网聊天软件 系院: 学生姓名: 学号: 专业: 年级: 完成日期: 指导教师:

摘要 在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,例如,国外的ICQ、国内腾讯公司开发的OICQ。基于Java网络编程的强大功能,本次毕业设计使用Java编写一个聊天系统。 一般来说,聊天工具大多数由客户端程序和服务器程序外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能用多线程可完成多点对多点的聊天,数据库管理系统用SQL Server2000完成并通过JDBC-ODBC桥访问数据库。 本系统建立在JAVA平台上,系统的设计使用了面向对象技术和面向对象的设计原则。系统采用C/S结构,客户端与客户端以及客户端与服务器端之间通过Socket传送消息。使用JAVA语言编写,开发工具采用Eclipse。服务器端设计与实现过程中,采用了多线程技术,可以在单个程序当中同时运行多个不同的线程,执行不同的任务。大大增强了程序对服务器资源的利用。 聊天系统完成后将可进行多人对多人的聊天,对好友进行添加、删除,对新用户的注册,发送消息、接受消息等等功能。 关键字:多线程;客户机/服务器;JA V A ;Socket ;Eclipse ;TCP/IP

Abstract as the network become more and more developed, people become more and more lean to the network, and can not leave with out it. This caused the chat materials become more numerous, as the overseas ICQ system, the OICQ system that invented by Tencent Co., and so on. So we create a network chat medium just like the QQ.Java network programming based on the power, the use of Java designed to prepare graduates a chat system. In general, the majority of the chat tool for client and server program in addition to server-side storage of customer data for the database,the system uses a client / server architecture model the adoption of Java provided Socket class connect client and server and between the client and server communicate with each other, as the chat is to provide point-to-multipoint and multi-threaded Java function to be completed by using multi-threaded chat and more point-to-multipoint, database management system with SQL Server2000 the completion and adoption of JDBC-ODBC Bridge access the database. The system built on the JAVA platform, the system design using object-oriented technology and object-oriented design principles. System uses the C / S structure, client and client-side and server-side client and send messages through Socket. The use of JAVA language, development tools using Eclipse. Design and Implementation of server-side process, the use of multi-threading technology, which can process in a single run at the same time a number of different threads, the implementation of different tasks. Procedures greatly enhanced the use of server resources. Chat system will allow people to complete chat to more friends,and the system can add, delete somebody,can deal with new user registration, send messages, receive messages and so on. Keywords : Multithreading ; Client/Server ;JA V A ;Socket ;Eclipse ;TCP/IP

毕业设计英语参考文献

C++ [1] Gordon Hogenson. C++/Cli The Visual C++ Language For .Net [M]. Wiley India Pvt. Ltd., 2007. [2] Motor Industry Software Reliability Association. MISRA-C: 2004: guidelines for the use of the C language in critical systems.[M]. MIRA, 2008. [3] Jeff Cogswell, John Paul Mueller. C++ All-In-One Desk Reference For Dummies [M]. Wiley publishing.Inc 2009. [4] Stephen R. Davis. C++ for Dummies [M]. wiley publishing.Inc 2008. [5] Harvey Dietel, Paul Deitel. C: How to Program [M]. Pearson Education,Inc 2010. [6] Bruce Eckel. Thinking in C++[M]. Prentice Hall, 2000. [7] Herbert Schildt. C++: a beginner's guide Beginner's Guides[M]. McGraw-Hill Professional, 2003. [8] Mark Lee. C++ Programming for the Absolute Beginner For the Absolute Beginner[M]. Course Technology, 2009. MIS参考文献 [9] Kenneth C. Laudon, Jane P. Laudon . Management Information Systems: Managing the Digital Firm[M]. Publisher Prentice Hall, 2007. [10] Raymond McLeod, George P. Schell. Management information systems[M]. Pearson/Prentice Hall, 2007. [11] James A. O'Brien, George M. Marakas. Management Information Systems[M]. McGraw-Hill/Irwin, 2008.

相关主题
文本预览
相关文档 最新文档