Servlet 下载文件
这几天有点懒散,还好没有忘记看书,上周去了国家图书馆翻阅了一些和Java相关的书籍,其实这些书都是自己以前看过或者听过,按理来说,不应该看自己已经看过的书籍,应该找一些最新的书籍去看,但是每次走到书架前,我都忍不住驻留几分钟,然后思考要不要将以前看的书再翻阅下,往往我都是被这种心理所战胜,虽然书是相同的书,人是相同的人,但是时间和地点已经不再,看后的感觉也是不一样,读书千万次,千万次的感觉,千万次的想法,我不知道这种读法会有什么好处。
以前读书,一目十行,对于技术的书籍类,直接看下API看下代码,看下如何实现一个功能,而现在缺失十目一行,而且不停的想,有什么办法去实现,然后去看书中的示例,看的过程中往往回想和其它的有没有重叠的,有没有相似的,有没有让人学习的方法,就拿生命周期来说吧,Servlet的生命周期似乎已经滚瓜烂熟,什么init,什么doPost,Destroy,这是开始的时候,因为书籍上是这么说,而自己也就这么记,,其实对于生命周期这些的流程或者逻辑控制,完全自己可以将这些过程写下,在每一个过程中用printIn打印出来(别忘了加上时间标记),相信这种方法比那个死记硬背来的更爽,更直接。
C#中的IHttpHandler也是用来处理Http请求的,而Java中的Servlet也是可以用来处理Http请求的,是否有相似的关系呢?写好后的Servlet 往往是要进行配置的,很多的时候类似一个拦截器,那么IHttpHandler呢?在使用IHttpHandler的时候?是否是也可以配置,让应用程序决定用哪一个?其实是可以的,只不过配置的不是IHttpHandler而是一个IModule的东西,现在想想虽然不是同一个东西,虽然生命周期不一样,但是能隐约感觉到相同的影子。
再来看看JSP,JSP是Servlet的一种简化,使用JSP只需要完成程序员需要输出到客户端的内容,JSP中的Java脚本如何镶嵌到一个类中,也就是说JSP最终是要被编译为一个Class文件,JSP本质上就是一个Servlet,而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。它们两者的区别如下:
1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
3.Servlet中没有内置对象,JSP中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.
下面给一个例子:Servlet下载文件
http://blog.csdn.net/shaojie519/article/details/7361526
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder; import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class DownLoadServlet extends HttpServlet { public DownLoadServlet() {
super();
} public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//处理请求
//读取要下载的文件
File f = new File("E:/好久不见.mp3");
if(f.exists()){
FileInputStream fis = new FileInputStream(f);
String filename=URLEncoder.encode(f.getName(),"utf-8"); //解决中文文件名下载后乱码的问题
byte[] b = new byte[fis.available()];
fis.read(b);
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition","attachment; filename="+filename+"");
//获取响应报文输出流对象
ServletOutputStream out =response.getOutputStream();
//输出
out.write(b);
out.flush();
out.close();
} } /**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
} }
public class DowFileHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
// 打开一个下载对话框
context.Response.ContentType = "image/JPEG";
context.Response.AddHeader("Content-Disposition", "attachment:filename=aaa.jpg");
context.Response.WriteFile("脑残片.jpg");
} public bool IsReusable
{
get
{
return false;
}
}
}
Servlet 下载文件的更多相关文章
- Servlet下载文件迅雷不支持问题真相之一
问题描述 最近在做一个下载文件的Servlet,直接使用浏览器的下载功能,完美支持,结果测试人员使用迅雷下载,就不行了,下载也能成功完成,只是迅雷下载的文件大小是悲催的0KB 真相搜罗 网上有很多帖子 ...
- Servlet下载文件和http响应
下载文件等: 1.得到公共的内容ServletContext sc = this.getServletContext(); 2.在链接名字后面加个? 一个参数?参数1=值 两个参数?参数1=值& ...
- Servlet 下载文件及支持中文文件名
Sevlet 下载pdf文件 支持中文文件名 package html2pdf.controller; import java.io.File; import java.io.FileInputStr ...
- servlet下载文件
package myjava.cn; import java.io.FileInputStream; import java.io.IOException; import java.io.InputS ...
- web下载文件夹
1.文件下载有两种方式:一种是超链接,一种是Servlet提供下载. 2.超链接下载时:当文件可以在网页直接打开时,会直接打开文件,而不是下载,当文件打开不了时,会提供下载窗口. 3.超链接下载原理 ...
- Servlet实现文件,图片等的下载 含代码
实现文件的下载源代码如下: package com.fxl.servlet; import java.io.FileInputStream;import java.io.IOException;imp ...
- Servlet实现文件的下载
(1)项目的主文件夹例如以下:(演示出image和servlet的位置所在) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGxnZW4xNTczODc= ...
- springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)
参与该项目的文件上传和下载.一旦struts2下完成,今天springmvc再来一遍.发现springmvc特别好包,基本上不具备的几行代码即可完成,下面的代码贴: FileUpAndDown.jsp ...
- Servlet 上传下载文件
上传文件 1)在表单中使用表单元素 <input type=“file” />,浏览器在解析表单时,会自动生成一个输入框和一个按钮 2)表单需要上传文件时,需指定表单 enctype 的值 ...
随机推荐
- zabbix3.0.3 设置邮件报警
在zabbix3.0.3 设置报警这里卡了两天.终于解决了,这里我使用的mailx来作为发送邮件的客户端 1.设置mailx发信账号 yum -y install mailx ln -s /bin/m ...
- ajax返回的json内容进行排序
关键方法:sort()用于对数组的元素进行排序. return a.num-b.num是升序: return b.num-a.num;是降序 writeln在输出后面加\n,在文档里是换行,在html ...
- DTcms会员中心添加新页面-会员投稿,获得所有文章并分页
DAL.article.cs /// <summary> /// 自定义:获得查询分页数据 /// </summary> public DataSet GetList(int ...
- 如何开发 Grunt 插件
创建 grunt 插件 准备工作:(node/npm/git 安装,在此不做赘述) yeoman generator 可以自动生成一个插件模板. 安装 yo npm install -g yo 安装 ...
- canvas 的学习
canvas 绘制直线的API有: 1.moveTo()起点坐标. 2.lineTo()绘制的直线 3. fillStyle以及 flii()是绘制实体的 4. strokeStyle 和stroke ...
- Oracle非默认监听的处理会遇到的问题以及处理方法
第一种情况:只是修改默认端口 1.当前监听状态: C:\Windows\system32>lsnrctl status LSNRCTL for 64-bit Windows: Version 1 ...
- Kinetic使用注意点--ellipse
new Ellipse(config) 参数: config:包含所有配置项的对象. { radius: "半径,可以用数字a.数组[a,b]或对象{x:a,y:b}来表示" } ...
- X86 复制本地 生成有问题、类型初始值设定项引发异常
一. 选择项目,右击属性——生成——目标平台 选择x86就可以了. 二. 有的时候你发现你项目中的dll没有生成到本地bin,这时右击它属性,到它引用的地方复制引用dll放到部署环境中,你会发现一样报 ...
- 【BZOJ 2038】[2009国家集训队]小Z的袜子(hose)
Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变 ...
- 滚珠菜单动效-b
原型从网上找的,动效使用了CAAnimation和UIDynamic物理引擎. gitHub :https://github.com/BearRan/FlowMenuAnimation 大致步骤如 ...