开发者学堂课程【Java Web开发系列课程 - Struts2框架入门:使用 Response 下载文件】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/537/detail/7322
使用 Response 下载文件
课程回顾:
在 servlet 中如何实现文件下载,通过流来实现,通过 HttpServletRespose 往客户端显流。
在Struts2 中是否可以通过流来实现文件下载,在 Struts 中讲过可以通过超链接下载,这里不过多强调,本课主要讲一下通过流下载。
具体操作步骤:
1. 写代码前准备工作
新建一个 web 项目,在 project name 这一栏下写15struts2_download ,
在 Incompatible Java Compliance Level 选项中选择 Yes ,在目录中找到 lib 文件,将 lib 文件夹下的文件拷贝到 WEB-INF 下,如下图所示:
然后打开 WEB-INF 下的 web.xml 文件进行编辑,将 filter 系列代码<filter>
<filter-name›struts2</filter-name>
<filter-class›org.apache.struts2.dispatcher.na.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>拷贝到新建的 web.xml 下
如下图所示,
将无实际意义的代码删除,
如下图所示:
在 webroot 找到 folder, 将 folder name 改为 download,
将 struts1.3.chm 和 strusts2.chm 下载到 download 文件下,打开 new java page, 将 name 改为 cn.sxt.action。
打开 new java class, 将 name 一栏写上 DownloadAction ,此
时我们学习一个 execute 方法。
2.代码操作
public class DownloadAction{ 下方写上:
public String execute(){
HttpServletRequestreq=ServletActionContext.getRequest(); (注释:写request 是为了获取文件,要控制它的路径)
HttpServletResponse resp = ServletActionContext.getResponse();
return null;
在 return null 上方写上:
//获取路径
String path=req.getRealPath("/download");
File file = new File (path, "Struts2.chm");
然后开始读流,读流之前写:
resp.setContentLength((int)file.length());
resp.setCharacterEncoding("utf-8");
resp.setHeader("ContentDisposition","attachment;filename=’struts2.chm’ ");
byte[] buffer = new byte[400];"attachment;
int len=0;
InputStream is = new FileInputStream(file);
OutputStream os = resp.getOutputstream();
while((len=is.read (buffer)) !=-1){
os.write (buffer, 0, len);
os.close.):
is.close();
以上写好之后开始写配置文件:
‹package name="default" namespace="/" extends="struts
<!--当 action 的处理方法返 空是不用配置结果集-->
<action name = "download" class="cn.sxt.action.DowloadAction"></action>
在<body>下写:
<a href="download.action">struts2的文档</a>
3.发布项目
将 Web Context-root 改为/download, 将项目进行发布,在此页面搜索框输入如下localhost:8080/download/index.jsp ,点击 struts2的文档,然后点击在文件夹中显示(s)
输入后发现文档不对,将文件名 download.action 改为 download.chm ,重新打开发现依然不对,考虑可能是参数问题,对比 servlet 的代码后重新修改代码,在resp.setCharacterEndcoding("utf-8");
下写上 resp.setContentType("application/octet-stream"); ContentDisposition 改为Content-Disposition,然后对项目进行重启。
将 IE 浏览器运行的任务结束,
重新打开网址 http://localhos:8080/download/index.jsp 进行下载另存到桌面即可




