首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Struts2的文件上载(download)

2012-10-11 
Struts2的文件下载(download)?Struts2对文件的下载做了很优雅的处理,配置起来很简单,使用也很方便。?在本文

Struts2的文件下载(download)

?

Struts2对文件的下载做了很优雅的处理,配置起来很简单,使用也很方便。

?

在本文中,你将学会最基础的download案例,和最优雅的download案例。

?

优雅之处:

?

1、不适用特定的new File加载文件。

2、文件名灵活,无需写死。

3、MimeType灵活,无需写死。

?

如主页的说明--“非技术流”, 表达不精确的地方,各位包涵。废话不说,上货!

?

环境: JDK6update16?? EclipseJEE? 3.4.2?? Struts2.1.8


下载流程概览:

?

HttpRequest? --->?? DownloadAction --->? SUCCESS Result -->?? 输出流

?

STEP01? 写一个DownloadAction

package study.action;import java.io.ByteArrayInputStream;import java.io.InputStream;import java.io.UnsupportedEncodingException;import javax.servlet.ServletContext;import org.apache.struts2.util.ServletContextAware;import com.opensymphony.xwork2.ActionSupport;public class DownloadAction extends ActionSupport implementsServletContextAware {private static final long serialVersionUID = 1L;private ServletContext context;private String filename;private String mimeType;private InputStream inStream;@Overridepublic String execute() throws Exception {mimeType = context.getMimeType(filename);return SUCCESS;}public InputStream getInStream() {inStream = context.getResourceAsStream("/doc/" + filename);if (inStream == null) {inStream = new ByteArrayInputStream("Sorry,File not found !".getBytes());}return inStream;}public String getMimeType() {return mimeType;}public void setFilename(String filename) {try {this.filename = new String(filename.getBytes("ISO8859-1"),"GBK");} catch (UnsupportedEncodingException e) {}}public String getFilename() {try {return new String(filename.getBytes(),"ISO8859-1");} catch (UnsupportedEncodingException e) {return this.filename;}}@Overridepublic void setServletContext(ServletContext context) {this.context = context;}}

?

?说明:


1、在下载的Action中,必须有个InputStream类型的field和对应的get方法。


2、下载时方便,将文件名、MIMETYPE都写在了Action中。

?

?

然后,配合Result类型:

<action name="download" alt="Struts2的文件上载(download)">

?


Struts2的文件上载(download)

?

看看中文问题(具体的解决办法没有,这种只是在我的机子上可以。。。)


Struts2的文件上载(download)

?


解释说明:

?

1、为了获取到MIMETYPE,利用了ServletContext的方法。所以必须获得ServlerContext这个对象。本例子中采用DI的方法,有Struts2在运行时注入。


2、为了能在HTTP Response中使用到 MIMETYPE,所以在Action中提供了对应的get方法,以供OGNL表达式需要。

?

?

1 楼 pouyang 2010-05-25   附上程序代码下载那就更完美了! 2 楼 xiaolongfeixiang 2010-05-25   pouyang 写道附上程序代码下载那就更完美了!

我是用Eclipse的JEE版本做的,大多数人都是用MyEclipse的,所以可能有些不便。

不过,只需将上述源码加入到你的工程中,struts.xml中配置一下,即可。

呵呵,试试吧

热点排行