浅谈在JSP中实现文件下载以及统计下载次数

时间:2022-10-07 03:45:54

浅谈在JSP中实现文件下载以及统计下载次数

摘 要: Java不依赖平台的特点使得它受到了广泛的关注,许多和java相关的优秀技术不断出现,JSP(Java Server Page)就是其中之一。我们应用JSP能够开发出动态的、高性能的、安全的跨平台的网站。在网站中实现文件的上传、下载的技术也非常普遍。

关键词:OutoutStream(输出流);InputStream(输入流);JavaBeans;response;MIME(Multipurpose Internet Mail Extensions,多目的Internet邮件扩展)

引言

当今利用JSP语言制做网站的技术备受青睐。因此我们的设计也就选择了应用JSP开发了我们的“软件开发小组辅助交流系统”。我在这里简单地就文件下载以及如何统计下载次数谈论一下自己的想法。

一、简单的介绍一下Java中的InputStream(输入流)和OutputStream(输出流)

java.io包提供大流量的流类。Java的I/O流提供一条通道程序,可以使用这条通道把源中的数据传送到目的地。我们把输入流的指向称作源,程序从指向源的输入流中读取源中的数据。而输出流的指向是数据要去的一个目的地,程序通过向输出流中写入数据把信息传送到目的地。请看下面的输入流和输出流工作示意图:

二、阐述JSP中实现文件下载可以使用的几种方法:

通过对JSP的学习和在设计过程中的经验,我认为在JSP中实现文件的下载可以使用下面的3种办法。

2.1使用超级链接直接连接到文件的物理地址

利用这种办法实现对文件的下载很简单,我们可以从数据库中读出每一个文件的相关信息以列表的形式输出到网页上。然后我们可以选择其中的一项信息做成超级链接直接连接到这个文件所在的物理地址。程序代码如下:

其中(String)rs.getString(“file_name”)是我们要下载的文件的名字。而就是输出到网页中的一个变量名,这里是文件名。就是它直接超级链接到这个物理文件所在的路径(这里用的是相对路径)。那么当我们点击这个超级链接时便可以对该文件进行下载了。这种办法很简单,但是它存在一些缺陷,通常情况下当我们左键点击该超级链接时就会直接打开该文件,因为我们访问的是远端的服务器上的文件,所以速度特别慢。还有,这种下载文件的方法我们不容易统计下载次数。所以,我没有采用这种办法做文件下载。

2.2使用网站提供的SmartUpload组件实现文件下载

这种方法也非常简单,我们只要登陆这个站点下载这个SmartUpload组件,因为我们是利用JSP开发我们的系统,而且这个组件是一个编译好的JavaBeans,所以我们必须把这个组件放在我们建好的web站点下的虚拟目录下的WEB-INF文件夹下的classes文件夹下,然后我们只要用记事本或者UltraEdit简单地编写以下几行代码就可以轻松实现文件下载。

import="com.jspsmart.upload.*" %>

// 新建一个SmartUpload对象

SmartUpload su = new SmartUpload();

// 初始化

su.initialize(pageContext);

// 设定contentDisposition为null以禁止浏览器自动打开文件,

//保证点击链接后是下载文件。若不设定,则下载的文件扩展名为

//doc时,浏览器将自动用word打开它。扩展名为pdf时,

//浏览器将用acrobat打开。

su.setContentDisposition(null);

// 下载文件

su.downloadFile("/upload/被下载的文件.doc");

%>

我们利用这个JavaBeans组件可以很轻松地实现文件的上传和下载。

2.3使用Java中的OutputStream(输出流)对文件进行下载

JSP内置对象response调用方法getOutputStream()可以获取一个指向客户的输出流,服务器将文件写入这个流,客户端就可以下载这个文件了。当JSP页面提供下载功能时,应当使用response对象向客户端发送HTTP头信息,说明文件的MIME(Multipurpose Internet Mail Extensions,多目的Internet邮件扩展)类型,这样客户端的浏览器就会调用相应的外部程序打开下载的文件。例如,Ms-Word文件的MIME类型是application/msword, pdf文件的MIME类型是application/pdf。还有几点特别要注意的是,执行下载的页面,在JSP代码范围之外(即之外),不能包含任何HTML代码、空格、回车或换行等字符,如果有的话将不能正确下载。因为它影响了返回给浏览器的数据流,导致解析出错。我在一开始编写下载这部分代码时,就出现了这种错误。当我在浏览器里打开这个JSP页就提示有这种OutputStream错误,后来我还是通过上网查找资料找到了问题的症结所在,我把所有的HTML代码都删除,最后问题终于解决了。

例如下面的程序(loadfiles.jsp)就是用这种办法实现文件下载的。

上一篇:开放国际资本账户应当慎重 下一篇:正确认识民航发展建设和谐航空需共同努力