j2ee,jsp,servlet文件下载server端
1.getOutputStream() has already been called for this response
报错的原因:
使用tomcat容器调用response.getOutputStream()方法的时候仅仅可以写二进制文件.
但调用requonse.getWriter()方法时,则仅仅可以在前台打印文本文件.
所以:
假设在jsp页面:
outPutStream.flush();
outPutStream.close();
outPutStream=null;
response.flushBuffer();
out.clear();
out = pageContext.pushBody();
这里out和pageContext是jsp的内置对象;
假设在后台:
假设使用response.getWrter,那么前面仅仅能用response.setContentType("text/html");
假设想用二进制流的方式输出,那么就不都够使用response.setContentType("text/html");
假设是想传输文件,推荐:
response.setContentType("application/x-msdownload;charset=utf-8");
同一时候为了防止乱码,response.setCharacterEncoding("utf-8");
filename = URLEncoder.encode(filename, "utf-8");
文件下载的代码:
public void getDownLoadBook() throws IOException{
response.setCharacterEncoding("utf-8");
String filepath=request.getSession().getServletContext().getRealPath("\\") + "upload\\books\\";
//通过前台bookId,从数据库中取出文件保存的信息
Book book=this.getBookService().getBook(bookId);
if(book==null)
{ response.setContentType("text/html");
PrintWriter writer=response.getWriter();
writer.write("<html><body>");
writer.write("此电子书不存在!");
writer.write("</body></html>");
writer.flush();
writer.close();
return;
}
String filename=book.getSaveName()+"";
java.io.File file = new java.io.File(filepath + filename);
if (!file.exists()) {
response.setContentType("text/html");
PrintWriter writer=response.getWriter();
writer.write("<html><body>");
writer.write("文件不存在!<br/>"+file.getAbsolutePath()+book.getOriginalName()+"不见了!");
writer.write("</body></html>");
writer.flush();
writer.close();
return;
}
response.setContentType("application/x-msdownload;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.setContentLength((int) file.length());
filename=book.getOriginalName();
//编码文件名称,防止乱码
filename = URLEncoder.encode(filename, "utf-8");
response.setHeader("Content-Disposition", "attachment; filename=" +filename);
//得到输出流
javax.servlet.ServletOutputStream out = response.getOutputStream();
// 读取文件流
java.io.FileInputStream fileInputStream = new java.io.FileInputStream(file);
// 下载文件, 设置响应头和下载保存的文件名称
filename=book.getOriginalName();
if (filename != null && filename.length() > 0) {
if (fileInputStream != null) {
int filelen = fileInputStream.available();
文件太大时内存不能一次读出,要循环
int i=4096;
do{
byte a[] = new byte[4096];
i=fileInputStream.read(a);
out.write(a, 0, i);
}while(i>=4096);
}
fileInputStream.close();
out.flush();
out.close();
}
}
j2ee,jsp,servlet文件下载server端的更多相关文章
- JS.中文乱码,Jsp\Servlet端的解决办法
JS.中文乱码,Jsp\Servlet端的解决办法 2010-03-08 15:18:21| 分类: Extjs | 标签:encodeuricomponent 乱码 urldecoder ...
- Eclipse JSP/Servlet 环境搭建
Eclipse JSP/Servlet 环境搭建 本文假定你已安装了 JDK 环境,如未安装,可参阅 Java 开发环境配置. 我们可以使用 Eclipse 来搭建 JSP 开发环境,首先我们分别下载 ...
- JSP/SERVLET新手教程--Servlet 使用入门
如今的JSP书籍有的是直接讲述JSP的使用,然后再解说SERVERLET的使用;也有书籍是先讲述SERVERLET的使用,然后解说JSP使用.个人觉得另外一种相对好一些,至于原因大家能够在学习体会到! ...
- JSP-Runood:Eclipse JSP/Servlet 环境搭建
ylbtech-JSP-Runood:Eclipse JSP/Servlet 环境搭建 1.返回顶部 1. Eclipse JSP/Servlet 环境搭建 本文假定你已安装了 JDK 环境,如未安装 ...
- JSP/Servlet基础语法
相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...
- JSP/Servlet 中的汉字编码问题
JSP/Servlet 中的汉字编码问题 1.问题的起源 每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的 ASCII,中国的 GB2312 -80,日本的 JIS 等,作为该国家/区 ...
- JSP&Servlet学习手册
JSP&Servlet学习手册 沙琪玛 书 目录 JSP 指令... 3 书写方式... 3 指令列表... 3 JSP 内置对象... 3 内置对象特点... 3 常用内置对象... 3 o ...
- Java Web 开发的JavaBean + Servlet + Sql Server
日期:2018.12.9 博客期:026 星期日 我知道对于每个人都需要对开发web进行了解,而我们常用的技术,也应该有所了解 /*<------------------->*/知识点: ...
- 软件架构设计学习总结(18):MVC三层架构在各框架(jsp+servlet + Struts1+ Struts2+ springMVC)中的特征
1.基于web开发中最原始的jsp+Servlet 图形化理解jsp+servlet结构: 1.从结构上分析jsp+servlet图解原理: 在基于mvc设计模式下的最原始的jsp+Servlet ...
随机推荐
- while my time-- , will the meaning++?
// while my time--,will the meaning++? // However,what's the meaning of life ? while(tomorrow>0){ ...
- Tensorflow 学习笔记 -----gradient
Tensorflow 的求梯度函数: [db, dW, dx] = tf.gradient(C, [b, w, x]) 在调试时用处较大. 实例: import tensorflow as tf im ...
- python note #2
This passage will talk about some small but pretty important knowledge points, including using metho ...
- ReadyAPI/soapUI发送post请求json格式(带有中文字符),后台获取参数为空
解决:请求编码格式默认为空,在"TestCase"的指定Step的Request Properties中, 改Encoding编码格式为UTF-8. 原文:soapUI发送post ...
- 处理SpringMVC的时间错误:Field error in object 'sysDatumedetai' on field 'storagetime': rejected value [2017-11-27];
错误: 十一月 27, 2017 8:26:11 下午 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service ...
- AJAX 前后端交互 验证信息是否正确
1.前段: function checkPtCode(obj){ $.ajax({ type: "post", url: "xxxxxxx", data: {& ...
- 【Henu ACM Round#18 C】Ilya and Sticks
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用cnt[i]记录数字i出现的次数就好. 然后i从1e6逆序到1 如果cnt[i+1]和cnt[i]>0同时成立的话. 那么得 ...
- 【Henu ACM Round#15 E】 A and B and Lecture Rooms
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 最近公共祖先. (树上倍增 一开始统计出每个子树的节点个数_size[i] 如果x和y相同. 那么直接输出n. 否则求出x和y的最近 ...
- 第一个ASP.NET
1.新建 2.发布 3.访问
- Android 学习笔记之Bitmap位图虽触摸点移动
package xiaosi.bitmap; import android.app.Activity; import android.os.Bundle; public class mianActiv ...