《基于web的网络存储服务系统设计与实现【计算机科学专业】【毕业设计+文献综述+开题报告】》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
(20届)本科毕业论文基于web的网络存储服务系统设计与实现3 摘要:网络硬盘(简称网盘),是一种可以用户基于互联网登录网站的进行信息数据上传、下载、共享等操作的信息数据存储空间。也称为:网络磁盘、网络空间、网络U盘、网络优盘等等。免费的网络硬盘的可用空间较少,一般对文件大小、下载速度、存放时间等限制;付费的网盘能提供大容量空间,文件大小、下载速度、存放时间及格式都不限制。随着Internet的迅速发展和广泛的普及,网络存储服务(即网盘的基础)代表了一个存储新时代的到来。本毕业设计实现一个在线网络存储服务系统,具体实现以下功能:文件的上转与下载可以对文件进行复制删除转移等。设计在web方式下,传送大量数据的方案。用户登录进入网络硬盘空间后,可以改变他的空间访问权限,或者自定义访问内容。管理模块应该能分析不同用户试用空间的情况,做出分配磁盘的案;管理模块能够动态改变每个用户的空间大小。关键词:网络存储系统[1];上传下载;Web;硬盘空间;3 ThebasedonwebnetworkstorageservicesystemdesignandrealizationAbstract:networkharddisk(hereinafterreferredtoasdisc),isakindofcanusersofInternetwebsitebasedoninformationuploaddata,download,sharingtheinformationdatastoragespaceoperations.alsoknownas:networkdisk,thenetworkspace,networkUdisk,thenetworkYouPanetc.freenetworkharddiskspaceavailableisless,thegeneralfilesize,downloadspeed,storagetimelimit;Paymentofthedisccanprovidelargecapacityspace,filesize,downloadspeed,storagetimeandformatarenolimit.withthepopularityofrapiddevelopmentandextensivenetworkstorageservice(i.e.,thediscbased)representsanewerainstorage.Thegraduationdesignachieveaonlinestorageservicesystem,andrealizationofthefollowingfunctions:filetransferanddownloadcancopyonfilesdeletedtransfer,etc.designinwebmode,sendinglargeamountsofdataplan.Userlogsintonetworkharddiskspace,canchangehisspaceaccess,orcustomaccesscontent.managementmoduleshouldbeabletoanalyzethedifferentusertrialspacesituationsandmakeallocatediskcase;Managementmodulecoulddynamicallychangeeachuserspacesize.Keywords:networkstoragesystem[2];Uploadsanddownloads;Web;Harddiskspace;3 1绪论11.1课题的研究背景11.1.1网络存储简介11.1.2网络存储的发展21.2课题研究的目的与意义21.3课题的研究内容21.4课题的研究方法21.5论文的内容组织32系统开发技术背景42.1jsp技术介绍42.1.2JSP主要技术特点42.2struts技术介绍42.3hibernate技术介绍52.4mvc技术介绍52.5数据库技术介绍52.5.1数据库设计的基本步骤52.5.2数据库设计的原则63系统分析73.1系统开发的指导思想73.2需求分析83.3具体功能研究83.4业务流程图93.5系统目标93.6系统软硬件要求93.6.1硬件要求93.6.2软件要求104系统设计114.1系统功能结构设计114.2模块简介125数据库设计135.1数据库概念设计135.2数据库逻辑结构设计156系统的详细设计与实现细节176.1用户界面层的开发176.2业务逻辑层的开发256.3数据访问层开发277总结与展望30致谢30348 1绪论1.1课题的研究背景1.1.1网络存储简介网络存储[3]的主要形式就是DAS、NAS和SAN。DAS(DirectAttachedStorage,直接连接存储[4])将磁盘阵列、磁带库等数据存储设备通过扩展接口直接连接到服务器或客户端。DAS以服务器为中心,不带有存储操作系统,即存储设备是服务器的一部分,I/O请求将直接发送到存储设备。DAS方式实施比较简单,成本低,见效快。但是存储管理工作比较繁琐,容量不能再分配,性能、扩充性较差。因此该技术已经不能适应当今的存储要求。NAS(NetworkAttachedStorage———网络连接存储)即将存储设备通过标准的网络拓扑结构(例如以太网),连接到一群计算机上,提供数据和文件服务。(2)NAS[5]是一种专业的网络文件存储及文件备份设备,或称为网络直连存储设备、网络磁盘阵列。一个NAS里面包括核心处理器、文件服务管理工具、一个或者多个硬盘驱动器用于数据的存储。NAS可以应用在任何的网络环境当中。主服务器和客户端可以非常方便地在NAS上存取任意格式的文件,包括SMB格式(Windows)、NFS格式(Unix、Linux)和CIFS格式等等。NAS系统可以根据服务器或者客户端计算机发出的指令完成对内在文件的管理。另外的特性包括:独立于操作平台、不同类的文件共享、交叉协议用户安全性/许可性、浏览器界面的操作/管理和不会中断网络的增加和移除服务器。NAS将存储设备通过标准的网络拓扑结构连接,可以无需服务器直接上网,不依赖通用的操作系统,而是采用一个面向用户设计的、专门用于数据存储的简化操作系统,内置了与网络连接所需的协议,因此使整个系统的管理和设置较为简单,适用于文件系统和Web服务系统的存储和共享优化存储,可以有效地管理多用户、多应用的单一数据的共享。NAS依靠LAN和WAN连接标准,使用IP、以太网以及网络文件系统(NFS)和公共互联网文件系统(CIFS)等技术,降低了操作和开发的难度。同时,NAS支持多通信协议,可以在Unix和Windows客户机上使用,实现异种机的存储访问。SAN(StorageAreaNetwork———存储区域网络)[6]是基于FC和IP网络的,他FCP/iSCDI的模块访问协议以块设备的形式提供存储服务,其硬件设备是厂家特定的NSA具有异构平台下的文件共享和低成本等优点,但是在性能和可扩展性方面存在一定的缺陷。因此NA主要用于异构环境下的数据访问、数据迁移、文件共享等场合。SAN以其独特的体系结构和构建技术使它具有高性能和可扩展等优点,但是SAN的异构环境下的文件共享和互操作性方面存在以下缺陷。因此目前主要用整合存储和服务器资源、数据库应用、在线事务处理的低延迟、以及LAN-freebackup或server-freebackup等场合。48 1.1.2网络存储的发展[7]随着网络技术的迅速发展,通过网络进行传输的信息量呈指数级增长,人类已经进入数字化的信息时代,在社会生活的各个领域,信息扮演着十分重要的角色。据统计,全球每年都要产生10~20亿GB的新信息,相当于每人每年要产生250MB的信息量,这对传统的存储技术形成了巨大的挑战,而对于企业来讲,其业务系统不仅要有高效灵活的数据管理能力还要有灾难事件发生时的容错和恢复能力,由此基于网络和数据库技术的网络存储应运而生。它可以为企业提供超大存储容量、大数据传输率以及高系统可用性的信息存储和共享服务。目前,网络存储技术有以下4个主要发展方向:NAS(NetworkAttachedStorage);SAN(StorageAreaNetwork);CAS(ContentAddressStorage);IPSAN(SANoverIP)。面对新型的数据密集型应用,网络化的企业应用,以及因特网的发展,企业存储的传统方法包括直接存储(DAS)已经力不从心。取而代之的是网络存储技术。存储网络在性能、灵活性、可扩充性、安全性和集中式数据管理方面形成明显的优势。在标准的制定和产品的实现上,力图使新的网络存储技术可以借助一些成熟网络技术和网络构架例如IP网络向更多的用户提供更有效的服务。1.2课题研究的目的与意义随着电子技术与网络的发展人们无须带着厚重的公文包到处走动,网络存储(网络硬盘)的出现使大家的文件保存处理运用更加方面简易。为了更容易在朋友同事同学之间分享信息,为了更好的管理你的文件,网络存储是不二的选择。1.3课题的研究内容本毕业设计实现基于web的网络存储服务系统。一个在线网络存储服务系统,具体实现以下功能:文件的上转与下载可以对文件进行复制删除转移等硬盘空间的是用包括。设计在web方式下,传送大量数据的方案。用户登录进入网络硬盘空间后,可以改变他的空间访问权限,或者自定义访问内容。管理模块应该能分析不同用户试用空间的情况,做出分配磁盘的案;管理模块能够动态改变每个用户的空间大小。要求在已有的专业理论知识和应用能力的基础上,掌握网络程序开发的一般知识,运用自选的开发环境和工具,实现对网络存储服务系统[8]必要功能的实现。1.4课题的研究方法(1)文献研究法[9]文献研究法主要指收集、鉴别、整理文献,并通过对文献的研究,形成对事实科学认识的方法[5]。该方法主要用于系统开发的前期。首先,通过阅读大量服装电子商务网站的文献,结合现实,总结服装电子商务平台的基本功能及不足。以此确定毕业设计的选题。然后,根据相关文献,对系统进行需求分析和可行性分析,从而确定自己的研究方向和实现方法。(2)数据库设计方法首先规划处需要几张表,然后添加表中需要的字段,逐级添加法。通过该方法,设计出结构完整并适合管理的数据库。48 (3)面向对象方法面向对象方法(Object-OrientedMethod)[10]是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO(Object-Oriented)方法,是建立在“对象”概念基础上的方法学。通过该方法,运用面向对象编程工具,来完成网络存储服务系统的开发。1.5论文的内容组织论文共由六章组成。第1章绪论,主要介绍系统的研究背景、研究目的和意义、研究内容以及研究方法;第2章系统开发技术背景,主要介绍系统开发过程中会用到的相关技术,主要有Myeclipse开发工具,系统开发语言java,以及数据库技术等;第3章系统分析,主要是对系统总体功能的一个阐述,说明系统要实现的各个基本功能模块,并对系统的可行性进行分析;第4章系统设计,主要讲述系统设计概要;第5章数据库设计,主要设计数据的组成;第6章系统的设计与实现,主要介绍系统的硬件软件环境、界面设计、功能实现、主要技术难点;第7章总结与展望,主要阐述了本课题所完成的研究工作和存在的不足,以及希望在今后可以完善的地方。48 2系统开发技术背景2.1jsp技术介绍2.1.1JSP工作原理[11]在传统的网页文件(HTML文件)中加入Java程序片断和JSP标记,就构成了JSP网页。JSP页面以扩展名为jsp的纯文本文件形式存于Web服务器上,JSP网页能结合JavaBean技术来扩充网页中程序的功能,当Web服务器接受到客户端某个JSP页面的请求时,触发JSP引擎,把该JSP页面内容转换成纯Java语言的servlet源码,然后使用标准的Java编译器,将servlet编译成servlet字节码,执行并生成所请求的内容,最后将结果以’HTML(或XML)页面的形式发送回浏览器。JSP页面被编译成servlet后常驻服务器内存,所以JSP效率高响应快。2.1.2JSP主要技术特点[12]2.1.2.1JSP技术开发动态Web页面的两种模式和体系结构利用JSP技术开发动态Web页面有两种模式:(1)Model1(JSP+JavaBean):所有的请求和处理都是通过JSP页面来实现。该模式导致显示逻辑和业务逻辑没有分开,很多Java代码利HTML代码混杂在一起,代码维护量大,开发效率低,Model1体系仅适合简单应用的需要。(2)Model2(JSP+Servlets+JavaBean):把JSP与servlet联合使用来实现动态内容服务的方法,jsp负责针对用户的显示逻辑,servlet负责针对用户的业务逻辑,这种模式清晰地分离了表达和内容,明确了角色定义,又被称为MVC(Model—View—Contro1)架构,适合于较大型项月的开发。2.1.2.2强调可重用的组件绝大多数JSP页面依赖于可重用的、跨平台的组件(JavaBean或EnterpriseJavaBeans组件)来执行应用程序所要求的更为复杂的处理,开发人员能共享利交换执行普通操作的组件,或者使得这些组件为更多使用者或客户团体所使用,基于组件的方法加速了总体的开发进程。2.1.2.3硬件平台和服务器无关性[13]JSP作为Java家族的一员,秉承了Java技术的“一次编写,随处运行(WriteOnce,RunAnywhere)”的特性,可以运行于大多数流行的操作系统平台及Web服务器,这种与服务器硬件和操作系统平台的无关性是JSP相对于其它动态网页技术的一大优点。2.2struts技术介绍[14]Struts1最初由程序员CraigR.Mcclanahan发布,Apache软件基金会于2002年接手该项目。Strust1提供了一个极好的框架,可以容易地整合JSP、servlet和Java代码。随着Java的发展,struts1已经成为MVC设计模式的常用架构,并被广大的程序员所接受,在Web开发应用中获得了巨大成功。48 2.3hibernate技术介绍[15]Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。2.4mvc技术介绍[16]系统主体结构采用MVC架构,MVC指的是模型【Mode1)、视图(View)和控制器(Controller)三个部分。使用MVC的目的是将模型和视图的实现代码分离,从而使同一个程序可以使用不同的表现形式。在本系统中,为了今后能够开发出WebService等其他新的表现形式,最便捷的方式就是能够重用原有的业务逻辑和数据访问代码,如果系统使用了MVC的架构,服务层和数据表现层是相互分离的,那么就可以方便地在WebService中调用原来的服务层代码,大大减少了重复开发工作2.5数据库技术介绍[17]数据库技术产生于20世纪60年代末70年代初,其主要目的是有效地管理和存取大量的数据资源。主要研究如何存储,使用和管理数据。在应用计算机进行数据处理的技术发展过程中经历了三个阶段:程序数据处理技术、文件数据处理技术、数据库数据处理技术。发展至今,所有的数据处理应用系统都是采用数据库数据处理技术实现的。所谓数据库(Database),是指按照数据结构来组织、存储和管理数据的仓库。它产生于距今五十年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。在开发一个系统之前,首先要完成的就是数据库的设计。数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据。如何在给定的应用环境下,构造最优的数据库模型至关重要,它将影响整个系统的运作。下面对数据库的设计做下简单的介绍。2.5.1数据库设计的基本步骤(1)需求分析阶段该阶段的任务是准确了解和分析用户的需求,包括数据与处理。是整个设计过程的基础,也是最困难、最耗费时间的一步。(2)概念结构设计阶段该阶段主要是通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型,即设计数据库的E-R模型图,是整个数据库设计的关键。48 (3)逻辑结构设计阶段该阶段是将概念结构转换为某个DBMS所支持的数据模型。如将E-R如转换为多张表。(4)数据库物理设计阶段该阶段是要为逻辑数据模型选取一个最适合应用环境的物理结构,包括存储结构和存取方法。(5)数据库实施阶段这个阶段是运用DBMS提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。(6)数据库运行和维护阶段数据库应用系统经过试运行后即可投入正式运行,但在系统运行过程中必须不断地对其进行评价、调整与修改。在设计过程中要把数据库的设计和对数据库中数据处理的设计紧密结合起来,将这两个方面的需求分析、抽象、设计、实现在各个阶段同时进行,相互参照,相互补充,以完善两方面的设计。2.5.2数据库设计的原则在数据库设计过程中,往往会出现一些问题,如数据冗余、更新异常或是表与表之间的范式问题,要想减少错误的产生,避免不必要的麻烦,必须遵循数据库设计的基本原则。原则如下:(1)正确反映数据与数据(信息与信息)之间的层次逻辑关系;(2)对进入到数据库中的数据有一个有效性检查;(3)对数据库中的数据进行非逻辑操作进行相应的错误处理;(4)满足系统对性能上的要求。48 3系统分析系统分析是应用系统的思想和方法,把复杂的对象分解成简单的组成部分,找出这些部分的基本属性和彼此间的关系。它是信息系统开发工作中最重要的一环,其内容主要包括对组织各部门、各业务的详细了解,并在此基础上进行分析,提出新方案,以开发出符合用户要求的管理信息系统,它的基本任务是:系统分析员与用户在一起,充分了解用户的要求,并把理解用系统说明书表达出来。需求分析简单地说就是分析用户的需求。需求分析是设计数据库的起点,需求分析的结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。需求分析的任务是通过详细调查现实世界要处理的对象(组织、部门、学校等),充分了解原系统(手工系统或计算机系统)工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。调查的重点是“数据”和“处理”,通过调查、收集与分析,获得用户对数据库的如下要求:(1)信息要求。指用户需要从数据库中获得信息的内容和性质。由信息要求可以导出数据要求,即在数据库中需要存储哪些数据。(2)处理要求。指用户要完成什么处理功能,对处理的响应时间有什么要求,处理方式是批处理还是联机处理。(3)安全性与完整性要求。确定用户的最终需求是一件很困难的事,这是因为一方面用户缺少计算机知识,开始时无法确定计算机究竟能为自己做什么,不能做什么,因此往往不能准确地表达自己的需求,所提出的需求往往不断地变化。另一方面,设计人员缺少用户的专业知识,不易理解用户的真正需求,甚至误解用户的需求。因此设计人员必须不断深入地与用户交流,才能逐步确定用户的实际需求。3.1系统开发的指导思想(1)采用结构化系统分析的方法采用结构化系统分析的方法建立新系统的逻辑模型,此模型尽量避免使用计算机术语,便于企业的计算机人员与系统开发人员的共同讨论。本系统的结构是层次化的暗盒模块结构。对高层模块,将采用以事物为中心的设计策略,把一个大的复杂的系统逐步分解成小的相对简单的暗盒模块,对低层模块,采用以变换为中心的设计策略。因此,为了提高模块的内聚性,降低模块的耦合程度,本系统采用了经典的MVC设计模式。这样分层更加合理,维护更加简单。(2)注重系统的适用性在设计的时候,尽量避免了编程语言的原因而造成的错误。输入错误是不能完全避免的,在本系统中,当用户操作出错时,我们努力并实现在系统中给出友好的提示。48 (3)注重系统的实用性系统使用时不要求使用者懂得各个功能实现的原理,他们只需在友好的界面上进行操作,输入数据并得到正确的结果就可以了。(4)注重系统安全性由于本人的知识水平限制,只能从完善口令管理、密码加密,严格操作权限,从而保证应用系统的日常管理和控制。3.2需求分析随着互联网技术的广泛应用以及计算机技术的发展,人们对数据存储的需求及方式也有了巨大的改变。有三个方面的表现:首先许多应用系统,如电子商务,数据仓库,企业资源的规划(ERP)和客户关系管理(CRM)等对存储容量有巨大的要求;其次应用系统要求对数据进行快速有效的存取;最后需要对数据进行有效的管理,从而有了网络存储技术的快速发展。网络存储提高了数据的共享性、可用性、可扩展性和管理性,但仍然存在一些缺陷.如:NAS的性能较低;SAN的实现费用较高,互操作性差;IP2SAN则存在着严谨的SCSI协议和无法保证质量的TCP/IP协议的矛盾。因此,网络存储的发展,以解决存储共享,数据共享等问题,仍然是当今存储体系结构研究的重点和热点。目前网络存储的核心技术是围绕SCSI、FC、IP以太网及它们的交叉融合发展,NAS存储系统可能采用DAFS技术提高系统性能,利用虚拟存储体系结构实现所有的存储技术的统一,基于总线的存储,将可能沿着基于InfiniBand技术发展.3.3具体功能研究功能模块大致分析:用户管理:用户模块主要完成注册,登录系统,上传文件,下载文件等。管理员管理:管理员模块主要审核用户,用户管理,审核文件等。管理员模块主要包括管理员的登录,对用户的信息进行管理包括:修改用户信息,删除用户,查看用户上传的资料等功能,管理员模块起到的管理作用是必不可少的。48 3.4业务流程图(用户业务流程图)(管理员业务流程图)3.5系统目标本程序主要实现如下目标:(1)具有实时性,已注册的用户无论身在何地,通过Internet浏览器,都可登陆网络存储系统。(2)具有共享,用户提供的共享信息可供他人下载。(3)用户可随时上传文件与下载文件。3.6系统软硬件要求3.6.1硬件要求服务器的机器主要配置情况:48 CPUP43.0GMHZ内存512MB3.6.2软件要求操作系统:WINNXP/WINDOWS2000/WINDOWS2003数据库:Mysql开发环境:JDK+Eclipse+Tomcat+SSH开发语言:Java语言服务器:Tomcat6.0浏览器:firefox分辨率:最佳效果1024×768象素48 4系统设计在前面进行了一系列的系统调查和系统分析以后,接下来的工作便是系统设计了。这是软件工程中第二个关键的阶段。它是根据前面的几个阶段的结果,在已获准的系统分析报告基础上进行系统设计。系统设计阶段是开发系统的重要阶段。这个阶段。我们需要把前面阶段收集来的信息进行整理(特别是用户的需求分析),找出我们需要的信息,定下系统开发过程中我们需要实现的功能。这个其实比较有难度的同时比较重要的。数据库如何能设计的尽可能全面而又合理、模块之间的联系程度、前后台的依赖关系如何反映,是在这一阶段感触最深的三个方面。数据库是所有信息的集合,好的数据库设计可以大大减少数据冗余度,如果数据冗余度太大,将占用很多系统资源,给服务器带来沉重的负担。还有数据库的设计也要充分考虑到前台代码执行的效率,不能仅仅是为了设计数据库设计而设计,这会可能导致在编写代码时遇到诸多不便,这一点还需我在以后的工作中好好研究。在系统设计阶段,每个模块应该尽可能的独立,这样可以减少模块间的调用关系和数据交换关系。每个模块的功能最好能让其尽可能的单一,这样易于以后系统的修改,可以大大的减少相关的操作。在做系统的时候,发现自己原先设计下来的模块不合理,难以满足用户的需求或则是难以实现这个功能,那就必须把这个模块推翻了,如果这个模块又设计到其他的模块,那这个对系统的改动是巨大的。这就要求我们尽早确定系统的核心模块,减少改动。4.1系统功能结构设计根据网络存储服务系统的特点,可以将系统分为用户模块与管理员模块。用户需要注册,注册之后可对自己的网络存储空间进行管理,管理对所有用户进行管理,如图4-1所示。系统功能结构图48 (图4-1)4.2模块简介网络存储服务系统是一个功能齐备的网络应用程序,由用户模块、管理员模块两部分组成。◆用户模块用户模块主要包括学用户登录,注册,上传文件,下载文件,删除文件,分享文件,修改个人资料等功能。◆管理员模块管理员模块主要包括管理员的登录,对用户的信息进行管理包括:修改用户信息,删除用户,查看用户上传的资料等功能,管理员模块起到的管理作用是必不可少的。48 5数据库设计在数据库方面用到的是MySQL。MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQLAB公司开发、发布并支持的。MySQLAB是由多名MySQL开发人创办的一家商业公司。它是一家第二代开放源码公司,结合了开放源码价值取向、方法和成功的商业模型。MySQL是一种关联数据库管理系统,是一种开放源码软件,数据库服务器具有快速、可靠和易于使用的特点,服务器工作在客户端/服务器模式下,或嵌入式系统中,有大量可用的共享MySQL软件。由于以上的优点在我的毕业设计中我也同样选择MySQL作为数据库。5.1数据库概念设计根据以上各节对系统所做的需求分析和系统设计,规划出本系统中使用的数据库实体分为用户实体,管理员实体,文件实体等。下面将介绍几个关键实体的E-R图。(1)用户实体用户实体包括用户编号、用户名、密码、昵称、电话、Email、QQ、最大磁盘空间等属性。用户的E-R图如图5-1所示(图5-1用户实体E-R图)48 (2)管理员实体用户实体包括用户编号、管理员名、密码、真实姓名等属性。用户的E-R图如图5-2所示(图5-2管理员实体E-R图)(3)文件实体文件实体包括用户编号、文件名、用户编号、文件路径、文件大小、文件描述更新时间等属性。用户的E-R图如图5-3所示(图5-3文件实体E-R图)表间E-R图:如图(5-4)48 (图5-4表间E-R图)5.2数据库逻辑结构设计根据上面的E-R图可以创建对应的数据表。表5.1用户表结构列名数据类型长度主键否功能描述userIdbigint8是(自动)编号userNamevarchar50否用户名passwordvarchar50否密码nickNamevarchar50否昵称telephonevarchar50否电话emailvarchar50否邮箱QQvarchar50否QQmaxSpacebigint50否最大磁盘空间PriviledgeInt4否权限48 表5.2管理员表结构列名数据类型长度主键否功能描述adminIdInt4是编号adminNamevarchar50否管理员名passwordvarchar50否密码nickNamevarchar50否真实姓名表5.3文件表结构列名数据类型长度主键否功能描述fileIdbigint8是(自动)编号fileNamevarchar50否文件名userIdbigint8否用户编号filePathvarchar50否文件路径fileDescvarchar50否文件描述fileSizevarchar50否文件大小uploadTimeDate否上传时间orderIdbigint8否是否共享48 6系统的详细设计与实现细节6.1用户界面层的开发用户界面层用来展现在客户浏览器中显示的用户界面HTML标记和css来显示由业务逻辑层动态传送的数据信息,通过使用相应的并负责获得用户录入的数据,完成对录入数据的校验,并将录入数据传送给业务逻辑层,即用户通过浏览器,进入用户界面层,通过页面输入登录信息,实现访问请求过滤。6.1.1下图是表示层的用户登录界面界面:如图(6-1)(6-2)(图6-1用户登陆界面)(图6-2用户登录英文版)用户登陆界面相关的代码:LoginAction.java48 importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionForward;importorg.apache.struts.action.ActionMapping;importorg.apache.struts.action.ActionMessage;importorg.apache.struts.action.ActionMessages;importcom.dark.nethd.bean.UserInfo;importcom.dark.nethd.web.form.UserInfoForm;importcom.dark.nethd.Constants;publicclassLogonActionextendsBaseAction{publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){UserInfoFormuserInfoForm=(UserInfoForm)form;UserInfoui=this.getUserInfoService().findUserByNameAndPassword(userInfoForm.getUserInfo().getUserName(),userInfoForm.getUserInfo().getPassWord());if(ui==null){ActionMessageserrors=newActionMessages();errors.add(ActionMessages.GLOBAL_MESSAGE,newActionMessage("error.logon"));this.saveErrors(request,errors);return(newActionForward(mapping.getInput()));}else{request.getSession().setAttribute(Constants.USER_SESSION_KEY,ui);request.removeAttribute(mapping.getAttribute());returnmapping.findForward(Constants.FORWARD_SUCCESS);}}}6.1.2如图(6-3)是用的主要操作界面,此页面是在用户登录成功后显示。其中主要有上传文件、修改密码、登出、下载文件、共享文件、删除文件等操作。48 (图6-3主页面)(图6-4主页面英文版)主操作界面代码:UserMainAction.javaimportjava.util.List;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionForward;importorg.apache.struts.action.ActionMapping;importorg.apache.struts.action.ActionMessages;importorg.apache.struts.action.ActionMessage;importcom.dark.nethd.Constants;importcom.dark.nethd.bean.UserInfo;publicclassUserMainActionextendsBaseAction{publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){UserInfoui=(UserInfo)request.getSession().getAttribute(Constants.USER_SESSION_KEY);if(ui==null){ActionMessageserrors=newActionMessages();errors.add(ActionMessages.GLOBAL_MESSAGE,newActionMessage("error.logon"));returnnewActionForward(mapping.getInput());//查询文件列表request.setAttribute("FilesList",this.getFliesInfoService().findFilesInfoByUserID(ui.getUserId()));//获得用户已用空间大小request.setAttribute("FilesSize",this.getFliesInfoService().getAllFilesSizeByUserId(ui.getUserId()));returnmapping.findForward(Constants.FORWARD_SUCCESS);}}}}48 }else{//查询文件列表request.setAttribute("FilesList",this.getFliesInfoService().findFilesInfoByUserID(ui.getUserId()));//获得用户已用空间大小request.setAttribute("FilesSize",this.getFliesInfoService().getAllFilesSizeByUserId(ui.getUserId()));returnmapping.findForward(Constants.FORWARD_SUCCESS);}}}}6.1.3如图(6-5)是用户修改密码的界面,主要是为了让用户能修改自己的密码而设计的。(图6-5修改密码界面)(图6-6修改密码页面英文版)48 用户注册的相关action代码:importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionForward;importorg.apache.struts.action.ActionMapping;importorg.apache.struts.action.ActionMessage;importorg.apache.struts.action.ActionMessages;importcom.dark.nethd.bean.UserInfo;importcom.dark.nethd.business.IUserInfoService;importcom.dark.nethd.web.form.UserInfoForm;importcom.dark.nethd.Constants;publicclassUserRegisterActionextendsBaseAction{publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){UserInfoFormuserInfoForm=(UserInfoForm)form;ActionMessageserrors=newActionMessages();//判断是否为重复提交if(isTokenValid(request)){IUserInfoServiceiuis=this.getUserInfoService();UserInfoui=userInfoForm.getUserInfo();ui.setMaxSpace(Constants.MAX_SPACE);if(iuis.registerUserInfo(ui)){this.resetToken(request);request.getSession().setAttribute(Constants.USER_SESSION_KEY,ui);request.removeAttribute(mapping.getAttribute());returnmapping.findForward(Constants.FORWARD_SUCCESS);}else{errors.add(ActionMessages.GLOBAL_MESSAGE,newActionMessage("error.urserregister"));this.saveErrors(request,errors);return(newActionForward(mapping.getInput()));}}else{errors.add(ActionMessages.GLOBAL_MESSAGE,newActionMessage("error.token"));this.saveErrors(request,errors);return(newActionForward(mapping.getInput()));}}}48 6.1.4如图(6-7)是上传文件的页面,主要完成用户上传文件的需要。(图6-7上传界面)(图6-8上传界面英文版)上传相关代码:importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionForward;importorg.apache.struts.action.ActionMapping;importorg.apache.struts.action.ActionMessage;importorg.apache.struts.action.ActionMessages;importcom.dark.nethd.Constants;importcom.dark.nethd.bean.FilesInfo;importcom.dark.nethd.bean.UserInfo;importcom.dark.nethd.web.form.FileUpLoadForm;publicclassFileUploadActionextendsBaseAction{publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){FileUpLoadFormFileUpload=(FileUpLoadForm)form;if(getFliesInfoService().filesInfoSave(theFiles,(UserInfo)request.getSession().getAttribute(Constants.USER_SESSION_KEY),FileUpload.getFile(),request)==null){ActionMessageserrors=newActionMessages();errors.add(ActionMessages.GLOBAL_MESSAGE,newActionMessage("error.filesupload"));this.saveErrors(request,errors);returnnewActionForward(mapping.getInput());}else{request.removeAttribute(mapping.getAttribute());returnmapping.findForward(Constants.FORWARD_SUCCESS);}}}48 FilesInfotheFiles=FileUpload.getFi();if(getFliesInfoService().filesInfoSave(theFiles,(UserInfo)request.getSession().getAttribute(Constants.USER_SESSION_KEY),FileUpload.getFile(),request)==null){ActionMessageserrors=newActionMessages();errors.add(ActionMessages.GLOBAL_MESSAGE,newActionMessage("error.filesupload"));this.saveErrors(request,errors);returnnewActionForward(mapping.getInput());}else{request.removeAttribute(mapping.getAttribute());returnmapping.findForward(Constants.FORWARD_SUCCESS);}}}6.1.5如图(6-9)是后代管理页面,主要完成对用户组的操作。对用户进行合理的管理管理页面是必不可少的。管理员能对不用户进行删除,修改等操作。(图6-9管理员模块)48 (图6-10管理员模块英文版)管理员操作模块代码:importjava.util.List;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionForward;importorg.apache.struts.action.ActionMapping;importorg.apache.struts.action.ActionMessages;importorg.apache.struts.action.ActionMessage;importcom.dark.nethd.Constants;importcom.dark.nethd.bean.UserInfo;publicclassAdminMainActionextendsBaseAction{publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){//查询用户列表request.setAttribute("UserList",this.getUserInfoService().findAllUserInfo());returnmapping.findForward(Constants.FORWARD_SUCCESS);}}48 6.1.6如图(6-6)是管理员登陆界面,是管理登录时显示。(图6-11管理员登录)(图6-12管理员登录英文版)6.2业务逻辑层的开发业务逻辑层是联系用户界面层和数据访问层的纽带,也是三层结构模型中最重要的一层,利用它可以建立实际的数据库连接,根据用户的请求生成SQL语句检索或更新数据库,并把结果返回给客户端浏览器。在整个用户业务逻辑中,实现了针对用户的各种业务逻辑,如判断是否存在该用户、判断该用户是否符合登入要求。在程序中所有在逻辑的动作都是由程序中的action动作完成,每个操作对应一个action.48 比如用户的登录:用户在登录页面输入用户名与密码点击确定,此时由form表单提交到对应的action即LogonAction.java.在action中调用查找数据库的Dao类,而Dao类利用Hibernate的功能对数据的数据进行搜索比较是否有该用户存在,有则登录成功否则失败。LogonAction的主要代码如下:publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){UserInfoFormuserInfoForm=(UserInfoForm)form;UserInfoui=this.getUserInfoService().findUserByNameAndPassword(userInfoForm.getUserInfo().getUserName(),userInfoForm.getUserInfo().getPassWord());if(ui==null){ActionMessageserrors=newActionMessages();errors.add(ActionMessages.GLOBAL_MESSAGE,newActionMessage("error.logon"));this.saveErrors(request,errors);return(newActionForward(mapping.getInput()));}else{request.getSession().setAttribute(Constants.USER_SESSION_KEY,ui);request.removeAttribute(mapping.getAttribute());returnmapping.findForward(Constants.FORWARD_SUCCESS);在Dao类和service中的重要代码是:Service接口:publicUserInfofindUserByNameAndPassword(StringuserName,Stringpassword);Dao对数据库的操作:privatestaticfinalStringFIND_USER_BY_USERNAME_AND_PASSWORD="fromUserInfowhereuserName=?andpassWord=?";publicUserInfofindUserByNameAndPassword(StringuserName,Stringpassword)throwsDataAccessException{Listresult=this.getHibernateTemplate().find(FIND_USER_BY_USERNAME_AND_PASSWORD,newObject[]{userName,password});if(result.size()!=0)return(UserInfo)result.get(0);returnnull;由上述的例子可知在程序中有义务逻辑起到桥梁的作用,它是三层结构中必不可少的一部分。48 6.3数据访问层开发数据访问层位于分层体系的底层,将物理数据的逻辑视图提交给业务逻辑层实现与数据库的交互,完成查询、插入、删除和修改数据的功能。数据访问层通过将业务逻辑与对基础数据存储的更改进行隔离并确保数据的完整性,使业务层只需实现业务逻辑即可,无需考虑数据的存储细节。数据访问层为业务逻辑层提供服务,根据业务逻辑层的要求从数据库中提取数据或者修改数据库中的数据。数据访问层,主要根据JDBC的接口,我在设计中用到了hibernate框架,这个框架就是完成数据访问层的良好框架。因为hibernate是全自动话的所以在代码中不需要写很多的SQL语句,只要做好配置文件的工作。即在hibernate的配置文件中把所有有关数据库的操作都配置完成,使用时只要按照hibernate框架的使用方法,写出Dao文件和Service文件就能对数据库进行CRUD等操作了。Hibernate的配置文件内容代码:
此文档下载收益归作者所有