您的位置:首页 > 编程语言 > Java开发

struts2 action 文件下载的配置

2013-11-14 22:45 471 查看
1、客户端jsp请求Actin

 

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

<%   

    String path = request.getContextPath();
  

    String basePath = request.getScheme() + "://"
  

            + request.getServerName() + ":" + request.getServerPort()   

            + path + "/";   

%>  

  

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   

    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  

<html>  

    <head>  

        <title>Struts2的文件下载</title>  

        <meta name="website" content="http://www.crazyit.org" />  

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  

    </head>  

  

    <body>  

        <h1>  

            Struts2的文件下载   

        </h1>  

        <ul>  

            <li>  

                下载Struts2的Logo:   

                <a href="download.action">下载图形文件</a>  

            </li>  

            <li>  

                下载Struts2的Logo的压缩文件:   

                <a href="download2.action">下载压缩文件</a>  

            </li>  

        </ul>  

    </body>  

</html>  

2、Action处理

Struts2的文件下载Action与普通的Action并没有太大的不同,仅仅是该Action需要提供一个返回InputStream流的方法,该输入流代表了被下载文件的入口。该Action类的代码如下:

package com.lbx.action;
  

  

import java.io.InputStream;
  

  

import org.apache.struts2.ServletActionContext;
  

  

import com.opensymphony.xwork2.ActionSupport;
  

  

@SuppressWarnings("serial")
  

public class FileDownloadAction extends ActionSupport{
  

    //依赖注入的属性,struts.xml中动态的指定   

    private String inputPath;
  

  

    //只需要set方法   

    public void setInputPath(String inputPath) {
  

        this.inputPath = inputPath;
  

    }   

       

      

    public InputStream getTargetFile() throws Exception{
  

        return ServletActionContext.getServletContext()
  

        .getResourceAsStream(inputPath);   

    }   

       

}  

从上面的Action中看到,该Action中包含了一个getTargetFile()方法,该方法返回一个InputStream输入流,这个输入流返回的是下载目标文件的入口。该方法的方法名为getTargetFile,表明该Action有一个targetFile属性来返回下载文件。
3、struts.xml配置

配置该文件下载的Action与配置普通的Action并没有太大的不同,需要在配置普通Action的基础之上,在加上额外的download的拦截器引用。

除此之外,关键是需要配置一个类型为stream的结果,配置stream类型的结果时需要指定如下四个属性:

 contentType:指定被下载文件的文件类型。

 inputName:指定被下载文件的入口输入流。

 contentDisposition:指定下载的文件名。

 bufferSize:指定下载文件时的缓冲大小。

因为stream结果类型的逻辑视图是返回给客户端一个输入流,因此无需指定location属性。

提示:配置stream类型的结果时,因为无需指定实际的显示的物理资源,所以无需指定location属性,只需要指定inputName属性,该属性指向被下载文件。

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

<!DOCTYPE struts PUBLIC   

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

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

<struts>  

  

    <constant name="struts.i18n.encoding" value="UTF-8"/>  

  

    <package name="lee" extends="struts-default">  

  

        <action name="download" class="com.lbx.action.FileDownloadAction">  

            <!-- 指定被下载资源的位置 -->  

            <param name="inputPath">\images\Java.gif</param>  

            <!-- 配置结果类型为stream的结果 -->  

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

                <!-- 指定下载文件的文件类型 -->  

                <param name="contentType">image/gif</param>  

                <!-- 指定由getTargetFile()方法返回被下载文件的InputStream -->  

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

                <param name="contentDisposition">filename="crazyit.gif"</param>  

                <!-- 指定下载文件的缓冲大小 -->  

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

            </result>  

        </action>  

       

        <action name="download2" class="com.lbx.action.FileDownloadAction">  

            <!-- 定义被下载文件的物理资源 -->  

            <param name="inputPath">\images\crazyit.zip</param>  

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

                <!-- 指定下载文件的文件类型 -->  

                <param name="contentType">application/zip</param>  

                <!-- 指定由getTargetFile()方法返回被下载文件的InputStream -->  

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

                <param name="contentDisposition">filename="crazyit.zip"</param>  

                <!-- 指定下载文件的缓冲大小 -->  

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

            </result>  

        </action>  

  

    </package>  

</struts>  

转自:http://blog.sina.com.cn/s/blog_8c38b8b701014wi9.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息