1.使用HttpServletResponse实现
Servlet代码:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//创建要下载的文件的对象(参数为要下载的文件在服务器上的路径)
File serverFile=new File("D:/myText.doc");
//设置要显示在保存窗口的文件名,如果文件名中有中文的话,则要设置字符集,否则会出现乱码。另外,要写上文件后缀名
String fileName=java.net.URLEncoder.encode("Java编程思想最新版.doc","utf-8");
//该步是最关键的一步,使用setHeader()方法弹出"是否要保存"的对话框,打引号的部分都是固定的值,不要改变
response.setHeader("Content-disposition","attachment;filename="+fileName);
/*
* 以下四行代码经测试似乎可有可无,可能是我测试的文件太小或者其他什么原因。。。
*/
response.setContentType("application/msword");
//定义下载文件的长度 /字节
long fileLength=serverFile.length();
//把长整形的文件长度转换为字符串
String length=String.valueOf(fileLength);
//设置文件长度(如果是Post请求,则这步不可少)
response.setHeader("content_Length",length);
/*
*以上内容仅是下载一个空文件
*以下内容用于将服务器中相应的文件内容以流的形式写入到该空文件中
*/
//获得一个 ServletOutputStream(向客户端发送二进制数据的输出流)对象
OutputStream servletOutPutStream=response.getOutputStream();
//获得一个从服务器上的文件myFile中获得输入字节的输入流对象
FileInputStream fileInputStream=new FileInputStream(serverFile);
byte bytes[]=new byte[1024];//设置缓冲区为1024个字节,即1KB
int len=0;
//读取数据。返回值为读入缓冲区的字节总数,如果到达文件末尾,则返回-1
while((len=fileInputStream.read(bytes))!=-1)
{
//将指定 byte数组中从下标 0 开始的 len个字节写入此文件输出流,(即读了多少就写入多少)
servletOutPutStream.write(bytes,0,len);
}
servletOutPutStream.close();
fileInputStream.close();
}
注1:setContentType(String type)方法里的参数type是指一个用于指定文件内容的
MIME类型
常见的MIME类型及含义:
text/html 超文本标记语言文本(.html)
text/plain 普通文本(.txt)
image/gif GIF图形(.gif)
image/jpeg JPEG图形(.jpeg或.jpg)
video/x-msvideo AVI文件(.avi)
application/zip zip压缩包(.zip)
application/msword word文档(.doc)
application/vnd.ms-excel excel文档(.xls)
audio/x-mpeg mp3音乐文件(.mp3)
jsp代码:
<body>
<center>
<form action="DownLoadServlet" method="post">
<a href="javascript:document.forms[0].submit()">单击下载</a>
</form>
</center>
</body>
分享到:
相关推荐
Java文件路径详解
、基本语法规则、面向对象核心技术、数组和集合、异常处理、文件和数据流、图形用户界面、线程、网络编程和数据库程序设计。_x000D_本书以初学者为 起点,每个章节循序渐进地向读者介绍了Java相关核心知识,并设计...
Java对各种文件的操作详解,要的快下哦
java锁详解.pdf
JAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.doc
JSch - Java实现的SFTP(文件上传详解篇)
JAVA异常详解.docJAVA异常详解.docJAVA异常详解.docJAVA异常详解.docJAVA异常详解.docJAVA异常详解.docJAVA异常详解.docJAVA异常详解.docJAVA异常详解.docJAVA异常详解.doc
文档中详细讲述java基础知道,对刚入门或入门不久的职场人非常有帮助。
Java 把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的 一些基本类型的变量和对象的引用变量都是在函数 的栈内存中分配。当在一段代码块中定义一个变量时,java 就在栈中 为这个变量分配内存空间...
100多篇与设计模式学习相关的文章,涵盖了七个面向对象设计原则和24个设计模式(23个GoF设计模式 + 简单工厂模式)
Java Web开发详解:XML+XSLT+Servlet+JSP深入剖析与实例应用.....清晰版... 共12个压缩文件
根据张孝祥视频内容,进行了个人的理解以及注释,分析,同时将自己写的测试用的主要代码和理解写在了文档中。由于第一课和第二课是没什么技术的部分,只是简单的概括,所以,笔记丛第三课开始,不要误认为这个是不...
032003_【第20章:Java新IO】_文件锁笔记.pdf 032004_【第20章:Java新IO】_字符集笔记.pdf 032005_【第20章:Java新IO】_Selector笔记.pdf 042101_【课程讲解】_附录:Eclipse开发工具笔记.pdf 050101_〖开发实例〗...
就是java多线程的编码实现以及自己整理的文档
该资源详细介绍了java调用dll方法和里面需要注意的一下注意事项,希望这个资源能帮助到大家,大家共同学习进步!
java集合详解.pdf
本文档是关于SimpleDB JAVA API 文档详解的文档,可以建立, 查询,删除,修改domain, item, attribute等功能,强烈建议学习
从Java1.1开始引入了内部类以来,它就引起了人们的激烈争论。其实任何优秀的语言特性用得不好就是滥用,内部类用得不好就会导致代码像迷宫一样,导致出现毫无重用的综合征。...本文档讲述Java内部类的规则及应用
最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。 搭建环境 将下载后的文件解包...
本文档详细描述java开发串口通信的步骤。例子代码描述的很详细。希望对大家能有帮助