servlet文件下载实例剖析
package mypack; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class DownloadServlet extends HttpServlet{
private static final long serialVersionUID = 4024665488257648284L;
public void doGet(HttpServletRequest request,HttpServletResponse response) {
OutputStream out = null;
InputStream in;
String filename = request.getParameter("filename");
if(filename == null){
try {
out = response.getOutputStream();
out.write("please input filename.".getBytes());
out.close();
return ;
} catch (IOException e) {
e.printStackTrace();
} }
in = getServletContext().getResourceAsStream("/store/" + filename);
try {
int length = in.available();
response.setContentType("application/force-download");
response.setHeader("Content-Length", String.valueOf(length));
response.setHeader("Content-Disposition", "attachment;filename=\""+filename+"\"");
} catch (IOException e) {
e.printStackTrace();
}
try {
out = response.getOutputStream();
int bytesRead = ;
byte[] buffer = new byte[];
while((bytesRead = in.read(buffer)) != -){
out.write(buffer,,bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
} try {
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
} } }
在练习servlet下载例子的时候,刚才报了一个clinetabortException错误。百度了一下说点击取消的时候才有这个错误,可是我明明点击的是下载。
于是回过头来再次检查代码,发现byte定义的大小有问题于是定义了一个大的,下载1G的压缩文件。
1. byte
java中的基本数据类型byte,占用1个字节,8位
取值范围:0000 0000 ~ 1111 1111 (-128 ~ 127)
为什么不是:0000 0000 ~ 1111 1111 呢?
最高位为符号位,正数的符号位0,负数为1
1111 1111 表示负数的最大值:-1
负数的二进制 = 正数(该数的绝对值)的二进制反码 + 1
例如:-5
第一步取绝对值:-5 的绝对值:5
第二步转二进制:5的二进制:0000 0101
第三步取反码: 0000 0101 的反码 1111 1010
第四步加一: 1111 1010 加一 1111 1011
byte数组长度最大多少,百度了一下没有确切的大小,后面测试一下。
servlet文件下载实例剖析的更多相关文章
- Seq_file文件系统实例剖析
http://blog.chinaunix.net/uid-24432676-id-2607766.html 另 http://www.cnblogs.com/qq78292959/archive/2 ...
- Android实例剖析笔记(四)
摘要:分析NoteEditor这个类和以及Content Provider机制 NoteEditor深入分析 首先来弄清楚“日志编辑“的状态转换,通过上篇文章的方法来做下面这样一个实验,首先进入“日志 ...
- servlet 文件下载
[本文简介] 一个servlet 文件下载 的简单例子. [文件夹结构] [java代码] package com.zjm.www.servlet; import java.io.BufferedIn ...
- 基于栈的指令集与基于寄存器的指令集详细比对及JVM执行栈指令集实例剖析
基于栈的指令集与基于寄存器的指令集详细比对: 这次来学习一些新的概念:关于Java字节码的解释执行的一种方式,当然啦是一些纯理论的东东,但很重要,在之后会有详细的实验来对理论进行巩固滴,下面来了解一下 ...
- Spring4 MVC文件下载实例
这篇文章将向您展示如何使用Spring MVC4执行文件下载,我们将看到应用程序从文件系统内部以及外部文件下载文件. 本教程的主要亮点: 下载文件是相当简单的,涉及以下步骤. 创建一个InputStr ...
- Servlet单实例多线程模式
http://kakajw.iteye.com/blog/920839 前言:Servlet/JSP技术和ASP.PHP等相比,由于其多线程运行而具有很高的执行效率.由于Servlet/JSP默认是以 ...
- java/struts/Servlet文件下载与ftp文件上传下载
1.前端代码 使用超链接到Struts的Action或Servlet <a target="_blank" href="ftpFileAction!download ...
- 深入浅出Java MVC(Model View Controller) ---- (JSP + servlet + javabean实例)
在DRP中终于接触到了MVC,感触是确实这样的架构系统灵活性不少,现在感触最深的就是使用tomcat作为服务器发布比IIS好多了,起码发布很简单,使用起来方便. 首先来简单的学习一下MVC的基础知识, ...
- Android实例剖析笔记(一)
摘要:用实例讲解Andriod的开发过程 开卷语 俗话说,“熟读唐诗三百首,不会作诗也会吟”.最近收集了很多Android的示例代码,从这些代码的阅读和实验中学习到很多知识,从而产生写这个系列的打算, ...
随机推荐
- SQL语句(十九)——存储过程(练习)
select * From Student select * From Course select * from SC --INSERT INTO SC (Sno, Cno, Grade) --VAL ...
- Linux下安装PHP的lua扩展库
一.安装Lua 5.3.4 下载 http://www.lua.org/ftp/lua-.tar.gz tar xvf lua-.tar.gz cd lua- 重要:进入解压缩后的路径 cd .../ ...
- angularJS $http $q $promise
一天早晨,爹对儿子说:“宝儿,出去看看天气如何!” 每个星期天的早晨,爹都叫小宝拿着超级望远镜去家附近最高的山头上看看天气走势如何,小宝说没问题,我们可以认为小宝在离开家的时候给了他爹一个promis ...
- 51nod1312 最大异或和
题目来源: TopCoder 基准时间限制:1 秒 空间限制:131072 KB 分值: 320 有一个正整数数组S,S中有N个元素,这些元素分别是S[0],S[1],S[2]...,S[N-1]. ...
- 【AtCoder】ARC095 E - Symmetric Grid 模拟
[题目]E - Symmetric Grid [题意]给定n*m的小写字母矩阵,求是否能通过若干行互换和列互换使得矩阵中心对称.n,m<=12. [算法]模拟 [题解]首先行列操作独立,如果已确 ...
- 用代码从文件中导入数据到SQL Server
引言 导入数据到SQL Server 是常见的需求,特别是定期导入这种需求. 对于定期导入主要有以下几种方式可选择: Bulk Insert Bcp Utility OpenRowSet 写程序导入( ...
- atan2 atan
atan2 definition In terms of the standard arctan function, whose range is (−π/2, π/2), it can be exp ...
- 10 Useeful Tips for Writing Effective Bash Scripts in Linux
1.Always Use Comments in Scripts2.Make a Scripts exit When Fails Sometimes bash may continue to e ...
- CSS ... 文本溢出用省略号代替
{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap } text-overflow 属性规定当文本溢出包含元素时发生的事情. c ...
- linux下定时器介绍2--timer_create等函数集的使用示例
程序1:采用新线程派驻的通知方式 程序2:通知方式为信号的处理方式 #include <stdio.h>#include <time.h>#include <stdlib ...