基于HTTP协议的断点续传应用系统开发毕业论文设计说明书40论文41.docx
- 文档编号:1135980
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:38
- 大小:439.94KB
基于HTTP协议的断点续传应用系统开发毕业论文设计说明书40论文41.docx
《基于HTTP协议的断点续传应用系统开发毕业论文设计说明书40论文41.docx》由会员分享,可在线阅读,更多相关《基于HTTP协议的断点续传应用系统开发毕业论文设计说明书40论文41.docx(38页珍藏版)》请在冰点文库上搜索。
基于HTTP协议的断点续传应用系统开发毕业论文设计说明书40论文41
(此文档为word格式,下载后您可任意编辑修改!
)
本科毕业设计说明书(论文)
题目:
基于HTTP协议的断点续传应用系统开发
毕业设计(论文)原创性声明和使用授权说明
原创性声明
本人郑重承诺:
所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:
日 期:
指导教师签名:
日 期:
使用授权说明
本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:
按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:
日 期:
基于HTTP协议的断点续传应用系统开发
摘要
文件的上传下载是计算机网络核心应用之一。
计算网络的发展围绕在怎样使得文件上传下载更快、更好、更安全。
当今的网络时代,下载软件是使用最频繁的软件之一,而网络的不稳定常常造成数据传输的不稳定,为了获得可靠、高效的数据传输,断点续传技术应运而生。
本系统开发基于HTTP协议,具有断点续传、多线程下载功能,这些功能的实现大大减少资源的浪费,节省用户下载的时间。
本系统的开发用到了多线程技术、网络编程、IO流技术和Swing用户界面编程,涉及到J2SE中一些基本技术,达到了综合运用所学过的Java知识的目的。
本文对系统的需求分析、关键技术和难点进行了的详细描述,同时又详细介绍本系统的设计与实现。
关键词:
断点续传,多线程,下载,problemthatiscausedbynetworkinstabilityisquiteunstable.Inordertoobtainreliableandefficientdatatransfer,TDCBPtechnologyturnsout.
BasedontheHttpprotocol,thesystemimplementstechnologyfordownloadingcontinuouslyfrombreakpoints(TDCBP).Itisalsodependentonmulti-threadsprogramming,whichgreatlyreducesresourcesandsavesdownloadingtime.Duringdevelopmentofsystem,itutilizesamulti-threading,networkprogramming,IOstreamingtechnology,andSwinglibraryforuserinterfaceprogramming.AndthenitreachesthepurposeofintegratedapplicationbasedonJava.
Thisarticlenotonlyanalyzestherequirementsofthissystemwithdetaileddescriptionsofthekeytechnologyanddificulties,butalsointroducesthesystemdesignindetailandimplementationofthissystem.
KeyWords:
tdcbp,multithreading,download,ProgrammingInterface,API)组成。
JavaAPI是一个大型的现成软件组件(类)集合,它可以简化applet和应用程序的开发和部署,包括健壮、安全且可互操作的企业应用程序。
它涵盖从基本对象到连网和安全性,再到XML生成和Web服务的所有东西。
JavaAPI组织成相关类和接口的库;库也称为包(package)。
除了JavaAPI之外,每个完整的Java平台实现还包含:
⏹用来编译、运行、监视、调试应用程序以及建立应用程序文档的开发工具。
⏹用来部署应用程序的标准机制。
⏹用来创建复杂的图形用户界面(GUI)的用户界面工具包。
⏹用来启用数据库访问和操作远程对象的集成库。
Java技术是最初由SunMicrosystems公司开发的。
JavaCommunityProcess(JCP,一个由全世界的Java开发人员和获得许可的人员组成的开放性组织)对Java技术规范、参考实现和技术兼容性包进行开发和修订。
在2006年8月,SunMicrosystems宣布它打算开放Java平台的源码,并开始征询对许可协议和管理方式的反馈[7]。
Java语言的主要好处是,Java应用程序可以跨硬件平台和操作系统进行移植——这是因为每个平台上安装的JVM都可以理解同样的字节码。
Java语言和平台的可伸缩性非常强。
在低端,现有的应用程序可以很容易地适应内存资源有限的设备。
这种语言是进行服务器端Web编程的理想框架。
因为它被设计为按照一种安全的方式通过网络运行,在通过互联网进行操作时,它提供了一定程度的安全性。
在本质上,Java技术将用户的计算能力从桌面扩展到了Web资源。
Web组件由称为Web容器(Webcontainer) 的运行时平台支持,Web容器的服务包括请求分派、安全性、并发性、生命周期管理以及对命名、事务和电子邮件等API的访问。
在高端,Java 应用服务器(applicationserver) 作为Java组件、XML和Web服务的Web容器,可以与数据库进行交互并提供动态的Web内容;它们还为企业应用程序提供应用程序开发环境,具有事务管理、安全性、集群、性能、可用性、连接性和可伸缩性等功能。
Java平台有三个版本,这使软件开发人员、服务提供商和设备生产商可以针对特定的市场进行开发:
(1)JavaSE(JavaPlatform,StandardEdition)。
JavaSE以前称为J2SE。
它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的Java应用程序。
JavaSE包含了支持JavaWeb服务开发的类,并为JavaPlatform,EnterpriseEdition(JavaEE)提供基础。
大多数Java开发人员使用JavaSE5,也称为Java5.0或“Tiger”(2006年6月,JavaSE6或“Mustang”发布了beta版。
)JavaEE(JavaPlatform,EnterpriseEdition)。
这个版本以前称为J2EE。
企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端Java应用程序。
JavaEE是在JavaSE的基础上构建的,它提供Web服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-orientedarchitecture,SOA)和Web2.0应用程序。
(2)JavaEE(JavaPlatform,EnterpriseEdition)。
这个版本以前称为J2EE。
企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端Java应用程序。
JavaEE是在JavaSE的基础上构建的,它提供Web服务、组件模型、管理和通信API,可以用来实现企业级的面向服务体系结构(service-orientedarchitecture,SOA)和Web2.0应用程序。
(3)JavaME(JavaPlatform,MicroEdition)。
这个版本以前称为J2ME。
JavaME为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。
JavaME包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。
基于JavaME规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能[8]。
本系统是基于JavaSE开发。
2.1Swing技术简介
Swing是一个用于开发Java应用程序用户界面的开发工具包。
它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。
Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。
Swing的体系结构如图2.2所示
图2.2Swing的体系结构
Swing的主要特性包括:
Swing是由100%纯Java实现的,Swing组件是用Java实现的轻量级(light-weight)组件,没有本地代码,不依赖操作系统的支持,这是它与AWT组件的最大区别。
由于AWT组件通过与具体平台相关的对等类(Peer)实现,因此,Swing比AWT组件具有更强的实用性。
Swing在不同的平台上表现一致,并且有能力提供本地窗口系统不支持的其他特性。
Swing采用了一种MVC的设计范式,即“模型-视图-控制器”(Model-View-Controller),其中,模型用来保存内容,视图用来显示内容,控制器用来控制用户输入。
Swing采用可插入的外观感觉(PluggableLookandFeel,PL&F)。
相对而言,在AWT组件中,由于控制组件外观的对等类与具体平台相关,使得AWT组件总是只有与本机相关的外观。
而Swing使得程序在一个平台上运行时能够有不同的外观,用户可以选择自己习惯的外观。
Swing是AWT的扩展,它提供了许多新的图形界面组件。
Swing组件以“J”开头,除了拥有与AWT类似的按钮(JButton)、标签(JLabel)、复选框(JCheckBox)、菜单(JMenu)等基本组件外,还增加了一个丰富的高层组件集合,如表格(JTable)、树(JTree)[9]。
如图2.3所示:
图2.3Swing组件
2.2.1Swing组件的简介
(1)MVC(Model-View-Controller)体系结构
前面我们提到,Swing胜过AWT的主要优势在于MVC体系结构的普遍使用。
在一个MVC用户界面中,存在3个通信对象:
模型、视图和控件。
模型是指定的逻辑表示法,视图是模型的可视化表示法,而控件则指定了如何处理用户输入。
当模型发生改变时,它会通知所有依赖它的视图,视图使用控件指定其相应机制。
为了简化组件的设计工作,在Swing组件中视图和控件两部分合为一体。
每个组件都有一个相关的分离模型和它使用的界面(包括视图和控件)。
比如,按钮JButton有一个存储其状态的分离模型ButtonModel对象。
组件的模型是自动设置的,例如,一般都使用JButton而不是使用ButtonModel对象。
另外,通过Model类的子类或通过实现适当的接口,可以为组件建立自己的模型。
用setModel()方法把数据模型与组件联系起来。
MVC是现有的编程语言中制作图形用户界面的一种通用思想,其思路是把数据的内容本身和显示方式分离开,这样就使得数据的显示更加灵活多样。
比如,某年级各个班级的学生人数是数据部分,而显示方式可以是多种多样的,既可以采用柱状图显示,也可以采用饼图显示,还可以采用直接的数据输出。
因此在设计时,考虑把数据和显示方式分开,对于实现多种多样的显示是非常有帮助的。
(2)可存取性支持
所有的Swing组件都实现了Accessible接口,提供对可存取性的支持,使得辅助功能如屏幕阅读器能够十分方便地从Swing组件中得到信息。
(3)支持键盘操作
在Swing组件中,使用JComponent类的registerKeyboardAction()方法,能使用户通过键盘操作来替代鼠标驱动GUI上Swing组件的相应动作。
有些类还为键盘操作提供了更便利的方法,其实这就相当于热键,使得用户可以只用键盘进行操作。
(4)设置边框
对Swing组件可以设置一个或多个边框。
Swing中提供了各式各样的边框供用户选用,也能建立组合边框或自己设计边框。
一种空白边框可以增大组件,同时协助布局管理器对容器中的组件进行合理的布局。
Hibernate的体系结构如图2.3所示。
图2.3Hibernate体系结构图
图2.3各对象的说明如下:
SessionFactory:
针对单个数据库映射关系经过编译后的内在镜像,是线程安全的,它是生成Session的工厂。
Session:
表示应用程序与持久存储层之间交互操作的一个单纯种对象,此对象生存期很短。
其隐藏了JDBC连接,也是Transaction的工厂。
持久对象及集合:
带有持久化状态的、具有业务功能的单线程对象,此对象生存期很短。
这些对象可能是普通的JavaBeansPOJO,唯一特殊的是他们正与(仅仅一个)Session相关联。
一旦这个Session被关闭,这些对象就会脱离持久化状态,这样就可被应用程序的任何层自由使用。
瞬态(transient)和脱管(detached)的对象及其集合:
那些目前没有与session关联的持久化类实例。
他们可能是在被应用程序实例化后,尚未进行持久化的对象,也可能是因为实例化他们的Session已经被关闭而脱离持久化的对象。
事务Transaction:
应用程序用来指定原子操作单元范围的对象,它是单线程了,生命周期很短。
Hibernate作为模型数据访问层。
它通过配置文件(2004上宣布成立一个独立的、非盈利性的基金会,由该基金会负责管理和指导Eclipse开发,目前其成员多达近百家知名公司,其中包括Borland、RationalSoftware、Red Hat、Sybase、Google和Oracle等业界巨头。
2.3.1Eclipse的体系结构
Eclipse平台体系结构主要由5部分组成,分别是平台运行库、工作区、工作台、团队支持和帮助。
图2.4为Eclipse体系结构图。
在运行时内核是整个架构的核心,其他部件都是以插件方式来实现的。
Eclipse采用动态加载机制,即只有需要的才加载,这样可以降低启动时间,提高资源使用效率[11]。
2.4为Eclipse体系结构图
工作空间插件即所谓的工作区,主要负责管理用户资源,例如用户创建项目的管理、文件变更等,并负责通知其他插件关于资源变更的信息。
工作台插件是Eclipse提供的用户界面。
它使用标准窗口工具包(SWT)和一个更高级的API(JFace)构建的。
SWT是Java的SwingAWT的非标准替代者,JFace则以SWT为基础,但更易于使用。
团队支持插件负责提供版本控制和配置管理支持。
它允许用户根据需要添加视图,并与允许用户使用的任何版本控制系统交互。
帮助插件允许以HTML文件形式添加文档,并提供了一个附加的导航结构以便用户使用帮助功能搜索相关信息[12]。
2.2HTTP协议的简介
下载文件是电脑与WEB服务器交互的过程,它们交互的“语言”的专业名称是协议。
传送文件的协议有多种,最常用的是HTTP(超文本传输协议)和FTP(文件传送协议),我采用的是HTTP。
HTTP是一个客户端和服务器端请求和应答的标准(TCP)。
客户端是终端用户,服务器端是网站。
通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。
(我们称这个客户端)叫用户代理(useragent)。
应答的服务器上存储着(一些)资源,比如HTML文件和图像。
(我们称)这个应答服务器为源服务器(originserver)。
在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnels)。
尽管TCPIP协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和(基于)它支持的层。
事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。
HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。
通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。
HTTP服务器则在那个端口监听客户端发送过来的请求。
一旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP1.1200OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息[13]。
HTTP使用TCP而不是UDP的原因在于(打开一个)一个网页必须传送很多数据,而TCP协议提供传输控制,按顺序组织数据,和错误纠正。
Spring的精简项目的代码量方面做出了非常出色的工作,将大量需要重复书写的代码提取出来,进行切面编程。
配置文件的灵活性也使项目的灵活性得到的加强,可以在不改变代码的情况下,而只有改变其中的配置文件实现整个系统的改变[14]。
HTTP协议最基本的命令有三条:
Get、Post和Head。
Get从WEB服务器请求一个特定的对象,比如HTML页面或者一个文件。
WEB服务器通过一个Socket连接发送此对象作为响应,Head命令使服务器给出此对象的基本描述,比如对象的类型,大小和更新时间。
Post命令用于向WEB服务器发送数据,通常使把信息发送给一个单独的应用程序。
2.3开发环境
操作系统:
WindowsXP、或Windows7视窗操作系统;
开发平台:
eclipse
硬件环境建议:
CPU为IntelP3800以上,至少256M内存,10M100M自适应以太网卡,网络应与Internet连通,带宽大于512K;
最佳浏览分辨率:
1024×768;
2.4本章小结
本章以系统开发的相关理论及技术为基础,介绍系统开发过程中需要了解和掌握的理论和技术。
着重介绍了JAVA、Swing技术、HTTP协议,同时明确了系统开发的总体原则。
第三章需求分析及关键技术和难点
3.1用户需求分析
随着Internet的发展,进入信息时代后快速获得网络共享资源成为很简单的事情,人们对互联网也有了很大的依赖性。
人们甚至希望只轻松点击鼠标就可以得到自己想要的东西。
比如,针对一些专业的论坛提供了很多相关资料以方便人们阅读或了解;还有更多的人希望能过下载到他们喜欢听得音乐、好看的图片、喜欢的电影等等。
也可以看出人们在上网时再也不单是打开浏览器来浏览网页,越来越多的人们开始使用下载软件来获取资源。
同时人们也更希望使用更新更快的下载软件。
由于用户下载需求的增大,也要求下载软件能够迅速完成对资源的下载。
多线程程序设计可以很好的解决程序并发的问题。
最恰当的比喻就是用户会感到CPU似乎同时出现在两个地方,在下载软件中应用多线程技术可以理解为将一个下载任务分成若干份来完成,其中的并发控制将使下载的效率大大提高。
由于下载资源是一个过程,当中用到的时间可能会很长。
那么在很长的这段时间中很有可能会出现很多的意外情况使下载中断或是停止,比如电源意外被切断、网络中断、或是操作系统故障导致系统重新启动。
这些原因都会导致下载的中断,但是当用户重新下载资源时发现原来下载的数据已经消失你还是要回头再来。
断点续传就是用来解决这样的问题的,它的任务是在下载任务停止时,记录当前下载的信息并且利用网络协议中的一些重定向机制继续完成下载任务而不必从头再来。
随着使用下载工具的时间的增长,用户下载的资源越来越多,因此在下载列表中的项目也越来越多,越来越混乱,因此为了便于管理和用户使用方便,用户迫切希望下载工具具有下载文件分类的功能。
在下载任务的管理这一块,用户不仅希望下载工具具有下载一个一个资源的功能,而且具有批量下载有些相似的或有关联的资源的功能。
还有些特殊情况下,用户在下载任务开始后由于种种原因希望放弃资源的下载,这就要求下载工具具有删除任务的功能了。
为了对下载任务进行掌控,用户往往具有设置下载任务的线程数,文件下载网址,文件下载存储目录和在下载过程中对下载任务的状态进行监控等功能需求[15]。
鉴于某些软件使用初学者甚至某些电脑初学者的实际情况,他们往往需要系统有一个格外的帮助文档,使他们能够更快、更好地学会使用断点续传下载软件,提高效率。
3.2系统功能需求分析
本节对系统下载任务实体类的功能、系统工具类的功能、线程下载类的功能分析、下载任务总线程控制类的功能、用户界面类的功能等五个功能模块进行需求分析。
3.2.1下载任务实体类的基本功能分析
对于该系统来说,就是技术断点续传的多线程下载工具,下载任务的所有信息应该被定义在一个实体类中。
在下载之前,首先要知道下载任务对应的URL地址,换句通俗的话来说,就是要知道从哪里来下载文件;其次需要知道下载任务对应文件的大小,文件的大小以字节数来衡量;然后需要知道下载任务要使用几个线程,这样才能根据文件总的大小来计算出每个线程要下载的那一小段的大小;最后还需要知道下载完的文件存放的目录和存放的文件名。
此外为了支持断点续传功能,在下载任务实体类中还需要定义上次文件下载长度和当前文件已下载长度。
如下图3.1所示:
图3.1下载任务实体类中定义的属性
3.2.2系统工具类的基本功能分析
系统工具类主要负责定义测试连接URL是否有效的方法以及获取要下载的资源文件名称、长度和MIME信息的方法。
其功能定义如下图3.2所示:
图3.2系统工具类的功能
3.2.3线程下载类的基本功能分析
线程下载类负责定义每个线程具体下载的实现细节,该类本身应该是一个线程类,该类定线程的基本信息如线程id号,文件下载的开始点和结束点等。
在其中通过循环根据文件块的起始和结束位置执行文件块的下载。
其功能定义如下图3.3所示:
图3.3系统工具类的功能
3.2.4下载任务总线程控制类的基本功能分析
下载任务总线程控制类是整个程序运行的核心,其中并没有过多的逻辑定义,而是对线程类进行控制,分割文件进行下载。
其功能定义如图3.4所示:
图3.4多线程调度类的功能
3.2.5用户界面类的基本功能分析
对于一个好的应用程序来说,友好用户界面是必不可少的。
体系统的用户界面由多个类组成,包括下载文件属性面板类、添加下载任务对话框、按钮工具条类等。
其功能如图3.5:
图3.5用户界面功能
3.3系统流程及模块划分
根据上面的需求分析,可以将系统分为以下几个模块。
⏹下载任务定义模块:
负责定义要下载的任务所需要的各种详细的信息。
⏹线程下载模块:
负责定义每个线程下载的具体实现过程。
⏹线程控制模块:
负责协调控制多个线程共同完成下载任务。
⏹用户界面模块:
负责定义可视化的用户界面。
整个系统的执行流程如图3.6所示:
否
下载
是
图3.6多线程下载工具执行流程图
3.4关键技术和难点
3.4.1Java多线程技术
多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都被称为一个线程,线程间互相独立。
线程又称为轻量级进程,它和进程一样拥有独立的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 HTTP 协议 断点续传 应用 系统 开发 毕业论文 设计 说明书 40 论文 41