- 浏览: 243699 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
thepastsee:
304572183股票交流 欢迎加入
实时股票 -
345161974:
很不错,我第一个接触的CSS卡片布局效果,多谢
css卡片效果
jsp下载文件
文章分类:Java编程
jsp中实现文件下载
最简单的方式是在网页上做超级链接,如:<a href="music/abc.mp3">点击下载</a>。但是这样服务器上的目录资源会直接暴露给最终用户,会给网站带来一些不 安全的因素。
因此可以采用其它方式实现下载,可以采用:
1、RequestDispatcher的方式进行;
2、采用文件流输出的方式下载。
1、采用RequestDispatcher的方式进行
jsp页面中添加如下代码:
<%
response.setContentType("application/x-download");//设置为下载application/x-download
String filedownload = "/要下载的文件名";//即将下载的文件的相对路径
String filedisplay = "最终要显示给用户的保存文件名";//下载文件时显示的文件保存名称
filenamedisplay = URLEncoder.encode(filedisplay,"UTF-8");
response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);
try
{
RequestDispatcher dis = application.getRequestDispatcher(filedownload);
if(dis!= null)
{
dis.forward(request,response);
}
response.flushBuffer();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
}
%>
2、采用文件流输出的方式下载
<%@page language="java" contentType="application/x-msdownload" pageEncoding="gb2312"%>
<%
//关于文件下载时采用文件流输出的方式处理:
//加上response.reset(),并且所有的%>后面不要换行,包括最后一个;
response.reset();//可以加也可以不加
response.setContentType("application/x-download");
String filedownload = "想办法找到要提供下载的文件的物理路径+文件名";
String filedisplay = "给用户提供的下载文件名";
filedisplay = URLEncoder.encode(filedisplay,"UTF-8");
response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);
OutputStream outp = null;
FileInputStream in = null;
try
{
outp = response.getOutputStream();
in = new FileInputStream(filenamedownload);
byte[] b = new byte[1024];
int i = 0;
while((i = in.read(b)) > 0)
{
outp.write(b, 0, i);
}
outp.flush();
}
catch(Exception e)
{
System.out.println("Error!");
e.printStackTrace();
}
finally
{
if(in != null)
{
in.close();
in = null;
}
if(outp != null)
{
outp.close();
outp = null;
}
}
%>
对于第二种方法,我认为应该是比较常用的。不过有几个地方是值得我们注意的:
一、采用第二种方法的主要优点是实际文件的存放路径对客户端来说是透明的。
这个文件可以存在于任何你的服务器能够取得到的地方,而客户端不一定能直接得到。例如文件来自于数据库或者内部网络的一个FTP服务器。还句话说,这种方式可以实现隐藏实际文件的URL地址。
二、为了防止客户端浏览器直接打开目标文件(例如在装了MS Office套件的Windows中的IE浏览器可能就会直接在IE浏览器中打开你想下载的doc或者xls文件),你必须在响应头里加入强制下载的MIME类型:
response.setContentType("application/force-download");//设置为下载application/force-download
这样,就可以保证在用户点击下载链接的时候浏览器一定会弹出提示窗口来询问你是下载还是直接打开并允许你选择要打开的应用程序,除非你设置了浏览器的一些默认行为。
或者,你想让客户端自行处理各种不同的文件类型,你可以在服务器的配置文件中配置MIME类型映射,通过简单的判断文件后缀名来处理。例如,在Tomcat中设置MIME响应类型:
如果文件在客户端中的响应程序类型和期望不一致,修改$TOMCAT_HOME\conf\web.xml文件中的如下部分 :
<mime-mapping>
<extension>zip</extension>
<mime-type>application/zip</mime-type>
</mime-mapping>
<mime-mapping>
<extension>mht</extension>
<mime-type>message/rfc822</mime-type>
</mime-mapping>
……
三、在响应头中尽量不要设置浏览器缓存期限。
有
时候用户在点击了下载链接后,在弹出窗口中,用户想直接点击“打开”,而不想保存到指定路径。这时候如果我们在响应头中限制了不允许使用浏览器缓存(即总
是刷新),在IE浏览器中我们将无法直接打开该文件。因为限制了不允许使用缓存,浏览器无法将文件保存到临时文件夹(即缓存)。
也就是说,在响应头中不要进行如下的设置(已注释):
//response.addHeader("pragma","NO-cache");
//response.addHeader("Cache-Control","no-cache");
//response.addDateHeader("Expries",0);
四、文件名为中文或其他unicode字符时的处理。
有时候提供下载的文件名中包含中文字符或者其他unicode字符,会导致浏览器无法正确的采用默认的文件名保存文件。我们应该记住在响应头中包含filename字段并采用ISO8859-1编码(推荐)或者采用UTF-8编码:
response.setHeader("Content-disposition","attachment;
filename="+new String(filename.getBytes("UTF-8"),"iso8859-1"));
//采用ISO8859-1编码
response.setHeader("Content-disposition","attachment; filename="+URLEncoder.encode(filename, "UTF-8")); //采用UTF-8编码
但是,这种方式在不同的浏览器中表现也有所不同。例如在IE和Firefox中,采用ISO8859-1编码可以正确显示文件名,而在Opera中不管采用那种编码,默认保存的文件名都无法做到正确显示。
所以最好的方法其实就是尽量在文件名中使用ascii编码。
五、由于采用流的方式进行输入输出,我们必须保证在使用完毕后关闭流的资源。
一般我们把关闭流的操作放在finally块中,以保证在程序段结束前一定会关闭流的资源:
InputStream is = null;
ServletOutputStream sos = null;
try {
is = ...; //通过某种方式读进数据到输入流
sos = response.getOutputStream(); //打开输入流
byte[] buff = new byte[2048];
int bytesRead;
while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
sos.write(buff,0,bytesRead);
sos.flush();
}
} catch(IOException ex) {
//TODO something with IOException
} catch(Exception ex) {
//TODO something with Exception
} finally {
if(is != null) {
is.close(); //关闭输入流
}
if(sos != null) {
sos.close(); //关闭输入流
}
}
发表评论
-
jdbc_连接池_转
2012-02-19 22:49 0http://z466459262.iteye.com/bl ... -
java_贪吃蛇——
2012-01-17 11:14 872ADADS -
java并发重构ppt_转温 少
2011-06-23 16:04 726ooooo -
GBK_UTF-8_转
2011-06-21 11:15 1559转 http://www.iteye.com/topi ... -
单例模式七种写法_转
2011-05-26 23:19 799kjljkl -
设计模式_code_转转转
2011-05-25 17:14 724kljlj -
java_字符串操作——插入、替换、删除_转
2011-03-18 18:38 1255字符串操作——插入、替换、删除 ... -
mysq 存储过程技术手册
2011-02-17 22:49 468jklkj -
mysql专家_分析pdf
2011-02-17 20:43 864dfasdfasdf -
成均科技_面试
2011-02-16 17:38 855成均科技: XmlHttpRequest 浏览器对 ... -
java 学习方向
2011-01-26 16:56 699http://newleague.iteye.com/ ... -
多线程背课__售票_转转转
2011-01-25 10:19 778票真难买呀,咋回个家就怎么难呢? 这几天学习了下线程, ... -
web 项目_ log4j__转转java3Z
2011-01-18 22:16 1033在web应用中使用日志工具log4J ... -
汉字排序_java_转转
2011-01-15 17:09 904java中漢字按拼音排序 ... -
ecilpse_apanta_
2011-01-15 00:11 1063<!-- [if gte mso 9]><x ... -
linux_virutalBox_固定ip_转转
2011-01-12 21:35 961Windows XP通过Sun VirtualBox ... -
存储过程_转转转 _ibatis
2011-01-04 21:14 1309作者:袁光东 我们在进行pl/sql编程时打交道最多的 ... -
J2EE项目异常处理_转
2011-01-04 21:08 705J2EE 项目异常处理 ... -
防盗链_图片
2010-12-30 08:57 887做个图片的防盗链 ... -
java 缩略图__转
2010-12-24 00:29 744//----------------------------- ...
相关推荐
标题"BBS.rar_bbs jsp_jsp access_jsp bbs_jsp netbeans_netbeans jsp"揭示了这个压缩包文件包含的是一个基于JSP技术构建的论坛系统(BBS),并且使用了Access数据库以及NetBeans IDE 6.1作为开发环境。描述中提到的...
【标题】"jsp.rar_jsp 网站_jsp网站_博客_博客 jsp_博客系统jsp" 提供的信息表明,这是一个与 JSP(JavaServer Pages)相关的压缩包,里面包含了一个 JSP 开发的博客网站系统。JSP 是一种基于 Java 的服务器端脚本...
在本例中,“JSP.zip_jsp userinfo_jsp增删_jsp实现增删改”是一个关于JSP的实践项目,主要涉及用户信息的管理,包括增加、删除和修改功能。 **userinfo_jsp** "userinfo_jsp"可能是指用于处理用户信息的JSP页面。...
本FAQ(Frequently Asked Questions,常见问题解答)项目就是利用JSP来实现一个在线问答系统,让我们详细探讨一下这个项目中的关键知识点。 1. **JSP基础**: - JSP文件本质上是HTML文件,其中嵌入了Java代码。当...
这个名为"jsp-email.rar_email send java jsp_jsp email_jsp 邮件_邮件 jsp_邮件 附件"的压缩包包含了一个简单的示例,通过Servlet辅助JSP来完成邮件发送任务。 1. **邮件发送基础** 在Java中,我们通常使用...
JSP文件上传下载是Web应用中常见的功能,对于用户来说,能够上传和下载文件是交互性的重要体现。在JSP中实现文件上传通常涉及以下步骤: 1. 创建表单:在JSP页面中创建一个HTML表单,包含`<input type="file">`元素...
`jsp1.rar_jsp blob_jsp 图片_mysql blob_图片 MySQL`这个标题和描述指向了一个具体的场景:使用JSP(JavaServer Pages)从MySQL数据库中读取存储为BLOB(Binary Large Object)类型的图片数据。 首先,我们来理解...
JSP文件管理器是一个应用程序,它允许用户通过Web界面查看、上传、下载、删除和管理服务器上的文件。这样的系统在共享文件、协作工作或远程访问文件时非常有用。 ### JSP核心概念 1. **页面元素**:JSP页面由静态...
**JSP网上商城项目概述** 本项目是一个基于JavaServer Pages(JSP)技术构建的网上商城,旨在提供一个全面的电子商务解决方案。JSP是Java平台上的动态网页开发技术,允许开发者将HTML、CSS、JavaScript与Java代码...
【标题】"jsp__demo2.zip" 涉及的核心知识点是JSP中的PageContext对象,它是JavaServer Pages(JSP)技术中的一个重要组件。PageContext对象为JSP页面提供了全局访问请求、响应以及页面范围内的属性的能力。在这个...
【标题】"web_jsp.rar" 是一个包含JSP(JavaServer Pages)技术的网站源码压缩包,专为web开发而设计。JSP是一种基于Java的动态网页技术,允许开发者将HTML、CSS、JavaScript与Java代码混合编写,实现服务器端的动态...
综上所述,"JSP.rar_jsp 验证码_论坛 jsp_论坛系统 JSP"这个项目是一个典型的JSP应用实践,涵盖了JSP的基础知识、动态页面生成、用户交互、安全机制等多个方面,对于学习和理解JSP开发有着重要的参考价值。
在网页开发中,JavaServer Pages (JSP) 是一种常用的技术,用于创建动态网页。在JSP中,我们经常需要生成随机数据,比如在实现验证码功能时,就需要生成一组随机的数字或字母组合。本教程将详细介绍如何在JSP中使用`...
【标题】"jspupload.rar_OCR_java ocr_jsp_jsp 验证码_验证码 识别" 提供了一个基于JSP和Servlet实现的OCR(Optical Character Recognition,光学字符识别)系统,主要用于处理验证码的识别。这个系统允许用户通过...
【JSP.rar_jsp_jsp 票_电影订票系统】这个压缩包文件主要包含了一个基于JSP技术开发的电影订票系统。JSP(Java Server Pages)是Java平台上的一个服务器端脚本语言,它允许开发者在HTML或者XML文档中嵌入Java代码,...
**JSP技术详解** JSP(JavaServer Pages)是一种基于Java技术的动态网页开发标准,由Sun Microsystems(现已被Oracle收购)在1999年推出。它允许开发者将静态内容与动态逻辑相分离,提高了Web应用的开发效率。JSP...
【JSP 毕业设计】是一个典型的Web应用开发项目,主要使用Java Server Pages(JSP)技术来实现。JSP是一种动态网页开发技术,它允许开发者在HTML或XML文档中嵌入Java代码,实现服务器端的动态内容生成。在这个项目中...
【JSP技术详解】 JSP(JavaServer Pages)是Java平台上的一个重要技术,它是一种用于创建动态网页的服务器端技术。JSP的核心理念是将HTML(或XML)模板与Java代码分离,使得开发者可以专注于页面的展示逻辑,而将...
JSP2.0鼓励减少脚本片段的使用,转而采用EL和JSTL。 - **生命周期**:JSP页面经历加载、解析、编译、初始化、服务和销毁六个阶段,理解这些阶段对于优化性能至关重要。 - **动作(Actions)**:`jsp:include`, `...
**JSP(Java Server Pages)** 是一种动态网页技术,由Sun Microsystems开发,现在由Oracle公司维护。它允许Web开发者将HTML代码与Java代码结合在一起,以创建交互式的Web应用程序。JSP的核心概念是分离了内容的呈现...