基于SSH2架构的FTP大文件上传技术

2015-11-14 11:52廖艺咪
电脑知识与技术 2015年22期

廖艺咪

摘要:通过对传统的超文本传输协议(HTTP)在上传大文件方面的优缺点分析,提出了在基于SSH2架构的信息系统建设过程中,利用文件传输协议(FTP)实现大文件的上传技术,目的在于提高大文件的上传速度,使设计出来的软件能够极大地提高工作效率。

关键词:软件体系结构;SSH2架构;FTP文件上传

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)22-0037-03

Abstract: Through the traditional Hypertext Transfer Protocol (HTTP) in large file upload the advantages and disadvantages of analysis, proposed based on struts2+spring+hibernate(SSH2) architecture of information system construction process, using file transfer protocol (FTP) implementation of large files upload technology. The purpose is to improve the large file upload speed, designed to make the software can greatly improve the working efficiency.

Key words: software architecture; SSH2 framework; FTP file upload

文本传输协议(HTTP)是互联网上应用最为广泛的一种网络协议。所有的www文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。目前我们所访问的网站大都是以HTTP协议来传输和工作的。文件传输协议(FTP)是一个可以用于跨平台(在两台装有不同操作系统的机器上)传输计算机文件的软件标准。它属于网络协议组的应用层。主要用户于上传和下载文件。在某些信息系统项目的实际应用中,需要将一些文件上传到Web服务器中,这些文件比较大可能要几百MB甚至1G以上,而且为防止文件重名被覆盖,需要对文件进行重命名,并储存到相应的数据库中。用HTTP协议上传相对来说更适合web编程,对于上传小文件来说HTTP协议的速度要比用FTP协议上传文件略快,安全性也比较好,不像FTP那样,必须要启动一个FTP服务才行。而对于上传文件大文件来说http似乎便显得有点无能为力,用FTP协议的速度显然比HTTP协议要快。文件越大,FTP协议上传的速度就比HTTP上传快的倍数越大。

1 基于Java Web应用的软件体系结构

基于web应用的B/S(Browser/Server)结构就是三层C/S (Client/Server)结构的 Internet上的软件体系结构。在现有的3层软件体系结构中,客户层和数据层己被严格定义。与此相反,中间层并未明确定义,而且,中间层可以包括有与应用程序的界面和长久的数据存储无关的处理。我们所讨论的新的基于Web的3层体系结构集中在客户层和中间层。假定将中间层划分成许多服务程序是符合逻辑的,一个基于Web的应用程序又可将中间层划分成许多服务程序,这样将每一主要服务都视为独立的层,使得3层体系结构可变成N层体系结构。一个基于Web的应用程序一般包含如下几层:

1层,由Web浏览器实现的一个客户层的界面。

2层,由Web服务器实现的一个中间层的任务分配机制.

3层,由一些服务器端脚本(Script)实现的中间层服务。

4层,由关系数据库实现的数据层存储机制。

SSH2框架的详细设计:

SSH2开发框架是遵从MVC设计模式的,将前台交互界面交给“视图层”处理,“控制层”实现分发逻辑请求,“模型层”负责业务逻辑的实现,并且在“模型层”与数据库之间实现了一个“数据交互层”,不再让每个模型层模块与数据库进行交互。

视图层由Struts2负责,使用JSP、HTML和JavaScript语言进行交互。Struts2处理所有用户的请求,然后把请求转发给Action代理并根据处理后的结果找到相应的视图资源,再把响应发送到客户端浏览器。

控制层使用Spring作为主控制器,负责把请求发送到不同的业务逻辑模块,并根据逻辑需要返回相应的视图层页面。使用XML配置文件,建立前台请求与控制层之间的映射。

模型层主要由Hibernate负责。它主要负责协调软件与数据的交互,提供管理持久化数据的完整方案,让开发者能够专注于业务逻辑的开发。

通过配置文件来管理,避免了更换数据库连接信息时对类文件的修改。数据交互层根据显示层提交的对象,首先对提交的数据进行封装,通过Spring配置来查找相应的数据库表对应的Hibernate。综上所述,Hibernate和Spring控制器的结合可以更加灵活的对数据集的操作进行自定义和封装,而且数据库的连接信息通过相关的配。

2 FTP大文件上传的设计与实现

2.1 JAVA FTP客户端库的选择

目前,已经有很多公开免费的FTP客户端类库,如simpleftp、J-ftp, ftpclient等 。在本文中,采用是sun.net.ftp.FtpClient.。这个是个开源的且功能十分强大的客户端FTP类库。该类库主要提供了用于建立FTP连接的类。利用这些类的方法,编程人员可以远程登录到FTP服务器,列举该服务器上的目录,设置传输协议,以及上传下载文件等。sun.net.ftp.FtpClient.类涵盖了几乎所有FTP的功能,FtpClient的实例变量保存了有关建立"代理"的各种信息。

2.2 登录FTP服务器

在开发一个Java Web应用过程中,选定了客户端类库之后,需要开发一个服务使用FTP功能连接到FTP服务器。InetSocketAddress是SocketAddress的实现子类。此类实现 IP 套接字地址(IP 地址 + 端口号),不依赖任何协议。在使用Socket来连接服务器时最简单的方式就是直接使用IP和端口,但Socket类中的connect方法并未提供这种方式,而是使用SocketAddress类来向connect方法传递服务器的IP和端口。SocketAddress只是个抽象类,它除了有一个默认的构造方法外,其它的方法都是abstract的,因此,我们必须使用SocketAddress的子类来建立SocketAddress对象,也就是唯一的子类InetSocketAddress。

2.3 上传文件到FTP服务器

在上传文件过程中,首先需要到服务器的相关目录查看是否存相应目录,如果不存在则创建新目录,然后借助TelnetInputStream把该文件传送到本地。isDirExist(String filePath)函数是判断服务器是否存在相应目录,createDir(String filePath)函数是创建新目录,然后通过changeDirectory(String filePath)函数把远程系统上的目录切换到参数filePath所指定的目录。将远程文件加入输出流中,获取本地文件的输入流,然后接下来就是简单的IO处理。值得注意的是最后应该坚持“谁打开的谁负责关闭”的原则,需要将输入输出流关闭,JAVA不比其它语言JVM启动就注定了它最大占用的内存大小,多个这种不能释放的流最终只能导致整个程序崩溃,如果是一个需要长期使用或者用户流访问量特别大的程序就这么一个流,那就是一个灾难。

到这里为止,完成了向FTP服务器上传文件的功能。sun.net.ftp.FtpClient 可以帮助我们进行一些简单的ftp客户端功能:下载、上传文件。 但如遇到创建目录之类的就无能为力了,这种情况我们只能利用第三方源码。

3 结束语

本文通过对信息系统中FTP大文件上传的研究,基于体系结构的软件开发思想,引入当前比较流行的SSH2框架,使得开发出来的Web程序层次更为清晰,更具良好的用户体验和贴近用户需求。

参考文献:

[1] 张友生. 软件体系结构[M]. 北京: 清华大学出版社, 2006.

[2] 李刚. 轻量级Java EE企业应用实战: Struts 2+Spring 3+Hibernate整合开发[M]. 3版.北京: 电子工业出版社, 2012.