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 implements
ServletContextAware {
private static final long serialVersionUID = 1L;
private ServletContext context;
private String filename;
private String mimeType;
private InputStream inStream;
@Override
public 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;
}
}
@Override
public void setServletContext(ServletContext context) {
this.context = context;
}
}
说明:
1、在下载的Action中,必须有个InputStream类型的field和对应的get方法。
2、下载时方便,将文件名、MIMETYPE都写在了Action中。
然后,配合Result类型:
<action name="download" class="study.action.DownloadAction">
<result type="stream">
<param name="contentType">${mimeType}</param>
<param name="inputName">inStream</param>
<param name="contentDisposition">attachment;filename="${filename}"</param>
</result>
</action>
最后,看图:
看看中文问题(具体的解决办法没有,这种只是在我的机子上可以。。。)
解释说明:
1、为了获取到MIMETYPE,利用了ServletContext的方法。所以必须获得ServlerContext这个对象。本例子中采用DI的方法,有Struts2在运行时注入。
2、为了能在HTTP Response中使用到 MIMETYPE,所以在Action中提供了对应的get方法,以供OGNL表达式需要。
- 大小: 20.6 KB
- 大小: 62.3 KB
分享到:
相关推荐
李白高力士脱靴李白贺知章告别课本剧.pptx
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
C语言项目之超级万年历系统源码,可以做课程设计参考 文章参考:https://www.qqmu.com/4373.html
Jupyter-Notebook
51单片机加减乘除计算器系统设计(proteus8.17,keil5),复制粘贴就可以运行
《中国房地产统计年鉴》面板数据资源-精心整理.zip
Jupyter-Notebook
Jupyter-Notebook
毕业论文答辩ppt,答辩ppt模板,共18套
Jupyter-Notebook
《中国城市统计年鉴》面板数据集(2004-2020年,最新).zip
Python基础 本节课知识点: • set的定义 • Set的解析 • set的操作 • set的函数
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
兵制与官制研究资料最新版.zip
Jupyter-Notebook
七普人口数据+微观数据+可视化+GIS矢量资源-精心整理.zip
Support package for Hovl Studio assets.unitypackage
土壤数据库最新集.zip
Jupyter-Notebook
1991-2020年中国能源统计年鉴-能源消费量(分省)面板数据-已更至最新.zip