struts2 action 文件下载的配置

来源:互联网 发布:兼职 大数据 英文 翻译 编辑:程序博客网 时间:2024/04/30 08:53

1、客户端jsp请求Actin

 

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%   
  3.     String path request.getContextPath();   
  4.     String basePath request.getScheme() "://"   
  5.             request.getServerName() ":" request.getServerPort()   
  6.             path "/";   
  7. %>  
  8.   
  9. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
  10.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  11. <html>  
  12.     <head>  
  13.         <title>Struts2的文件下载</title>  
  14.         <meta name="website" content="http://www.crazyit.org" />  
  15.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
  16.     </head>  
  17.   
  18.     <body>  
  19.         <h1>  
  20.             Struts2的文件下载   
  21.         </h1>  
  22.         <ul>  
  23.             <li>  
  24.                 下载Struts2的Logo:   
  25.                 <a href="download.action">下载图形文件</a>  
  26.             </li>  
  27.             <li>  
  28.                 下载Struts2的Logo的压缩文件:   
  29.                 <a href="download2.action">下载压缩文件</a>  
  30.             </li>  
  31.         </ul>  
  32.     </body>  
  33. </html>  

2、Action处理

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

  1. package com.lbx.action;   
  2.   
  3. import java.io.InputStream;   
  4.   
  5. import org.apache.struts2.ServletActionContext;   
  6.   
  7. import com.opensymphony.xwork2.ActionSupport;   
  8.   
  9. @SuppressWarnings("serial")   
  10. public class FileDownloadAction extends ActionSupport{   
  11.     //依赖注入的属性,struts.xml中动态的指定   
  12.     private String inputPath;   
  13.   
  14.     //只需要set方法   
  15.     public void setInputPath(String inputPath) {   
  16.         this.inputPath inputPath;   
  17.     }   
  18.        
  19.       
  20.     public InputStream getTargetFile() throws Exception{   
  21.         return ServletActionContext.getServletContext()   
  22.         .getResourceAsStream(inputPath);   
  23.     }   
  24.        
  25.  

从上面的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属性,该属性指向被下载文件。

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE struts PUBLIC   
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"   
  4.     "http://struts.apache.org/dtds/struts-2.1.dtd">     
  5. <struts>  
  6.   
  7.     <constant name="struts.i18n.encoding" value="UTF-8"/>  
  8.   
  9.     <package name="lee" extends="struts-default">  
  10.   
  11.         <action name="download" class="com.lbx.action.FileDownloadAction">  
  12.             <!-- 指定被下载资源的位置 -->  
  13.             <param name="inputPath">\images\Java.gif</param>  
  14.             <!-- 配置结果类型为stream的结果 -->  
  15.             <result name="success" type="stream">  
  16.                 <!-- 指定下载文件的文件类型 -->  
  17.                 <param name="contentType">image/gif</param>  
  18.                 <!-- 指定由getTargetFile()方法返回被下载文件的InputStream -->  
  19.                 <param name="inputName">targetFile</param>  
  20.                 <param name="contentDisposition">filename="crazyit.gif"</param>  
  21.                 <!-- 指定下载文件的缓冲大小 -->  
  22.                 <param name="bufferSize">4096</param>  
  23.             </result>  
  24.         </action>  
  25.        
  26.         <action name="download2" class="com.lbx.action.FileDownloadAction">  
  27.             <!-- 定义被下载文件的物理资源 -->  
  28.             <param name="inputPath">\images\crazyit.zip</param>  
  29.             <result name="success" type="stream">  
  30.                 <!-- 指定下载文件的文件类型 -->  
  31.                 <param name="contentType">application/zip</param>  
  32.                 <!-- 指定由getTargetFile()方法返回被下载文件的InputStream -->  
  33.                 <param name="inputName">targetFile</param>  
  34.                 <param name="contentDisposition">filename="crazyit.zip"</param>  
  35.                 <!-- 指定下载文件的缓冲大小 -->  
  36.                 <param name="bufferSize">4096</param>  
  37.             </result>  
  38.         </action>  
  39.   
  40.     </package>  
  41. </struts>  

转自:http://blog.sina.com.cn/s/blog_8c38b8b701014wi9.html