Struts2和Servlet下载文件的区别

不得不说使用了struts2,在下载文件时变得非常方便,不需要像servlet那样一个读流,一个写流,虽然就几行代码。但相比struts2还是弱爆了。

不过话说回来,框架倒是给你省了不少事,但掌握servlet的下载方式还是非常重要的,毕竟是根本的东西。

1.Servlet下载简单代码

protected void service(HttpServletRequest req, HttpServletResponse resp)
 			throws ServletException, IOException {
 		resp.setHeader("Cache-Control", "no-cache");
 		resp.setContentType("application/vnd.ms-excel");
 		resp.setHeader("Content-Disposition", "attachment; filename=file.xls");
 		OutputStream os = resp.getOutputStream();
 		FileInputStream in = new FileInputStream(new File("xxxxx"));
 		int n = 0;// 每次读取的字节长度
 		byte[] bb = new byte[1024];// 存储每次读取的内容
 		while ((n = in.read(bb)) != -1) {
 			os.write(bb, 0, n);// 将读取的内容,写入到输出流当中
 		}
 		os.close();// 关闭输入输出流
 		in.close();
 	}

2.Stuts2下载简单代码

public class TestAction {
 	private InputStream excelStream;
 	private String filename;
 	
 	/**
 	 * 物理存在的excel文件
 	 * @return
 	 * @throws UnsupportedEncodingException
 	 */
 	public String down() throws UnsupportedEncodingException{
 		File file = new File(
 			"xxxx");//文件路径
 		try {
 			excelStream=new FileInputStream(file);
 			filename=new String("真实excel文件".getBytes("UTF-8"),"ISO8859-1");
 		} catch (FileNotFoundException e) {
 			e.printStackTrace();
 		}
 		return "success";
 	}
 	/**
 	 * @return the excelStream
 	 */
 	public InputStream getExcelStream() {
 		return excelStream;
 	}
 
 	/**
 	 * @param excelStream the excelStream to set
 	 */
 	public void setExcelStream(InputStream excelStream) {
 		this.excelStream = excelStream;
 	}
 
 	/**
 	 * @return the filename
 	 */
 	public String getFilename() {
 		return filename;
 	}
 
 	/**
 	 * @param filename the filename to set
 	 */
 	public void setFilename(String filename) {
 		this.filename = filename;
 	}
 	
 }
struts.xml配置文件:
<action name="down" class="com.techbirds.action.TestAction" method="down">
 	<result name="success" type="stream">
 		<param name="contentType">application/vnd.ms-excel   </param>
 		<param name="inputName">excelStream</param>
 		<param name="contentDisposition">filename="${filename}.xls"   </param>
 		<param name="bufferSize">1024</param>
 	</result>
 </action>


总结:相比之前,struts2明显比较简单,除了一堆配置(固定的),还是简单总结下,servlet需要流之间的转换而struts2直接获取输入流便可。


3.ajax无法下载文件,替换window.location.href方式下载

误区:导致页面跳转....,理解不深。。



java上传与下载——struts2和servlet案例 这是一个java上传与下载的案例,此案例有两个实现方式:struts2和servle,所以说有两个DEMO,可供新手学习。 立即下载

相关推荐

雪球股票数据接口

周期(day-日,week-周,…表示获取前8个周期(日)数据):类型(before-历史)表示深圳证券交易所,表示上海证券交易所):开始时间戳(一定要。

qq_31856061的博客 6803

详细分析java中文件的上传与下载(servlet与流行框架)

详细分析java中文件的上传与下载(servlet与流行框架)

不能说的秘密的博客 6281

5分钟快速搭建:使用ros1_bridge实现ROS2容器与ROS1主机的无缝通信

本文详细介绍了如何在5分钟内快速搭建基于ros1_bridge的通信方案,实现运行在Docker容器中的ROS2节点与宿主机ROS1系统的无缝数据交换。通过环境隔离、Docker容器化部署及选择性桥接配置,该方案能有效整合新旧系统,避免大规模代码重构,是机器人项目渐进式升级的实用策略。

weixin_29268637的博客 178

struts2和servlet区别

主要整合Hibernate技术 1、分析的servlet    客户端--->web容器-->web.xml-->servlet来处理 ----->model-->数据库    (web.xml返回信息) (1)//转发 request.setAttribute(“username”,username);(存入) request. getRequestDispatcher (“mana

Qiluluwawa的专栏 8911

【嵌入式面经】上海 70迈 线上笔试

“关注|点赞|收藏” 福利干货第一时间送达!最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作!

qq_56921854的博客 1135

软件项目管理期末复习(看这一篇就够了)

软件项目管理考试复习 🔶🔶🔶🔶🔶加了🔶的是考点 第一章软件项目管理概述 1.1.1项目及其特征 项目定义:🔶 项目就是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力; 是以一套独特而互相联系的任务为前提,有效地利用资源,在一段时间内满足一系列特定目标的多项相关工作的总称。 日常运作和项目的区别: 项目是一次性的,而日常运作是重复进行的。 项目是以目标为导向的,日常运作是通过效率和有效性体现的。 项目是通过项目经理及其团队工作完成的,日常运作是职能式的线性管理。 项目存在大量的变更管理,

qq_50886857的博客 3万+

struts 和servlet的关系

在struts2.0中,可以通过ServletActionContext.getRequest()获取request对象。 在action的方法中return一个字符串,该字符串对应struts.xml中的result标签的name相同,result标签中包含的就是跳转页面, 其原理,我的理解是这样的: 一.客户端提起一个(HttpServletRequest)请求,如上文在浏览器中...

dianhuopao7502的博客 248

air780e stm32标准库发送英文短信,如何实现?(附相关源码,仅供参考)

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1238

Struts2中Action与Servlet的联系与区别

Servlet处理客户端请求的步骤: 1、Web客户向Servlet容器(Tomcat)发出Http请求 2、Servlet容器分析客户的请求信息 3、Servlet容器创建一个HttpServletRequest对象,将客户请求的信息封装到这个对象中 4、Servlet容器创建一个HttpServletResponse对象  5、Servlet容器根据请求消息中的URL找到对应的ser

m0_37541228的博客 4524

多智能体系统在AI物流优化中的实际应用案例

订单波峰波谷难应对(如双11订单量暴增300%);动态干扰难处理(如突发交通拥堵、客户临时改地址);全局优化难实现(单辆车最优≠整体最优)。本文聚焦“多智能体系统(MAS)”这一AI技术,讲解其如何通过“群体智能”破解物流调度难题,并结合实际案例展示落地效果。本文从“生活故事→核心概念→技术原理→实战案例→未来趋势”逐步展开,用“快递员团队协作送外卖”类比MAS运作,结合Python代码模拟任务分配,最后通过某物流企业的真实项目验证效果。

AIGC应用创新大全的博客 1630

SAM3 几行代码支持任意图像分辨率,减少显存占用(针对transformers库)

几行代码让sam3支持任意图像分辨率

qq_41234663的博客 156

(10)Struts2文件下载

Struts2中的文件下载与在Servlet中下载相似,只不过是

zhangye张野的专栏 408

图像处理入门007:图像处理中的数学基础:线性代数与卷积

一种:把 OpenCV 当黑盒,调用,效果不对就乱调参数;另一种:理解每个像素是怎么被周围邻域"加权平均"的,理解核翻转、边界填充、stride 的含义。前者能干活,后者能解难题。一旦遇到自定义核(比如 ISP 上的锐化)、深度学习反向传播、医学图像重建,你就必须把卷积、相关、矩阵乘法这些基本功捡回来。线性代数三件套:向量点积、矩阵乘法、线性变换;2D 卷积的数学定义:核翻转、滑动窗口、边界填充。并手写一个,验证它与和的结果完全一致(误差 < 1e-9)。f∗gn∑m−∞∞f。

专注:太空算力、AI infra、异构调度、大模型成本工程 383

Strus2概览

目录1.Struts2框架 2 1. Struts2与Servlet区别: 2 2.Struts2的使用步骤: 2 3.Struts2里用到的主要jar包: 3 4.Action类作用: 3 5.Struts2执行的流程:【重点】 3 2.action类实现接收和处理页面的信息 3 1. 将页面的input标签的name值设为action类的属性,然后生成该属性的g

爱雨轩 647

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【转】框架面试

Struts2与Struts1的面试题 ###1.Struts2与Struts1的联系与区别?为什么要用Struts2? struts1与struts2都是mvc框架的经典实现模式。 Struts2不是从Struts1升级而来,而是由WebWork改名而来,而WebWork只是Xwork加了很多WEB拦截器而已 区别: 1.核心控制器改成了过滤器(过滤器比Servlet的...

a1533794503的博客 120

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

springMVC-初识

三层结构 框架 表现层(web层): springMVC 业务层(service层): spring 持久层(dao层): MyBatis 表现层一般使用MVC设计模型 M:model模型 例如javaBean等 V:view视图 例如jsp、html等 C:Controller控制器 例如Servlet等 springMVC:基于java实现MVC设计模型的请求驱动类型的轻量级Web框架,属于springFrameWork的后续产品 springMVC和Struts2区别 相同:都

qq_41617261的博客 407

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【Struts】Struts和Servlet比较

我的个乖乖,原来Struts和Servlet竟然是如此的相似。 1、配置文件:struts的配置文件写在struts.xml。而Servlet的配置文件下载Web.xml。 ShowAddItemServlet com.bjpowernode.drp.basedata.web.ShowAddItemServlet servlet-mapping> ShowAd

柠檬树 1339

day27_struts2环境搭建&配置文件

一、学习方法: 做好笔记。Struts2内容比较多,比较杂。 多做实验,证明结论。 二、Servlet PK Filter Servlet: void init(ServletConfig cfg);//初始化,读取Servlet的配置参数 void service(ServletRequest request,ServletResponse response);服务方法,用户的每次请求

优快云_AF的博客 1032

struts2文件下载 与 jsp文件下载的方式

最开始是先了解 struts2的文件下载,书上云:可以通过<a标签直接来连接目录地址来下载,但是不能实现 中文文件下载(乱码)、隐藏文件在项目中的路径、下载权限(action中、servlet中处理)、设置浏览器不认识的文件类型(如浏览器对txt和图片格式默认不会出现下载提示框而是直接在页面显示,因为浏览器认识它)等等。 为了实现上述功能才用struts2的文件下载,简单方便。 ...

weixin_30568591的博客 132

struts2的数据封装

文章目录struts2的Servlet的API的访问struts2的结果页面的配置struts2的数据的封装struts2的复杂类型的数据封装 struts2的Servlet的API的访问 struts2的结果页面的配置 struts2的数据的封装 struts2的复杂类型的数据封装 ...

qq_42216575的博客 471

Java Struts2 (一)

一、Struts2简介 1、Struts2概述 Struts2是Apache发行的MVC开源框架。注意:它只是表现层(MVC)框架。 2、Struts2的来历 Struts1:也是apache开发的一套mvc的开源框架。在2005年之前非常流行。   弊端:Struts1的核心控制器就是一个Servlet。随着使用者的增多,弊端开始出现。 Struts2:在long long ago,有一个设计超

github_39294367的博客 9135

Struts2和Struts1.x的区别

在本系列教程中我们将学习到Struts2的各种技术。在本教程中使用的工具和程序库的版本如下: 开发工具:MyEclipse6 Web服务器:Tomcat6 Struts版本:Struts2.0.11.1 JDK版本:JDK1.5.0_12 J2EE版本:Java EE5.0 在本系列教程中Web工程的上下文路径都是struts2,如果在Web根目录有一个...

thewebcode 200

Struts之拦截器与文件上传下载

一、拦截器(Interceptor)      拦截器是动态拦截Action调用的对象,拦截器将Action共用的行为独立出来,在Action执行前后执行。这也就是我们所说的AOP,它是分散关注的编程方法,它将通用需求功能从不相关类之中分离出来;同时,能够共享一个行为,一旦行为发生变化,不必修改很多类,只要修改这个行为就可以。 写action方法要继承Interceptor,要有三个方法 ...

oydl_1234的博客 572

java中struts2框架,struts2框架入门

如果你之前在MVC模式的时候一直都是通过servlet,获取和返回数据,那么现在开始学习struts2框架,Struts是一个实现MVC设计模式的优秀的框架。它的许多优点我就不说了。我用自己做的一张图说明servlet和struts2的区别。写一个最基本的开发步骤,完成开发。(1)创建WEB 工程(2)导入必要jar包(3) 编写JSP 页面(4)编写Action 服务器端处理逻辑(5)进行框架配...

weixin_35759015的博客 147
上一篇: java中如何将OutputStream转换为InputStream
下一篇: Myeclipse10 遇到 jquery-1.8.0.min.js文件验证出错解决
IMSIB
博客等级 码龄17年 5粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值