0 0

jsp下载文件异常getOutputStream() has already been called for this response5

下面是我的jsp代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%@ page contentType="text/html;charset=utf-8" %>
<%@ page import="java.io.*" %>
<%@ page import="java.net.*" %>

<html>
  <head>
    <title>download file</title>
  </head>

  <body>
    <%
      response.setContentType("text/html");
      javax.servlet.ServletOutputStream ou = response.getOutputStream();
      String filepath = request.getParameter("file_path");
      String filename = new String(request.getParameter("filename").getBytes("ISO-8859-1"),"utf-8").toString();
      java.io.File file = new java.io.File(filepath + filename);
      if(!file.exists()) {
          out.print(file.getAbsolutePath()+" File Not Exist !");
          return;
      }
      java.io.FileInputStream fileInputStream = new FileInputStream(file);
      if (filename != null && filename.length() > 0) {
          response.setContentType("application/x-msdownload");
          response.setHeader("Content-Disposition", "attachment; filename=" + new String(filename.getBytes("utf-8"),"ISO-8859-1") + "");
          if (fileInputStream != null) {
              int filelen = fileInputStream.available();
              byte[] a = new byte[filelen];
              fileInputStream.read(a);
              ou.write(a);
          }
          fileInputStream.close();
          ou.close();
      }
      out.clear();
      out = pageContext.pushBody();   
    %>
  </body>
</html>

下面是异常:
严重的: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
       at org.apache.catalina.connector.Response.getWriter(Response.java:611)


在网上查了,说加上后面2局就可以,但是我加了也报异常!
请各位帮看下,在线苦等,谢谢!
快没分了,不知道以后没分还能不能提问...
2012年8月27日 21:02

2个答案 按时间排序 按投票排序

0 0

送你个下载demo吧。我测试通过了,没有异常

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>  
<%@ page contentType="text/html;charset=utf-8" %>  
<%@ page import="java.io.*" %>  
  
<html>  
  <head>  
    <title>download file</title>  
  </head>  
  
  <body>  
<%
	response.setContentType("text/html");  
	OutputStream o = response.getOutputStream();
	byte b[] = new byte[5000];
	File fileLoad = new File("d:/book.doc");
	response.setContentType("application/x-msdownload");

	response.setHeader("content-disposition",
			"attachment; filename=book.doc");
	long fileLength = fileLoad.length();
	String length1 = String.valueOf(fileLength);
	response.setHeader("Content_Length", length1);
	FileInputStream in = new FileInputStream(fileLoad);
	int n;
	while ((n = in.read(b)) != -1) {
		o.write(b, 0, n);
	}

	in.close();
	out.clear();
	out = pageContext.pushBody();
%>
  </body>  
</html> 


//需要修改的地方:
File("d:/book.doc");
filename=book.doc");

2012年8月29日 21:51
0 0

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %><%@ page contentType="text/html;charset=utf-8" %><%@ page import="java.io.*" %><%@ page import="java.net.*" %><%
      response.setContentType("text/html");
      javax.servlet.ServletOutputStream ou = response.getOutputStream();
      String filepath = request.getParameter("file_path");
      String filename = new String(request.getParameter("filename").getBytes("ISO-8859-1"),"utf-8").toString();
      java.io.File file = new java.io.File(filepath + filename);
      if(!file.exists()) {
          out.print(file.getAbsolutePath()+" File Not Exist !");
          return;
      }
      java.io.FileInputStream fileInputStream = new FileInputStream(file);
      if (filename != null && filename.length() > 0) {
          response.setContentType("application/x-msdownload");
          response.setHeader("Content-Disposition", "attachment; filename=" + new String(filename.getBytes("utf-8"),"ISO-8859-1") + "");
          if (fileInputStream != null) {
              int filelen = fileInputStream.available();
              byte[] a = new byte[filelen];
              fileInputStream.read(a);
              ou.write(a);
          }
          fileInputStream.close();
          ou.close();
      }
      out.clear();
      out = pageContext.pushBody();   
    %>


删除所有空行 和 html 内容,,因为这些元素 其实会调用 getWriter().out()输出的

2012年8月27日 22:15

相关推荐

    getOutputStream() has already been called for this response 错误解决

    在Java Web开发中,"getOutputStream() has already been called for this response" 是一个常见的错误,通常出现在使用Servlet或JSP时。这个错误意味着在HTTP响应中,`getOutputStream()`已经被调用,然后尝试再次...

    tomcat6下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法

    1.在tomcat6.0下jsp出现getOutputStream() has already been called for this response异常的原因和解决方法  在tomcat6.0下jsp中出现此错误一般都是在jsp中使用了输出流(如输出图片验证码,文件下载等),没有...

    验证码出现getOutputStream()问题解决

    验证码出现getOutputStream() has already been called for this response错误解决

    java.lang.IllegalStateException: getOutputStream() has already解决办法

    纠结了半天的 java.lang.IllegalStateException: getOutputStream() has already。这个问题困扰了半天,在网上查阅了大量资料 出这个错误一般就是下面2个.....

    JSP彩色验证码

    解决了getOutputStream() has already been called for this response. 并将产生验证码的逻辑从JSP页面中分离出来,单独写了一个类 便于重用。

    Cannot forward after response has been committed

    "Cannot forward after response has been committed" 是一个在Java Web开发中常见的错误,通常与Servlet、Filter或控制器逻辑有关。这个错误表明服务器已经完成了对HTTP响应的处理,并将其发送到客户端,然后试图...

    基于jsp的文件上传下载

    例如,可以使用`response.getOutputStream()`来获取输出流,并通过循环读取文件内容,逐块写入到输出流中。 此外,安全性和性能优化也是文件上传下载中不可忽视的部分。例如,限制文件大小以防止DoS攻击,检查文件...

    java+jsp 文件下载(服务器上的文件)

    在Java和JSP中,实现文件下载是一项常见的任务,它涉及到服务器与客户端之间的交互,以及对文件流的处理。下面将详细讲解如何使用Java和JSP来实现这一功能。 首先,我们从`downloadtool.jsp`开始,这是一个用户界面...

    jsp页面下载文件

    本话题关注的是如何在JSP页面上实现文件下载功能,这对于构建一个交互性强、功能丰富的Web应用是至关重要的。以下我们将详细探讨这个主题。 首先,我们需要理解JSP页面的基本结构和工作原理。JSP页面由HTML、CSS、...

    使用jsp下载excel文件

    ### 使用JSP下载Excel文件知识点解析 #### 一、引言 在Web开发中,经常需要将服务器上生成的数据导出为Excel文件供用户下载。本文档将详细介绍如何使用Java Server Pages (JSP) 实现从服务器端下载Excel文件到...

    JSP实现文件上传和下载

    本文将深入探讨如何使用JSP来实现文件的上传和下载功能,这对于构建交互性强的Web应用来说至关重要。 **一、文件上传** 文件上传通常涉及到客户端的表单提交和服务器端的数据处理。在JSP中,我们可以使用HTML的`...

    jsp实现文件下载功能

    ### JSP实现文件下载功能详解 #### 一、引言 在Web开发中,文件下载是一项常见的需求。Java Server Pages(JSP)作为一种强大的服务器端技术,被广泛应用于构建动态网页。本文将详细介绍如何利用JSP实现文件下载...

    用JSP下载word文件

    在这个场景中,"用JSP下载word文件(不会直接用IE打开.rar"的描述表明我们要实现一个功能,即用户点击链接后,JSP页面能够提供Word文件的下载,而不是直接在浏览器中打开文件。这通常涉及到HTTP响应头的设置以及正确...

    jsp页面文件下载功能实现

    ### jsp页面文件下载功能实现 #### 概述 在Web开发中,文件下载是一项基本且常用的功能。本文将详细介绍如何使用JSP技术实现文件下载功能,并解释代码中涉及的关键概念和技术点。 #### 核心知识点解析 ##### 1. ...

    使用jspSmartUpload实现文件上传下载

    `jspSmartUpload`是一个非常实用的库,它简化了处理文件上传和下载的复杂性。本文将深入探讨如何使用`jspSmartUpload`来实现这两个功能,并详细解释其工作原理和相关知识点。 首先,`jspSmartUpload`是一个基于Java...

    使用JSP实现上传下载文件jspSmartUpload

    在本文中,我们将深入探讨如何使用JSP(JavaServer Pages)和jspSmartUpload库来实现文件的上传与下载功能。JSP是一种动态网页技术,它允许开发者在HTML中嵌入Java代码,从而创建交互式的Web应用程序。而jsp...

    jsp文件下载

    1. 设置响应头:在JSP页面中,我们需要使用`response`对象来设置响应头,指示浏览器进行文件下载。如下所示: ```jsp response.setContentType("application/octet-stream"); // 设置Content-Type response.set...

    java+jsp代码实现从FTP服务器上传下载文件

    根据给定的信息,本文将详细解释如何利用Java与JSP技术来实现从FTP服务器上传下载文件的功能,并且会对部分给出的代码片段进行解读。 ### Java + JSP 实现 FTP 文件上传下载 #### 一、JSP 页面代码实现 在JSP页面...

    jsp实现文件上传下载

    本文将深入探讨如何使用Java和JSP(JavaServer Pages)技术实现文件的上传与下载功能。 首先,我们需要理解JSP的基础。JSP是一种基于Java的技术,它允许开发者在HTML页面中嵌入Java代码,以实现动态网页生成。JSP...

Global site tag (gtag.js) - Google Analytics