struts2文件下载及 <param name="inputName">inputStream</param>的理解

struts.xml文件配置:

[html] view plaincopy

  1. <span style="font-size:16px;"><?xml version="1.0" encoding="UTF-8" ?>

  2. <!DOCTYPE struts PUBLIC

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

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

  6. <constant name="struts.enable.DynamicMethodInvocation" value="false" />

  7. <constant name="struts.devMode" value="true" />
  8. <package name="app14a" extends="struts-default">

  9. <action name="Menu">

  10. <result>/jsp/Menu.jsp</result>

  11. </action>

  12. <action name="ViewCss" class="app14a.FileDownloadAction">

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

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

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

  16. <param name="contentDisposition">filename="main11.css"</param>

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

  18. </result>

  19. </action>

  20. <action name="DownloadCss" class="app14a.FileDownloadAction">

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

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

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

  24. <param name="contentDisposition">filename="main111222.css"</param>

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

  26. </result>

  27. </action>

  28. </package>

  29. </struts></span>

   
action特殊的地方在于result的类型是一个流(stream),配置stream类型的结果时,因为无需指定实际的显示的物理资源,所以无需指定location属性,只需要指定inputName属性,该属性指向被下载文件的来源,对应着Action类中的某个属性,类型为InputStream,,struts2会寻找一个返回类型为InputStream的方法getInputStream()(方法名最好为getInputStream,有人说此方法名可以为别的可能需要与struts.xml中的inputName保存一致下面有解释,不过我实验的结果不是这样,须为getInputStream,可能是org.apache.struts2.dispatcher.ResultStream类限制造成,感兴趣的可以看看此类的源码,就会明白的),得到InputStream。

 
 
另一种理解:action中定义一个返回InputStream的方法,该方法作为被下载文件的入口,且需要配置stream类型结果时指定inputName参数,inputName参数的值就是方法去掉get前缀、首字母小写的字符串。

下面则列出了和下载有关的一些参数列表:

参数说明

contentType

内容类型,和互联网MIME标准中的规定类型一致,例如text/plain代表纯文本,text/xml表示XML,image/gif代表GIF图片,image/jpeg代表JPG图片

inputName

下载文件的来源流,对应着action类中某个类型为Inputstream的属性名,例如取值为inputStream的属性需要编写getInputStream()方法

contentDisposition

文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。取值为:

attachment;filename="struts2.txt",表示文件下载的时候保存的名字应为struts2.txt。如果直接写filename="struts2.txt",那么默认情况是代表inline,浏览器会尝试自动打开它,等价于这样的写法:inline;
filename="struts2.txt"

bufferSize

下载缓冲区的大小

struts2文件下载及 <param
name="inputName">inputStream</param>的理解

时间: 2024-09-29 00:41:17

struts2文件下载及 <param name="inputName">inputStream</param>的理解的相关文章

struts2文件下载出现Can not find a java.io.InputStream with the name的错误

今天在用struts2就行文件下载时出现如下错误: Servlet.service() for servlet default threw exception java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [imageStream] in the invocation stack. Check the <param name="inputName">

struts2文件下载 出现Can not find a java.io.InputStream with the name的错误

成功代码: 前台界面jsp: <a style="text-decoration:none;" href="<%=path %>/main/frontNewsAction_downloadFile.action?fileName=<s:property value="fileTitle"/>">下载</a> Action文件:private String fileName;//get set方法 p

struts2文件下载相关信息

struts.xml文件配置: [html] view plaincopy <span style="font-size:16px;"><?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" &q

struts2文件下载,动态设置资源地址

转自:http://blog.csdn.net/ctrl_shift_del/article/details/6277340 1 ServletActionContext.getServletContext().getResourceAsStream("/"+tempfile); 这是java加载资源的方法,所谓资源,实际上是任何一个文件,但特别的 是,getResourceAsStream这个方法不使用绝对路径,而是使用相对于classpath环境变量的相对路径.所 以,如果写: 1

struts2文件下载 &lt;result type=&quot;stream&quot;&gt;

<!--struts.xml配置--> <action name="download" class="com.unmi.action.DownloadAction"> <result name="success" type="stream"><!--type 为 stream 应用 StreamResult 处理--> <param name="contentTy

struts2 文件下载 报错

程序错误: 学习struts框架时,关于文件下载部分,利用struts中的stream结果类型来实现,配置完成之后,运行程序,报错如下: HTTP Status 500 - Can not find a java.io.InputStream with the name [downFile] in the invocation stack. Check the <param name="inputName"> tag specified for this action. 错

解决struts2文件下载中文名问题

package com.bgsnewlook.action; import com.opensymphony.xwork2.ActionSupport;import org.apache.struts2.ServletActionContext; import java.io.InputStream; import java.net.URLEncoder; public class Download extends ActionSupport {    private String inputP

Struts2之struts2文件下载详解

一.学习案例:通过在downloadfile.jsp页面点击"下载文件",查看文件是否可以成功下载. 二.案例分析:struts2文件下载只需简单配置即可. a)先在下载页面(downloadfile.jsp)创建下载文件的链接 <a href="downloadFile">下载文件</a> b)创建action(DownloadFileAction.java) 只需创建一个InputStream类型类型的get方法. 注意:此处方法名规则为

Struts2 文件下载

1 package lee; 2 3 import java.io.InputStream; 4 import org.apache.struts2.ServletActionContext; 5 import com.opensymphony.xwork2.Action; 6 import com.opensymphony.xwork2.ActionContext; 7 import java.util.Map; 8 /** 9 * Description: 10 * <br/>网站: &l