`
may_cauc
  • 浏览: 42934 次
社区版块
存档分类
最新评论

jsf 之文件下载 的关键

阅读更多
  1. package demo;
  2.  
  3.  
  4. import java.io.BufferedInputStream;
  5. import java.io.BufferedOutputStream;
  6. import java.io.File;
  7. import java.io.FileInputStream;
  8. import java.io.IOException;
  9. import java.io.InputStream;
  10. import java.net.URLDecoder;
  11. import java.util.logging.Logger;
  12.  
  13. import javax.faces.application.Application;
  14. import javax.faces.context.FacesContext;
  15. import javax.faces.event.ActionEvent;
  16. import javax.servlet.ServletOutputStream;
  17. import javax.servlet.http.HttpServletResponse;
  18.  
  19. import org.operamasks.faces.annotation.ManagedBean;
  20. import org.operamasks.faces.annotation.ManagedBeanScope;
  21. public class DownFile { 
  22.   public String download() {
  23.     //OaMailAttach oaMailAttach = getOaMailAttach();
  24.  
  25.    String path="G:\sun\";
  26.    String fileName="20074111452140.doc";
  27.  
  28.     try {
  29.     FacesContext ctx = FacesContext.getCurrentInstance();
  30.     ctx.responseComplete();
  31.     //String contentType = "application/octet-stream;charset=utf-8";
  32.     String contentType = "application/x-download";
  33.     HttpServletResponse response = (HttpServletResponse) ctx.getExternalContext().getResponse();
  34.  
  35.  
  36.  
  37.     response.setContentType(contentType);
  38.  
  39.     StringBuffer contentDisposition = new StringBuffer();
  40.  
  41.     contentDisposition.append("attachment;");
  42.  
  43.     contentDisposition.append("filename=\"");
  44.     contentDisposition.append(fileName);
  45.     contentDisposition.append("\"");
  46.     //log.debug(System.getProperty("file.encoding"));
  47.     response.setHeader("Content-Disposition", new String(contentDisposition.toString().getBytes(System.getProperty("file.encoding")),"iso8859_1"));
  48.     // log.debug(contentDisposition.toString());
  49.     ServletOutputStream out = response.getOutputStream();
  50.  
  51.     //log.debug(new Long(oaMailAttach.getAtFile().length()));
  52.  
  53.     byte[] bytes = new byte[0xffff];
  54.     InputStream is = new FileInputStream(new File(path + fileName));
  55.     int b = 0;
  56.     while ((b = is.read(bytes, 0, 0xffff)) > 0) {
  57.     out.write(bytes, 0, b);
  58.     }
  59.     is.close();
  60.     out.flush();
  61.     ctx.responseComplete();
  62.     } catch (Exception e) {
  63.     // TODO 自动生成 catch 块
  64.     e.printStackTrace();
  65.     }
  66.     return null;
  67.    }
  68.  
  69. }

关键语句:ctx.responseComplete();

不然会报错误如下:

Servlet response already use stream, Writer not possible

分享到:
评论
2 楼 smudhd 2008-12-11  
厉害,找到了病根呀!
1 楼 liliugen 2008-05-18  
太牛逼,帮我解决了一个大问题,哈哈

相关推荐

    JSF开发的入门以及关键文件face-config.xml的配置

    本文当主要介绍了JSF的入门编程以及一些关键文件的配置,希望对你有所帮助,谢谢!

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版) 1/2

    这是2个压缩包中的第二个,请一并将第一个下载后,随便解压其中一个即可。 如果只希望下载其中一部分即可阅读,可下载另一个pdf: http://download.csdn.net/detail/oqqsun12345678/5215337 内容简介 出版日期: ...

    JSF增删改查

    JSF的增删改查,非常简单的页面,关键代码仅4个文件

    JavaServer Faces 2.0完全参考手册(JSF2.0中文版).part1

    这是2个压缩包中的第一个,请与第二个一并下载,然后随便解压其中一个即可。如果只想下载其中一部分,可下载pdf: http://download.csdn.net/detail/oqqsun12345678/5215337 这个pdf是665页中的前404页,后面200多页...

    Java.Server.Faces编程.part2

    在这篇文章中,将对JSF框架和组成JSF框架的各种关键部件进行一个简单的介绍,接下来详细介绍JSF的请求处理生命周期的各种状态,然后提供一个简单的应用来示范其各种特性。 由于文件较大,WINRAR分两部上传

    Java Server Faces编程.part1

    在这篇文章中,将对JSF框架和组成JSF框架的各种关键部件进行一个简单的介绍,接下来详细介绍JSF的请求处理生命周期的各种状态,然后提供一个简单的应用来示范其各种特性。 由于文件较大,WINRAR分两部分上传

    JAVA上百实例源码以及开源项目

     这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 ...

    Spring中文帮助文档

    2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 ...

    Jakarta Struts 编程.rar

    尽管这项技术令人振奋,但是它的说明文档却仍然少得可怜——大多数的指南都太简单,那些要编写复杂Web应用程序的开发人员根本找不到所需的关键信息。本书第二版为了填补这个信息缺口,针对最近发布的Struts 1.1版...

    JAVA上百实例源码以及开源项目源代码

     这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 ...

    Spring API

    2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 ...

Global site tag (gtag.js) - Google Analytics