使用 Response 下载文件 | 学习笔记

简介: 快速学习使用 Response 下载文件,介绍了使用 Response 下载文件系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【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 下,如下图所示:

image.png

 

 

然后打开 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 下

如下图所示,

image.png

将无实际意义的代码删除,

如下图所示:

image.png

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)

image.png

输入后发现文档不对,将文件名 download.action 改为 download.chm ,重新打开发现依然不对,考虑可能是参数问题,对比 servlet 的代码后重新修改代码,在resp.setCharacterEndcoding("utf-8");

下写上 resp.setContentType("application/octet-stream"); ContentDisposition 改为Content-Disposition,然后对项目进行重启。

将 IE 浏览器运行的任务结束,

重新打开网址 http://localhos:8080/download/index.jsp 进行下载另存到桌面即可

image.png

相关文章
|
SQL XML Oracle
达梦(DM)4、SpringBoot集成MyBatisPlus+达梦数据库(DM)
最近在做一个政府项目,由于项目之前使用的 MySQL 数据库,为了适配国产化,需要将 MySQL 换成 达梦数据库(DM),本次我选择了达梦数据库8(DM8),以下是切换过程
3682 0
达梦(DM)4、SpringBoot集成MyBatisPlus+达梦数据库(DM)
|
存储 弹性计算 数据库
阿里云服务器租用收费价格参考,弹性裸金属服务器架构云服务器收费价格表
弹性裸金属服务器架构阿里云服务器有计算型弹性裸金属服务器ebmc7、内存型弹性裸金属服务器ebmr7、AMD计算型弹性裸金属服务器ebmc7a、通用型弹性裸金属服务器ebmg6等实例规格可选,不同实例规格的租用收费价格是不一样的,本文为大家汇总了目前基于弹性裸金属服务器架构下的各个实例规格的阿里云服务器收费标准,以供参考。
阿里云服务器租用收费价格参考,弹性裸金属服务器架构云服务器收费价格表
|
9月前
|
存储 Java API
java 时区时间转为UTC
通过以上方法和代码示例,你可以轻松地在Java中将特定时区的时间转换为UTC时间。确保理解每一步的实现细节,应用到实际项目中时能有效地处理时区转换问题。
496 18
|
12月前
|
SQL 存储 关系型数据库
MySQL/SqlServer跨服务器增删改查(CRUD)的一种方法
通过上述方法,MySQL和SQL Server均能够实现跨服务器的增删改查操作。MySQL通过联邦存储引擎提供了直接的跨服务器表访问,而SQL Server通过链接服务器和分布式查询实现了灵活的跨服务器数据操作。这些技术为分布式数据库管理提供了强大的支持,能够满足复杂的数据操作需求。
542 12
|
存储 Java 数据库连接
南大通用GBase 8s大对象类型clob和text的比较说明
本文探讨了GBase数据库中用于存储大对象数据的字段类型,包括TEXT、CLOB、BYTE和BLOB,分析了它们的特点、适用场景及在实际应用中的最佳实践。重点介绍了不同数据大小对应的字段类型选择,以及在数据库工具和程序中操作这些类型的方法,强调了合理选择字段类型对提升数据库性能的重要性。
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
876 1
|
机器学习/深度学习
探索机器学习中的超参数调优策略
在机器学习模型的训练过程中,超参数的选择和调优对模型性能有着至关重要的影响。本文探讨了不同的超参数调优策略,分析了它们的优缺点,并结合实际案例展示了如何有效地选择和调整超参数以提升模型的准确性和泛化能力。
585 1
|
域名解析 负载均衡 网络协议
【域名解析DNS专栏】DNS解析中的Anycast技术:原理与优势
在互联网中,DNS将域名转换为IP地址至关重要。Anycast技术通过将同一IP地址分配给多台地理上分散的服务器,确保客户端总能连接到最近且最轻载的服务器,从而加速DNS解析、实现负载均衡、提升抵御DDoS攻击的能力及服务高可用性。通过动态路由协议如BGP实现,Anycast极大地增强了DNS系统的性能和稳定性。
904 2
|
存储 关系型数据库 MySQL
MySQL性能优化实践指南
【10月更文挑战第16天】MySQL性能优化实践指南
786 0
|
数据采集 SQL 关系型数据库
在 MySQL 中使用 Union
【8月更文挑战第11天】
1101 0
在 MySQL 中使用 Union