基于HTTP协议的断点续传应用系统开发毕业设计说明书(论文)

上传人:1888****888 文档编号:39595940 上传时间:2021-11-11 格式:DOC 页数:51 大小:851.50KB
返回 下载 相关 举报
基于HTTP协议的断点续传应用系统开发毕业设计说明书(论文)_第1页
第1页 / 共51页
基于HTTP协议的断点续传应用系统开发毕业设计说明书(论文)_第2页
第2页 / 共51页
基于HTTP协议的断点续传应用系统开发毕业设计说明书(论文)_第3页
第3页 / 共51页
点击查看更多>>
资源描述
本科毕业设计说明书(论文)本科毕业设计说明书(论文)题目:基于 HTTP 协议的断点续传应用系统开发 浙江工业大学本科毕业设计说明书(论文)1毕业设计(论文)原创性声明和使用授权说明毕业设计(论文)原创性声明和使用授权说明原创性声明原创性声明本人郑重承诺:所呈交的毕业设计(论文) ,是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作 者 签 名: 日 期: 指导教师签名: 日期: 使用授权说明使用授权说明本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名: 日 期: 浙江工业大学本科毕业设计说明书(论文)2基于基于 HTTP 协议的断点续传应用系统开发协议的断点续传应用系统开发摘摘 要要文件的上传下载是计算机网络核心应用之一。计算网络的发展围绕在怎样使得文件上传下载更快、更好、更安全。当今的网络时代,下载软件是使用最频繁的软件之一,而网络的不稳定常常造成数据传输的不稳定,为了获得可靠、高效的数据传输,断点续传技术应运而生。本系统开发基于 HTTP 协议,具有断点续传、多线程下载功能,这些功能的实现大大减少资源的浪费,节省用户下载的时间。本系统的开发用到了多线程技术、网络编程、I/O 流技术和 Swing 用户界面编程,涉及到 J2SE 中一些基本技术,达到了综合运用所学过的 Java 知识的目的。本文对系统的需求分析、关键技术和难点进行了的详细描述,同时又详细介绍本系统的设计与实现。关键词关键词:断点续传,多线程,下载,http浙江工业大学本科毕业设计说明书(论文)3 THE DEVELOPMENT OF TECHNOLOGY FOR DOWNLOADING CONTINUOUSLY FROM BREAK POINTS SYSTEM BASED ON HTTP PROTOCOL ABSTRACT To upload and download files is one of core applications of computer network. Development of network computing is how to make file upload and download faster, better, more secured. At present, the softwares for downloading files are used frequently. Data transmission problem that is caused by network instability is quite unstable. In order to obtain reliable and efficient data transfer, TDCBP technology turns out.Based on the Http protocol, the system implements technology for downloading continuously from break points (TDCBP). It is also dependent on multi-threads programming, which greatly reduces resources and saves downloading time. During development of system, it utilizes a multi-threading, network programming, I/O streaming technology, and Swing library for user interface programming. And then it reaches the purpose of integrated application based on Java.This article not only analyzes the requirements of this system with 浙江工业大学本科毕业设计说明书(论文)4detailed descriptions of the key technology and dificulties, but also introduces the system design in detail and implementation of this system.Key Words: tdcbp, multithreading, download, http浙江工业大学本科毕业设计说明书(论文)目 录摘摘 要要.1 1ABSTRACT.2 2第一章第一章 绪论绪论.1 11.1研究的背景.11.2研究的意义.11.3研究的目标.21.4可行性分析.21.4.1技术可行性.21.4.2操作可行性.31.5论文内容概述.3第二章第二章 相关理论与技术相关理论与技术.4 42.1JAVA 的简介.42.2Swing 技术简介.62.2.1Swing 组件的简介.82.3Eclipse 的简介.102.3.1Eclipse 的起源和发展.102.3.2Eclipse 的体系结构.102.4HTTP 协议的简介.112.5开发环境.122.6本章小结.12第三章第三章 需求分析及关键技术和难点需求分析及关键技术和难点.13133.1用户需求分析.133.2系统功能需求分析.143.2.1下载任务实体类的基本功能分析.143.2.2系统工具类的基本功能分析.153.2.3线程下载类的基本功能分析.153.2.4下载任务总线程控制类的基本功能分析.153.2.5用户界面类的基本功能分析.163.3系统流程及模块划分.163.4关键技术和难点.173.4.1Java 多线程技术 .173.4.2Java I/O 流技术.183.5本章小结.20第四章第四章 系统详细设计与实现系统详细设计与实现.21214.1系统基本流程.21浙江工业大学本科毕业设计说明书(论文)4.2系统功能模块设计.224.2.1系统下载功能的实现.224.2.2断点续传功能的设计与实现.264.2.3多线程的设计与实现.284.2.4文件序列化保存下载信息.304.2.5系统界面设计.314.3本章小结.33第五章第五章 系统运行测试系统运行测试.34345.1系统测试.345.1.1数据正确性测试.345.1.2系统功能测试.355.2本章小结.38第六章第六章 总结总结.3939参考文献参考文献.4040致谢致谢.4242附录附录.4343附录 1 毕业设计文献综述.43附录 2 毕业设计开题报告.43附录 3 毕业设计外文翻译(中文译文与外文原文).43浙江工业大学本科毕业设计说明书(论文)1第一章第一章 绪论绪论1.1 研究的背景文件的上传下载是计算机网络核心应用之一。计算网络的发展围绕在怎样使得文件上传下载更快,更好,更安全的核心周围1。当今的网络时代,下载软件是使用最频繁的软件之一。这些年来,下载技术一直在发展,最原始的下载功能仅仅是个“下载”过程,即从 WEB 服务器上连续地读取文件。其最大的问题是,由于网络的不稳定性或者异常的操作,一旦连接断开使得下载过程中断,就不得不全部从头再来一次。随后, “断点续传”的概念就出来了。 “断点续传” ,顾名思义就是如果下载中断,在重新建立连接后,跳过已经下载的部分,而只下载没有下载的部分。这样可以大大减少资源的浪费,节省下载的时间2。自从“多线程下载”技术发明以来,这项技术得到前所未有的关注已是不争的事实。在“网络蚂蚁”软件流行开后,许多下载软件也都纷纷效仿,是否具有“多线程下载”技术、甚至能支持多少个下载线程都成了人们评测下载软件的要素。 “多线程下载”的基础是 WEB 服务器支持远程的随机读取,也即支持“断点续传” 。这样,在下载时可以把文件分成若干部分,每一部分创建一个下载线程进行下载3。JAVA 又是一种适用于平滑移植、安全、健壮和可扩展等跨平台开发语言,能开发出跨平台的应用对象和应用程序,所以本系统的实现后可以在多个操作系统平台上运行,如 WINDOWS、Linux 等,甚至是在非 PC 上,比如手机或 PDA 上该设计采用 JAVA 多线程与线程安全机制,在一定程度上能提高下载的速度和安全性4。1.2 研究的意义多线程和传统的单线程在程序设计上最大的区别是各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行,由此带来的线程调度问题。多线程进行断点续传,还要记录多个断点位置,且记录断点位置时也要考虑同步互斥等问题,这些浙江工业大学本科毕业设计说明书(论文)2都使得设计开发变得更复杂,但是可以明显提高网络文件的下载速度6。现在,不要说编写专门的下载软件,在自己编写的软件中,加入下载功能有时也非常必要。1.3 研究的目标开发基于 HTTP 协议的断点续传应用系统,其目标是为了方便用户,提供给用户便捷的下载方式,更快的下载速度。本系统充分利用了网络上的多余带宽,采用“断点续传”技术,能在上次中止部位继续下载,有效避免了重复劳动,大大节省了下载者的连线下载时间。1.4 可行性分析可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。要达到这个目的,必须分析几种主要的可能解法的利弊,从而判断原定的系统规模和目标是否现实,系统完成后所能带来的效益是否大到值得投资开发这个系统的程度。因此,可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统分析和设计的过程。系统的可行性分析主要包括技术上的可行性和操作上的可行性。本系统的可行性分析如下:1.4.1 技术可行性下载程序功能模块的实现主要利用了面向对象的 Java 高级编程语言。使用 Java作为开发工具主要是因为 Java 是目前比较流行而且非常成功的编程语言。多线程编程技术是 Java 语言的重要特点。多线程编程的含义是将程序任务分成几个并行的子任务。特别是在网络编程中,有很多功能是可以并发执行的。 Java 中实现多线程的类有两种方法:1.扩展 java.lang.Thread 类,用它覆盖 Thread 类的 run 方法。2.生成实现 java.lang.Runnable 接口的类并将其它的实例与 java.lang.Thread 实例相关联。Thread 类是负责向其它类提供线程支持的最主要的类,要使用一个类具有线程功能,在 Java 中只要简单地从 Thread 类派生一个子类就可以了。扩展 Thread 类,如printThread.java。由于同一进程的多个线程共享同一片存储空间,在带来方便的同浙江工业大学本科毕业设计说明书(论文)3时,也带来了访问冲突这个严重的问题。Java 语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。由于我们可以通过 private 关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是 synchronized 关键字,它包括两种用法:synchronized 方法和 synchronized 块。本系统使用 Eclipse 的 SWING 图形界面技术进行开发。系统的可行性分析主要包括技术上的可行性和操作上的可行性。1.4.2操作可行性下载程序的具备友好的用户界面,而且操作简单易于被用户接收,使用此下载程序十分方便,因为软件的操作思路比较清晰,而且用户实际操作的内容较少,所以用户只需要熟练操作计算机即可。因此从使用操作方面看,此系统得开发是可行的。1.5 论文内容概述各章节的主要内容如下: 第一章是绪论,讨论课题的研究背景、意义和研究目标,及可行性分析,包括技术可行性,操作可行性。第二章是软件开发工具和技术介绍,主要介绍了毕业设计中用到的技术及开发工具。第三章是需求分析,介绍系统业务流程概况,主要阐述了在线作业系统功能模块的需求用例。第四章是概要设计和详细设计,描述了数据库设计方案,以及各功能模块的技术实现方案。 第五章是系统实现,这一章主要讲了开发环境及配置,并通过两个典型例子介绍了该系统的技术实现架构,阐述技术关键及解决方法和经验总结。第六章是结束语。浙江工业大学本科毕业设计说明书(论文)4第二章第二章 相关理论与技术相关理论与技术本系统用 JAVA 技术开发,开发工具是 eclipse,涉及到 JAVA 多线程、swing、HTTP 等相关技术,本章将对上述技术进行简要的阐述。2.1 JAVA 的简介Java 技术既是一种高级的面向对象的编程语言,也是一个平台。Java 技术基于 Java 虚拟机(Java virtual machine,JVM)的概念 这是语言与底层软件和硬件之间的一种转换器。Java 语言的所有实现都必须实现 JVM,从而使 Java 程序可以在有 JVM 的任何系统上运行6。Java 编程语言(Java programming language)与众不同之处在于:Java 程序既是编译型的(compiled) (转换为一种称为 Java 字节码的中间语言) ,又是解释型的(interpreted) (JVM 对字节码进行解析和运行) 。编译只进行一次,而解释在每次运行程序时都会进行。编译后的字节码采用一种针对 JVM 优化过的机器码形式;解释器是 JVM 的实现。Java 平台(Java platform) 是一种纯软件平台,它可以在各种基于硬件的平台上运行。它有三个版本(参见后面的 Java 平台的多个版本) 。它由 JVM 和 Java 应用程序编程接口(Java Application Programming Interface,API)组成。Java API 是一个大型的现成软件组件(类)集合,它可以简化 applet 和应用程序的开发和部署,包括健壮、安全且可互操作的企业应用程序。它涵盖从基本对象到连网和安全性,再到 XML 生成和 Web 服务的所有东西。Java API 组织成相关类和接口的库;库也称为包(package) 。除了 Java API 之外,每个完整的 Java 平台实现还包含:用来编译、运行、监视、调试应用程序以及建立应用程序文档的开发工具。用来部署应用程序的标准机制。用来创建复杂的图形用户界面(GUI)的用户界面工具包。用来启用数据库访问和操作远程对象的集成库。浙江工业大学本科毕业设计说明书(论文)5Java 技术是最初由 Sun Microsystems 公司开发的。Java Community Process(JCP,一个由全世界的 Java 开发人员和获得许可的人员组成的开放性组织)对 Java 技术规范、参考实现和技术兼容性包进行开发和修订。在 2006 年 8 月,Sun Microsystems 宣布它打算开放 Java 平台的源码,并开始征询对许可协议和管理方式的反馈7。Java 语言的主要好处是,Java 应用程序可以跨硬件平台和操作系统进行移植 这是因为每个平台上安装的 JVM 都可以理解同样的字节码。Java 语言和平台的可伸缩性非常强。在低端,现有的应用程序可以很容易地适应内存资源有限的设备。这种语言是进行服务器端 Web 编程的理想框架。因为它被设计为按照一种安全的方式通过网络运行,在通过互联网进行操作时,它提供了一定程度的安全性。在本质上,Java 技术将用户的计算能力从桌面扩展到了 Web 资源。Web 组件由称为 Web 容器(Web container) 的运行时平台支持,Web 容器的服务包括请求分派、安全性、并发性、生命周期管理以及对命名、事务和电子邮件等 API 的访问。在高端,Java 应用服务器(application server) 作为 Java 组件、XML 和 Web 服务的 Web 容器,可以与数据库进行交互并提供动态的 Web 内容;它们还为企业应用程序提供应用程序开发环境,具有事务管理、安全性、集群、性能、可用性、连接性和可伸缩性等功能。Java 平台有三个版本,这使软件开发人员、服务提供商和设备生产商可以针对特定的市场进行开发:(1) Java SE(Java Platform,Standard Edition) 。Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java Platform,Enterprise Edition(Java EE)提供基础。大多数 Java 开发人员使用 Java SE 5,也称为 Java 5.0 或 “Tiger”(2006 年 6 月,Java SE 6 或 “Mustang” 发布了 beta 版。 )Java EE(Java Platform,Enterprise Edition) 。这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0 应用程序。浙江工业大学本科毕业设计说明书(论文)6(2) Java EE(Java Platform,Enterprise Edition) 。这个版本以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0 应用程序。(3)Java ME(Java Platform,Micro Edition) 。这个版本以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能8。本系统是基于 Java SE 开发。2.2 Swing 技术简介Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。 Swing的体系结构如图2.2所示图2.2 Swing的体系结构Swing 的主要特性包括:Swing 是由 100%纯 Java 实现的,Swing 组件是用 Java 实现的轻量级(light-weight)组件,没有本地代码,不依赖操作系统的支持,这是它与 AWT 组件的最大区别。由于 AWT 组件通过与具体平台相关的对等类(Peer)实现,因此,Swing 比浙江工业大学本科毕业设计说明书(论文)7AWT 组件具有更强的实用性。Swing 在不同的平台上表现一致,并且有能力提供本地窗口系统不支持的其他特性。Swing 采用了一种 MVC 的设计范式,即“模型-视图-控制器”(Model-View-Controller) ,其中,模型用来保存内容,视图用来显示内容,控制器用来控制用户输入。Swing 采用可插入的外观感觉(Pluggable Look and Feel,PL&F) 。相对而言,在 AWT 组件中,由于控制组件外观的对等类与具体平台相关,使得 AWT 组件总是只有与本机相关的外观。而 Swing 使得程序在一个平台上运行时能够有不同的外观,用户可以选择自己习惯的外观。Swing是AWT的扩展,它提供了许多新的图形界面组件。Swing组件以“J”开头,除了拥有与AWT类似的按钮(JButton)、标签(JLabel)、复选框(JCheckBox)、菜单(JMenu)等基本组件外,还增加了一个丰富的高层组件集合,如表格(JTable) 、树(JTree)9。如图2.3所示:JComponentAbstractButtonJComboBoxJLabelJListJMenuBarJPanelJPonpupMenuJScrollBarJScroIIPaneJTextComponentJButtonJMenuItemJToggleButtonJCheckBoxMenuItemJMenuJRadioButtonMenuItemJCheckBoxJradioButtonJEditorPaneJTextAreaJTextFieldJTextPaneJPasswordField图 2.3 Swing 组件浙江工业大学本科毕业设计说明书(论文)82.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 所示。浙江工业大学本科毕业设计说明书(论文)9ApplicationDatabaseSessionFactoryTransactionFactoryConnectionProviderSessionTransactionJNDIJDBCJTATransaction ObjectsPersistent Objects图2.3 Hibernate体系结构图图2.3各对象的说明如下:SessionFactory:针对单个数据库映射关系经过编译后的内在镜像,是线程安全的,它是生成Session的工厂。Session:表示应用程序与持久存储层之间交互操作的一个单纯种对象,此对象生存期很短。其隐藏了JDBC连接,也是Transaction的工厂。持久对象及集合:带有持久化状态的、具有业务功能的单线程对象,此对象生存期很短。这些对象可能是普通的JavaBeans/POJO,唯一特殊的是他们正与(仅仅一个)Session相关联。一旦这个Session被关闭,这些对象就会脱离持久化状态,这样就可被应用程序的任何层自由使用。瞬态(transient)和脱管(detached)的对象及其集合:那些目前没有与session关联的持久化类实例。他们可能是在被应用程序实例化后,尚未进行持久化的对象,也可能是因为实例化他们的Session已经被关闭而脱离持久化的对象。事务Transaction:应用程序用来指定原子操作单元范围的对象,它是单线程了,生命周期很短。Hibernate作为模型/数据访问层。它通过配置文件(hiberante.cfg.xml或hibernate.properties和映射文件(*.hbm.xml)把java对象或持久化对象(Persistent Obeject,PO)映射到数据库中的数据表,然后通过操作PO,对数据库中的表进行各种操作。浙江工业大学本科毕业设计说明书(论文)102.3Eclipse 的简介目前Eclipse在系统开发领域中受到空前关注,国内外许多软件公司纷纷开始采用Eclipse作为开发平台。Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)10。2.3.1 Eclipse 的起源和发展Eclipse的前身是IBM的Visual Age。由于意识到Visual Age存在难以扩展、底层技术较为脆弱、很难与WebSphere Studio软件集成等诸多问题,进一步发展甚为困难,同时也面临包括Symantec公司的Visual Caf、Borland公司的JBuilder 等开发工具的竞争压力,IBM决定创建一个更开放的,并且可以为IBM其他开发工具提供支持的一体化开发平台。1998年11月,IBM专门成立了一个项目开发小组,开始开发该平台,2000年新一代开发平台诞生,这就是大家所熟悉的Eclipse。2000年11月,IBM做出了一个重大决定,将Eclipse采用开放源码的授权和运作模式发布,以增强业界对Eclipse的关注度并加快其推广应用速度。随后,IBM于2001年12月向外界宣布,捐赠价值4千万美元的Eclipse源码给开源社区;成立由成员公司组成的Eclipse协会(Eclipse Consortium) ,以便支持并促进Eclipse开源项目。事实证明,IBM的决策非常英明。Eclipse受到广泛关注,蜂拥而至的用户使得其下载服务器一度阻塞,给业界带来了久违的震撼!IBM趁热打铁,在EclipseCon 2004上宣布成立一个独立的、非盈利性的基金会,由该基金会负责管理和指导Eclipse开发,目前其成员多达近百家知名公司,其中包括Borland、Rational Software、Red Hat、Sybase、Google和Oracle等业界巨头。2.3.2 Eclipse 的体系结构Eclipse 平台体系结构主要由 5 部分组成,分别是平台运行库、工作区、工作台、团队支持和帮助。图 2.4 为 Eclipse 体系结构图。在运行时内核是整个架构的核心,浙江工业大学本科毕业设计说明书(论文)11其他部件都是以插件方式来实现的。Eclipse 采用动态加载机制,即只有需要的才加载,这样可以降低启动时间,提高资源使用效率11。2.4 为 Eclipse 体系结构图工作空间插件即所谓的工作区,主要负责管理用户资源,例如用户创建项目的管理、文件变更等,并负责通知其他插件关于资源变更的信息。工作台插件是Eclipse 提供的用户界面。它使用标准窗口工具包(SWT)和一个更高级的API(JFace)构建的。SWT 是 Java 的 Swing/AWT 的非标准替代者,JFace 则以SWT 为基础,但更易于使用。团队支持插件负责提供版本控制和配置管理支持。它允许用户根据需要添加视图,并与允许用户使用的任何版本控制系统交互。帮助插件允许以 HTML 文件形式添加文档,并提供了一个附加的导航结构以便用户使用帮助功能搜索相关信息12。2.4 HTTP 协议的简介下载文件是电脑与 WEB 服务器交互的过程,它们交互的“语言”的专业名称是协议。传送文件的协议有多种,最常用的是 HTTP(超文本传输协议)和 FTP(文件传送协议) ,我采用的是 HTTP。HTTP 是一个客户端和服务器端请求和应答的标准(TCP) 。客户端是终端用户,服务器端是网站。通过使用 Web 浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为 80)的 HTTP 请求。 (我们称这个客户端)叫用户代理(user agent) 。应答的服务器上存储着(一些)资源,比如 HTML 文件和图像。 (我们称)这个应答服务器为源服务器(origin server) 。在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnels) 。尽管 TCP/IP浙江工业大学本科毕业设计说明书(论文)12协议是互联网上最流行的应用,HTTP 协议并没有规定必须使用它和(基于)它支持的层。 事实上,HTTP 可以在任何其他互联网协议上,或者在其他网络上实现。HTTP 只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。通常,由 HTTP 客户端发起一个请求,建立一个到服务器指定端口(默认是 80 端口)的 TCP 连接。HTTP 服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如HTTP/1.1 200 OK,和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息13。HTTP 使用 TCP 而不是 UDP 的原因在于(打开一个)一个网页必须传送很多数据,而 TCP 协议提供传输控制,按顺序组织数据,和错误纠正。Spring 的精简项目的代码量方面做出了非常出色的工作,将大量需要重复书写的代码提取出来,进行切面编程。配置文件的灵活性也使项目的灵活性得到的加强,可以在不改变代码的情况下,而只有改变其中的配置文件实现整个系统的改变14。HTTP 协议最基本的命令有三条:Get、Post 和 Head。Get 从 WEB 服务器请求一个特定的对象,比如 HTML 页面或者一个文件。WEB 服务器通过一个 Socket 连接发送此对象作为响应,Head 命令使服务器给出此对象的基本描述,比如对象的类型,大小和更新时间。Post 命令用于向 WEB 服务器发送数据,通常使把信息发送给一个单独的应用程序。2.5 开发环境操作系统: Windows XP、或 Windows 7 视窗操作系统;开发平台:eclipse硬件环境建议:CPU 为 Intel P3 800 以上,至少 256M 内存,10M/100M 自适应以太网卡,网络应与 Internet 连通,带宽大于 512K; 最佳浏览分辨率:1024768;2.6 本章小结本章以系统开发的相关理论及技术为基础,介绍系统开发过程中需要了解和掌浙江工业大学本科毕业设计说明书(论文)13握的理论和技术。着重介绍了JAVA、Swing技术、HTTP协议,同时明确了系统开发的总体原则。浙江工业大学本科毕业设计说明书(论文)14第三章第三章 需求分析及关键技术和难点需求分析及关键技术和难点3.1用户需求分析随着Internet的发展,进入信息时代后快速获得网络共享资源成为很简单的事情,人们对互联网也有了很大的依赖性。人们甚至希望只轻松点击鼠标就可以得到自己想要的东西。比如,针对一些专业的论坛提供了很多相关资料以方便人们阅读或了解;还有更多的人希望能过下载到他们喜欢听得音乐、好看的图片、喜欢的电影等等。也可以看出人们在上网时再也不单是打开浏览器来浏览网页,越来越多的人们开始使用下载软件来获取资源。同时人们也更希望使用更新更快的下载软件。 由于用户下载需求的增大,也要求下载软件能够迅速完成对资源的下载。多线程程序设计可以很好的解决程序并发的问题。最恰当的比喻就是用户会感到CPU似乎同时出现在两个地方,在下载软件中应用多线程技术可以理解为将一个下载任务分成若干份来完成,其中的并发控制将使下载的效率大大提高。 由于下载资源是一个过程,当中用到的时间可能会很长。那么在很长的这段时间中很有可能会出现很多的意外情况使下载中断或是停止,比如电源意外被切断、网络中断、或是操作系统故障导致系统重新启动。这些原因都会导致下载的中断,但是当用户重新下载资源时发现原来下载的数据已经消失你还是要回头再来。断点续传就是用来解决这样的问题的,它的任务是在下载任务停止时,记录当前下载的信息并且利用网络协议中的一些重定向机制继续完成下载任务而不必从头再来。 随着使用下载工具的时间的增长,用户下载的资源越来越多,因此在下载列表中的项目也越来越多,越来越混乱,因此为了便于管理和用户使用方便,用户迫切希望下载工具具有下载文件分类的功能。 在下载任务的管理这一块,用户不仅希望下载工具具有下载一个一个资源的功能,而且具有批量下载有些相似的或有关联的资源的功能。还有些特殊情况下,用户在下载任务开始后由于种种原因希望放弃资源的下载,这就要求下载工具具有删除任务的功能了。 为了对下载任务进行掌控,用户往往具有设置下载任务的线程数,文浙江工业大学本科毕业设计说明书(论文)15件下载网址,文件下载存储目录和在下载过程中对下载任务的状态进行监控等功能需求15。 鉴于某些软件使用初学者甚至某些电脑初学者的实际情况,他们往往需要系统有一个格外的帮助文档,使他们能够更快、更好地学会使用断点续传下载软件,提高效率。3.2系统功能需求分析本节对系统下载任务实体类的功能、系统工具类的功能、线程下载类的功能分析、下载任务总线程控制类的功能、用户界面类的功能等五个功能模块进行需求分析。3.2.1下载任务实体类的基本功能分析对于该系统来说,就是技术断点续传的多线程下载工具,下载任务的所有信息应该被定义在一个实体类中。在下载之前,首先要知道下载任务对应的 URL 地址,换句通俗的话来说,就是要知道从哪里来下载文件;其次需要知道下载任务对应文件的大小,文件的大小以字节数来衡量;然后需要知道下载任务要使用几个线程,这样才能根据文件总的大小来计算出每个线程要下载的那一小段的大小;最后还需要知道下载完的文件存放的目录和存放的文件名。此外为了支持断点续传功能,在下载任务实体类中还需要定义上次文件下载长度和当前文件已下载长度。如下图3.1 所示:图 3.1 下载任务实体类中定义的属性上次文件下载长度下载任务的 URL下载文件的大小下载文件存放目录当前文件已下载长度下载任务实体类浙江工业大学本科毕业设计说明书(论文)163.2.2系统工具类的基本功能分析系统工具类主要负责定义测试连接 URL 是否有效的方法以及获取要下载的资源文件名称、长度和 MIME 信息的方法。其功能定义如下图 3.2 所示:图 3.2 系统工具类的功能3.2.3线程下载类的基本功能分析线程下载类负责定义每个线程具体下载的实现细节,该类本身应该是一个线程类,该类定线程的基本信息如线程 id 号,文件下载的开始点和结束点等。在其中通过循环根据文件块的起始和结束位置执行文件块的下载。其功能定义如下图 3.3 所示:图 3.3 系统工具类的功能3.2.4下载任务总线程控制类的基本功能分析下载任务总线程控制类是整个程序运行的核心,其中并没有过多的逻辑定义,而是对线程类进行控制,分割文件进行下载。其功能定义如图 3.4 所示:系统工具类测试连接 URL 是否有效获取下载源文件信息线程下载类循环执行下载文件块浙江工业大学本科毕业设计说明书(论文)17 图 3.4 多线程调度类的功能3.2.5用户界面类的基本功能分析对于一个好的应用程序来说,友好用户界面是必不可少的。体系统的用户界面由多个类组成,包括下载文件属性面板类、添加下载任务对话框、按钮工具条类等。其功能如图 3.5:图 3.5 用户界面功能3.3系统流程及模块划分 根据上面的需求分析,可以将系统分为以下几个模块。下载任务定义模块:负责定义要下载的任务所需要的各种详细的信息。线程下载模块:负责定义每个线程下载的具体实现过程。总线程控制类获取线程数、所有线程开始点结束点分割文件并下载计算下载的大小对线程开始关闭控制关闭文件输出流下载文件属性面板类应用程序主窗口类添加下载任务对话框类主窗口中按钮工具条类界面类浙江工业大学本科毕业设计说明书(论文)18线程控制模块:负责协调控制多个线程共同完成下载任务。用户界面模块:负责定义可视化的用户界面。 整个系统的执行流程如图 3.6 所示: 否下载 是 图 3.6 多线程下载工具执行流程图3.4关键技术和难点3.4.1Java 多线程技术多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都被称为一个线程,线程间互相独立。线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立存储空间,而是和所属进程中的其他线程共享一个存储空间,这使得线程间的通信远较进程简单16。多个线程的执行是并发的,也是在逻辑上“同时” ,而不管是否是物理上的“同时” 。如果系统只有一个 CPU,那么真正的“同时”是不可能的,但是由于 CPU 的速度非常快,用户感觉不到其中的区别,因此我们只需要设想各个线程是同时执行即可。在 Java 中提供了类 java.lang.Thread 来进行多线程编程。在基于 Java 的应用程序中可以通过以下两种方法创建线程对象。(1) 声明一个 Thead 类的子类,并覆盖其 run( )方法。示例代码如下:class mythread extends thread 用户调度多线程下载全部线程运行结束结束合并临时文件生成下载文件浙江工业大学本科毕业设计说明书(论文)19 public void run /* 覆盖方法 */ (2) 声明一个实现 Runnable 接口的类,并实现 run( )方法。示例代码如下: class mythread implements runnable public void run /* 实现该方法 */ Thread 类中提供了大量的方法来控制线程的执行过程。要触发一个新线程,需要调用 start( )方法。示例代码如下: mythread t = new mytherad( ); t.start( );在调用 start( )方法时,将创建一个新的控制线程,新线程进入可运行状态,它将向线程调度器注册这个线程。接着它将调用 run( )方法。每个线程都是通过某个特定 Thread 对象所对应的 run( )方法来完成其操作,因为 run( )方法中的代码定义执行线程所需要的功能,所以 run( )方法被称为线程体。每个线程都是通过某个特定 Thread 对象所对应的 run( )方法来完成其操作的,因为run( )方法中的代码定义执行线程所需的功能,所以 run( )方法被称为线程体17。3.4.2Java I/O 流技术为了进行数据的输入/输出操作,Java 中把不同的输入/输出源抽象表述为“流”(stream) 。Java.io 包中定义了多个流类型来实现输入/输出功能。按照流的方向划分,可以分为输入流和输出流。输入流:只能从中读取字节数据,而不能向其写入数据。输出流:只能向其写入字节数据,而不能从中读取数据。 按照流所处理的数据类型划分,可以分为字节流和字符流。节点流:可以从(向)一个特定的 I/O 设备读(写)数据的流,节点流也被 称为低级流。浙江工业大学本科毕业设计说明书(论文)20处理流:用来实现对一个已存在的流的连接和封装,是通过所封装的流的功能调用实现数据读/写操作的流,处理流也被称为高级流。Java.io 包支持两种类型的流,包括二进制数据的字节流和包括字符数据的字符流。在读/写数据时,这两种流以不同方式工作18。当向字节流写数据时,数据以字节序列的形式写入流,与它在内存中的形式一样,数据不发生任何转换。二进制数值只能被写为字节序列,4 个字节构成一个 int 型值,8 个字节构成一个 long 型值等。Java 其内部将字节符存储为 16 位的 Unicode 码字符,因此每个 Unicode 码字符可以写成 2 个字节的二进制流,先写高 8 位。字符流用于存储和检索文本,而且可以使用它读取由非 Java 程序生成的文本文件。所有二进制数据在写向字符流之前必须转换为字符流能够接受的表达形式。该形式由原始二进制数据值转换成的字符组成。因此,从包含文本的字符流中读取数据比直接读取二进制数据涉及更多的工作19。在本系统中,由于下载文件不一定是只包含字符的文本,因此在实现过程中使用的是更加通用的字节流。在 java.io 包中,InputSteam 和 OutputStream 类及它们的子类均表示字节流,并且提供了读/写二进制数据的方法。InputStream 类中包含 3个 read( )方法,用来数据流中读取二进制代码。输入流的基本方法如下:read( ),这个方法在 InputStream 类中是抽象的,因此它必须定义在子类中。此方法以 int 型返回流的下一个可读字节。如果到达流的末尾,则方法的返回值为-1.如果 I/O 发生错误,将抛出 IOException 类型的异常。read(byte array),此方法将流中字节读到数组的连续元素中,读出的字节数量最大为 array.length 的值。在读取完输入数据或是检测到流尾时,才从本方法返回。本方法将返回读取的字节个数,或者如果因为到达流尾而没有读取任何字节则返回-1.如果 I/O 发生错误,将抛出 IOEception 类型异常。如果传给方法的参数为 null,则抛出 NullPointerException 异常。read(byte buffer,int offset,int length),此方法将数据读入一个字节数组,从数组的 offset 指定的位置开始存放,并用 length 来指定读取的最大字节数。输入流的其他方法如下:void close( ),关闭流。int available( ),返回可以从中读取的字节数。long skip(long n),在输入流中跳过 n 个字节,将实际跳过的字节数返回。浙江工业大学本科毕业设计说明书(论文)21boolean markSupported( ),判断流是否支持标记功能。void mark( int readlimit),在支持标记的输入流的当前位置设置一个标记。void reset( ),返回到流的上一个标记。注意,流必须支持标记功能。OutputStream 类包含 3 个 write( )方法,用来向数据流写入二进制代码。这些操作与 InputStream 类的 read( )方法相对应20。输出流的基本方法如下:void write( int c)。void write(byte buffer)。void write(byte buffer, int offset, int length)。在本系统的实现过程中主要涉及两部分 Java 流操作,一个是从打开的 URL 连接中获得网络的输入流,一个是向文件写入内容的输出流。3.5本章小结本章对项目本系统需求进行了用户需求分析和系统功能需求分析,并描述了系统流程及模块划分,而且分析了关键技术和难点,明确了系统的使用对象、大致功能结构及各个业务系统所需实现的功能等问题,为后续系统设计打下了基础。浙江工业大学本科毕业设计说明书(论文)22第四章第四章 系统详细设计与实现系统详细设计与实现4.1系统基本流程该系统基本流程(如图 4.1 所示):运行程序后,可以在主界面上输入 URL 地址、保存地址也可以在文件菜单中新建一个任务,然后在 URL 地址栏中输入 HTTP地址,用户可以选择需要下载的线程数,程序还提供下载弹出窗体保存位置的选择,而且每当新建一个新的任务时,程序会自动载入默认的存储位置,不需要用户反复的输入地址。点击确定时,程序将在主界面显示刚刚新建的下载任务,包括了详细的信息。图 4.1 系统基本流程图新建完任务后,用户还可以继续添加下载的任务。选中想要下载的任务,可以多选,点击“开始”按钮,程序将开始任务的下载,当第一次运行程序时,程序将浙江工业大学本科毕业设计说明书(论文)23在程序的当前目录下自动新建一个配置文件,该文件名为 globalGet.init,该配置文件将记录该程序的默认下载地址和所有上一次的任务下载信息。所以每当用户退出程序时,程序都会自动保存当前的所有任务下载信息,做到“断点续传”的可视化。当开始一个新的任务下载时,该程序也将自动创建一个新的保存任务下载信息的文件,该文件用户记录该文件的下载点,也就是实现“断点续传”的保存信息,文件名以下载的文件名加上.tmp 命名,当该文件下载完成时,程序会自动删除该记录文件。用户单击“删除任务”按钮可以删除选中的任务,可以多选。单击“新建按钮” ,将可以新曾下载的任务。4.2系统功能模块设计本系统分为五个功能模块,分别为下载任务实体类模块、系统工具类模块、线程下载类模块、下载任务总控制模块、用户界面模块。每个模块的功能在上一章的系统功能需求分析已经详细介绍过,这里不再重述。4.2.1系统下载功能的实现按照功能划分,下载过程可以分为两部分,即建立连接并读取待下载文件的信息、下载文件。由于论文的篇幅有限,涉及到代码只张贴了重点部分。 建立连接并获取下载信息public static TestResult TestURL(String tmp) TestResult r = new TestResult();URL tmp_URL;try System.out.println(正在连接 URL + tmp + );tmp_URL = new URL(tmp);/ 建立连接HttpURLConnection http = (HttpURLConnection) tmp_URL.openConnection();if (http.getResponseCode() = 400) System.out.println(资源 + tmp_URL + 服务器响应错误!);浙江工业大学本科毕业设计说明书(论文)24r.myUrl = null;r.myResult = -1;return r; else System.out.println(资源 + tmp_URL + 连接成功!);r.myUrl = tmp_URL;r.myResult = 1;/ 获取文件长度r.fileLength = http.getContentLength();if (r.fileLength = -1) System.out.println(资源 + tmp + 无法获知的文件长度!); else System.out.
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸下载 > CAD图纸下载


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!