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

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文件下载实现

    总之,JSF文件下载功能的实现涉及到JSF上下文、Servlet上下文、HTTP响应头设置、文件流处理等多个关键环节。理解并熟练掌握这些知识点对于开发Web应用程序,特别是处理文件操作的场景非常重要。

    JSF文件上传下载

    以上就是JSF文件上传和下载的基本实现。为了确保安全性和性能,还需要考虑错误处理、文件大小限制、临时文件管理以及用户权限控制等细节。同时,现代的Web开发中,还可能结合使用CDN(内容分发网络)和云存储服务来...

    JSF帮助文档

    JavaScript Faces (JSF) 是Java平台上用于构建企业级Web应用程序的一种服务器端的用户界面框架。...理解JSF的工作原理、生命周期以及如何利用其组件和绑定特性,是成为合格的Java开发工程师的关键技能之一。

    JSF API帮助文档

    这个API帮助文档是开发者理解和使用JSF的关键资源。 在JSF中,**组件** 是构建用户界面的基本单元,它们可以是简单的HTML元素,如按钮和输入字段,也可以是复杂的自定义组件。每个组件都有一个与之关联的**事件模型...

    jsf 中文帮助文档

    总的来说,JSF中文帮助文档涵盖了JSF框架的所有关键概念和技术,包括API详解、生命周期、组件使用、数据绑定、验证、导航等,对于希望在Java Web开发中使用JSF的开发者来说,是极具价值的学习资源。通过阅读和实践,...

    jsf标签官方帮助文档

    **TLD(Tag Library Descriptor)** 文件是JSF标签库的元数据,它定义了标签的属性、行为以及与之关联的Java类。每个TLD文件对应一个特定的标签库,例如JSF的核心库、HTML库或自定义库。在TLD文件中,你可以找到每个...

    jsf api文档

    JSF API文档是理解并使用JSF框架的关键参考资料。 ### JSF_API.CHM 这个CHM文件包含了JSF的核心API文档,是开发者在编写JSF应用时的重要参考。CHM(Compiled HTML Help)是一种微软的文件格式,用于存储和查看帮助...

    jsf1.2 jar包下载

    `jsf-api.jar` 和 `jsf-impl.jar` 是JSF框架的核心组件,它们在JSF应用中扮演着关键角色: 1. **jsf-api.jar**:这个JAR文件包含了JSF API,即JSF规范定义的接口和类。开发者在编写JSF应用程序时,主要会引用这个...

    JSF开发帮助文档(最新版)

    在**JSF开发帮助文档**中,你可能会找到以下几个关键知识点: 1. **组件库**: JSF 提供了一个丰富的内置组件库,如按钮、表单、输入字段、标签等。这些组件可以通过XML(Facelets)或者JSP页面声明式地使用。理解每...

    core jsf 1.2 jsf 核心

    **JSF 1.2核心详解** JavaServer Faces (JSF) 是Java平台上的一个用于构建用户界面的组件模型框架,特别适用于Web...而`core jsf.chm`文件很可能是关于JSF 1.2的官方文档或教程集合,可以帮助深入学习和掌握这些概念。

    JSF技术总结文档.doc

    在JSF中,Backing Bean(或称为Glue Bean)扮演着关键角色,它们是连接用户界面(UI)和业务逻辑的桥梁。Backing Bean通常是Java Bean,它们在`faces-config.xml`配置文件中被定义和管理。例如: ```xml ...

    (分两个包,请下载全)lib文件,jar包,jsf+spring

    【标题】"lib文件,jar包,jsf+spring"涉及的是Java开发中的关键组成部分,主要包括库文件、Java Archive(JAR)包以及JavaServer Faces(JSF)与Spring框架的整合。这些元素在构建现代Java Web应用程序时起着至关...

    jsf1.2源代码下载

    3. **关键类和接口** - **UIComponent**:所有JSF组件的基类,定义了组件的基本属性和方法。 - **FacesContext**:提供对当前JSF上下文的访问,包括请求、响应、会话和应用范围的数据。 - **ManagedBean**:JSF ...

    Mojarra JSF2.0库文件

    **Mojarra**是JSF规范的主要实现之一,由Oracle公司维护。Mojarra JSF 2.0是针对JSF 2.0规范的实现库,包含了处理JSF生命周期、渲染组件以及与其他Java EE技术集成所需的所有类和接口。将Mojarra JSF 2.0库文件放置...

    jsf.jar包

    `jsf.jar`中的类和接口定义了JSF框架的基本行为,如FacesContext、UIComponent、ManagedBean等关键类,这些都是开发JSF应用的基础。 **jsf-api.jar** 文件则包含了JSF的公共API,这是开发人员编写JSF应用程序所必须...

    JSF实现的文件上传

    下面将详细介绍如何使用JSF实现文件上传,以及涉及到的关键技术和注意事项。 ### 1. JSF的文件上传组件 JSF提供了`<h:inputFile>`组件来实现文件上传的功能。这个组件允许用户选择本地文件,并将其上传到服务器。...

    jsf文档+jsh案例+配置文档

    **jsf传参.docx** 详细介绍了如何在JSF中传递参数,这可能涉及到请求参数、会话参数、属性绑定等,是理解和实现JSF应用间通信的关键。 **java环境变量配置.txt** 涉及到Java开发的基础,Java环境变量如JAVA_HOME、...

    jsf第一个例子 jsf架包 jsf实例

    在“jsf第一个例子”中,我们通常会遇到以下关键概念: 1. **JSF生命周期**:JSF有六个主要阶段,包括恢复视图、应用请求值、处理验证、更新模型值、调用应用业务逻辑以及渲染响应。开发者可以在这些阶段插入自定义...

    jsf-api.jar

    `jsf-api.jar` 文件是JSF API的核心库,包含了JSF框架的所有接口和抽象类,开发者可以通过这个API来实现JSF的功能。 该API包特别强调了对中文的支持,这意味着在使用过程中,开发者不会遇到由于找不到中文资源包...

Global site tag (gtag.js) - Google Analytics