`

利用Struts2的Stream结果类型进行文件下载

阅读更多
原文地址:http://www.blogjava.net/fengzhisha0914/articles/343641.html

文件的下载,需要利用到struts2的Stream结果类型:

首先来看Struts2的返回类型(来自官网).Stream是用来把一个输入流返回到浏览器,这个就是用来文件下载的

Chain Result


Used for Action Chaining

Dispatcher Result


Used for web resource integration, including JSP integration

FreeMarker Result


Used for FreeMarker integration

HttpHeader Result


Used to control special HTTP behaviors

Redirect Result


Used to redirect to another URL (web resource)

Redirect Action Result


Used to redirect to another action mapping

Stream Result


Used to stream an InputStream back to the browser (usually for file downloads)

Velocity Result


Used for Velocity integration

XSL Result


Used for XML/XSLT integration

PlainText Result


Used to display the raw content of a particular page (i.e jsp, HTML)

Tiles Result


Used to provide Tiles integration





Stream结果类的参数(来自官网):

    contentType - the stream mime-type as sent to the web browser (default = text/plain).                             MIME类型(默认是 text / plain)。用来设置HTTP响应里的Content-Type标头
    contentLength - the stream length in bytes (the browser displays a progress bar).

字节流的长度(浏览器显示一个进度栏)。用来设置HTTP响应里的Content-Length标头

    contentDisposition - the content disposition header value for specifing the file name (default = inline, values are typically attachment;filename="document.pdf".

设置标题为什么文件名(规定文件名=“document.pdf”) 用来设置HTTP响应里的Content-Disposition标头

    inputName - the name of the InputStream property from the chained action (default = inputStream).

一个动作类属性的名字,此属性返回的InputStream对象会被发送到浏览器

    bufferSize - the size of the buffer to copy from input to output (default = 1024).

缓冲区大小(默认= 1024,单位是字节)。通过InputStream对象读取数据,通过OutputStream对象向浏览器发送数据时的缓冲区的长度

    allowCaching if set to 'false' it will set the headers 'Pragma' and 'Cache-Control' to 'no-cahce', and prevent client from caching the content. (default = true)

如果设置为false,它将设置标题语无缓存,防止客户端从缓存读取内容。 (默认= true)

    contentCharSet if set to a string, ';charset=value' will be added to the content-type header, where value is the string set. If set to an expression, the result of evaluating the expression will be used. If not set, then no charset will be set on the header

如果设置为一个字符串, charset为设置的字符串,如果没有设置,然后将头没有字符集的设置



e.g:

struts.xml文件内容

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">



<struts>

    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/" extends="struts-default">

       <default-action-ref name="index" />

  

       <action name="ViewCss" class="com.download.action.DownLoad">

           <result type="stream" name="success">

              <!-- Stream返回类型的各项参数 -->   

              <param name="inputName">inputStream</param>

              <param name="contentType">text/css</param>

              <param name="contentDisposition">filename="main.css"</param>

              <param name="bufferSize">2048</param>

           </result>

       </action>

     

       <action name="DownloadCss" class="com.download.action.DownLoad">

           <result type="stream" name="success">

              <param name="inputName">inputStream</param>

              <param name="contentType">application/octet-stream</param>

              <param name="contentDisposition">filename="main.css"</param>

              <param name="bufferSize">2048</param>

           </result>

       </action>

    </package>

</struts>





注意:这两个action的区别就是它们的contentType被设置成不同的值,ViewCss是把文件内容发送到浏览器,DownloacCss是下载文件.







Download.java内容

实现了ServletContextAware接口

package com.download.action;



import java.io.InputStream;



import javax.servlet.ServletContext;



import org.apache.struts2.util.ServletContextAware;



import com.opensymphony.xwork2.ActionSupport;



public class Download extends ActionSupport implements ServletContextAware{

  

    private String filePath;

    private ServletContext servletContext;

  

    public void setServletContext(ServletContext servletContext) {

        this.servletContext = servletContext;

    }

    public void setFilePath(String filePath) {

        this.filePath = filePath;

    }

    public InputStream getInputStream() throws Exception {

        return servletContext.getResourceAsStream(filePath);

    }



}







index.jsp内容

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags"%>



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

    <head>

       <title>Download</title>

       <style type="text/css">@import url(css/main.css);</style>

    </head>



    <body>

       <div id="global" style="width: 200px">

           <s:url id="url1" action="ViewCss">

              <s:param name="filePath">css/main.css</s:param>

           </s:url>

           <s:a href="%{url1}">View CSS</s:a>



           <br />

           <s:url id="url2" action="DownloadCss">

              <s:param name="filePath">css/main.css</s:param>

           </s:url>

           <s:a href="%{url2}">Download CSS</s:a>

       </div>

    </body>

</html>
分享到:
评论

相关推荐

    struts2实现文件下载功能

    在这个“Struts2实现文件下载功能”的示例中,我们将深入探讨如何利用Struts2框架来实现在web应用中让用户下载文件的功能。 首先,我们需要理解文件下载的基本原理。在Web应用中,当用户点击一个链接或提交一个表单...

    struts2利用注解annotation实现文件下载

    ### Struts2 使用注解(Annotation)实现文件下载 在Web开发中,文件上传与下载是常见的需求之一。Struts2框架提供了强大的功能来支持这一需求。本文将详细介绍如何使用Struts2框架结合注解(Annotation)的方式...

    struts2核心文件

    Struts2是一个基于MVC(Model-View-...开发过程中,还需要理解并掌握Action、拦截器、结果类型等核心概念,以及如何利用配置文件进行定制化设置。同时,合理利用插件和第三方库,可以进一步提升开发效率和应用性能。

    struts2多文件上传和下载

    在Struts2的配置文件(通常是struts.xml)中,我们需要为上传操作定义一个Action,并配置对应的Result类型,通常使用`stream`结果类型来处理文件流。 4. **文件存储** 上传的文件需要存储在服务器的某个位置。你...

    struts2文件下载的参数

    通过配置Action类的结果,我们可以直接利用这个结果类型来处理文件下载,如: ```xml &lt;result type="stream"&gt; &lt;param name="inputName"&gt;fileInputStream ${contentType} &lt;param name="contentDisposition"&gt;...

    struts2所用到的jar包

    7. **结果类型**:Struts2支持多种结果类型,如dispatcher(用于转发到JSP页面)、stream(用于处理文件下载)、freemarker或velocity(用于模板引擎渲染)等。开发者可以根据需要选择或自定义结果类型。 8. **国际...

    struts2 文件的上传和下载

    在实现过程中,可以利用Struts2提供的`StrutsResult`来简化文件下载的处理,例如使用`stream`结果类型,它可以自动处理文件流的读取和发送。 最后,`UpAndDownLoad.zip`可能包含了示例代码、配置文件和其他相关资源...

    struts2 向结果传参数

    Struts2支持多种内置结果类型,如`dispatcher`(默认的,用于转发到JSP)、`stream`(用于处理文件下载)和`redirectAction`(用于重定向到另一个Action)。每个结果类型都有其特定的配置方式来传递参数。 1. **在...

    Struts2文件上传和下载教程

    ### Struts2文件上传与下载教程 #### 一、文件上传原理及实现 ...以上步骤详细介绍了如何利用Struts2框架实现文件的上传和下载功能。这些技巧不仅提高了系统的可用性和安全性,还增强了用户体验。

    struts2实现的文件上传与下载

    总结来说,"Struts2实现的文件上传与下载"是一个涵盖Web应用基本功能的项目,它展示了如何利用Struts2框架处理文件交互。通过学习这个项目,开发者可以掌握Struts2在文件上传和下载场景中的应用,进一步提升Java web...

    Struts2-api

    常见的结果类型有`dispatcher`(用于转发到JSP页面)、`redirect`(用于重定向URL)和`stream`(用于处理文件下载)等。 5. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为表达式语言,它用于...

    struts2上传下载项目

    在"struts2上传下载项目"中,我们可以深入理解如何利用Struts2实现文件的上传与下载功能。 首先,上传功能在Web应用中十分常见,比如用户在注册时上传头像,或者提交文档等。在Struts2中,我们主要借助`struts2-...

    Struts2_API(API文档)

    2. **Result类型**:Struts2允许开发者定义多种结果类型,如Redirect、RedirectAction、Stream等,来控制请求的流向和响应的生成方式。 3. **Interceptor拦截器**:拦截器是Struts2的特色之一,它们在Action执行...

    struts2 文件下载

    - `type="stream"`:指示Struts2将结果作为流处理,适合于文件下载。 - `inputPath`:从Action中获取文件的输入路径,这里使用了OGNL表达式`${inputPath}`来引用Action的属性。 - `contentType`:指定文件的MIME类型...

    struts与hibernate实现文件的上传与动态下载

    本篇文章将详细讲解如何利用Struts2.2和Hibernate3.6实现文件的上传与动态下载。 **一、文件上传** 1. **环境配置**:首先,你需要一个集成开发环境,例如MyEclipse8.6,并安装所需的Struts2.21、JUnit4.8.2以及...

    struts2的XSLTResult结果类型

    Struts2中预定义了一些结果类型,例如dispatcher(用于转发到一个JSP页面)、stream(用于流式传输文件)和redirect(用于重定向到另一个URL)。XSLTResult是其中之一,它专门用于处理XML数据的转换。 要使用XSLT...

    使用Struts 2框架开发租房网站

    5. **结果类型与视图解析**:Struts 2支持多种结果类型,如dispatcher(用于转发到JSP)、stream(用于下载文件)等。结果类型定义了Action执行后的跳转方式。视图通常是JSP页面,通过OGNL(Object-Graph Navigation...

    最新的struts2.3.8文档

    3. **结果类型(Result Types)**:Struts2支持多种结果类型,如dispatcher(转发到一个JSP页面)、stream(用于文件下载)、redirect(重定向URL)等,开发者可以根据需要选择合适的结果类型。 4. **OGNL(Object-...

    Struts 2.0结果集类型

    4. **stream**:这个结果类型用于处理大文件下载或流式内容。它允许我们直接从Action返回字节流,而不会加载整个内容到内存。 5. **freemarker** 或 **velocity**:这些结果类型用于集成FreeMarker或Velocity模板...

    Struts2工具包

    常见的结果类型有`dispatcher`(用于转发到JSP页面)、`redirect`(重定向到新的URL)和`stream`(用于处理文件下载)。 5. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认表达式语言,...

Global site tag (gtag.js) - Google Analytics