(十六)Servlet教程——Servlet文件下载

Servlet文件下载

       文件下载是将服务器上的资源下载到本地,可以通过两种方式来下载服务器上的资源。第一种是使用超链接来下载,第二种是通过代码来下载。

超链接下载

       在HTML或者JSP页面中使用超链接时,可以实现页面之间的跳转,但是当超链接链接的资源时浏览器无法识别的资源时就会自动下载。

       当遇到浏览器能够直接处理的文件时,会在浏览器中默认显示出来,比如txt、png、jpg等。当浏览器支持download属性时,也可以通过设置download属性强制浏览器下载文件。

       首先我们需要在项目中创建一个下载文件所在的文件夹。

如图所示我们创建了一个download目录,然后准备好一些供下载的文件。

然后需要把包含下载文件的文件夹添加到服务器外部资源设置中。

点击下拉框中的编辑配置菜单

点击“部署”按钮切换到“部署”选项卡,点击该界面中的添加按钮(+号按钮)

点击添加按钮后的界面展示如下图所示

点击“外部源”菜单后的界面展示如下图所示

选择download目录,点击确定按钮

然后依次点击“应用”和“确定”按钮

在web app文件夹下创建一个download.html文件,文件的内容如下

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>文件下载</title></head><body><!--使用超链接联链接浏览器可以识别的资源--><a href="download/JavaEE.jpg">JPG图片</a><!--使用超链接联链接浏览器无法识别的资源--><a href="download/体检报告.rar">rar文件</a></body></html>

启动该应用后,在浏览器中输入如下URL:

http://localhost:8080/s001/download.html

界面展示如下图所示

点击“JPG图片”这个超链接后的界面展示如下图所示

点击“rar文件”后的界面展示如下图所示 

当给超链接设置了download属性,但是没有设置属性值时,将会使用默认的文件名下载文件。如果设置了download属性的值,就使用设置的值作为下载文件的文件名。

接下来我们使用后台的方式实现文件的下载。

首先我们需要准备一个供下载文件的Servlet类DownloadServlet。

该类的具体内容如下

@WebServlet("/downloadServlet")public class DownloadServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("文件下载...");//设置请求的编码request.setCharacterEncoding("UTF-8");//获取文件下载路径String path = getServletContext().getRealPath("/download/");//获取要下载的文件名,设计通过前端界面传递过来String fileName = request.getParameter("fileName");//参数增加非空判断 trim() 去掉字符串前后的空格if (fileName == null || "".equals(fileName.trim())) {response.getWriter().write("请输入要下载的文件名!");response.getWriter().close();return;}//通过路径得到file对象File file = new File(path + fileName);//判断file对象是否存在,并且是一个标准文件if (file.exists() && file.isFile()) {//设置响应类型 该响应指示浏览器将响应视为一个可以下载的文件//而不是在浏览器中直接打开response.setContentType("application/x-msdownload");//设置头信息response.setHeader("Content-Disposition", "attachment;filename=" + fileName);//得到输入流InputStream is = new FileInputStream(file);//得到输出流ServletOutputStream os = response.getOutputStream();//定义byte数组byte[] car = new byte[1024];//定义长度int len = 0;//循环输出while ((len = is.read(car)) != -1) {os.write(car, 0, len);}//关闭流 释放资源os.close();is.close();} else {response.getWriter().write("文件不存在,下载失败");response.getWriter().close();}}}

     在之前的download.html中添加一个form,将form的action设置为上面创建的Servlet。

该界面更新后的代码如下

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>文件下载</title></head><body><!--使用超链接联链接浏览器可以识别的资源--><a href="download/JavaEE.jpg">JPG图片</a><!--使用超链接联链接浏览器无法识别的资源--><a href="download/体检报告.rar">rar文件</a><br><form action="downloadServlet">文件名:<input type="text" name="fileName" placeholder="请输入要下载的文件名"><button>下载</button></form></body></html>

完成上述工作后,启动该应用

在浏览器中输入如下URL:

http://localhost:8080/s001/download.html

在文本输入框中输入JavaEE.jpg,点击下载按钮,就可以成功下载download文件夹中的文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/833971.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK3568 学习笔记 : Linux emmc 内核启动 rootfs 根文件系统无法正常挂载问题的分析

问题描述 平台 &#xff1a; NanoPi-R5C 开发板 RK3568 平台。 手动编译的 Linux 内核&#xff0c;结果发现大概率 emmc 无法正常初始化&#xff0c;导致 rootfs 根文件系统无法正常挂载 Linux 内核版本&#xff1a; 6.1 Linux 内核代码位置&#xff1a; https://github.com…

第2章 WebServer进阶

2.1 使用多线程处理多用户请求 2.1.1 多线程Socket通信 在上一章的案例中&#xff0c;服务端显然只能处理一次浏览器请求&#xff0c;请求一次浏览器端就结束程序。如何解决这个问题呢&#xff1f;可以采用多线程Socket通信技术&#xff0c;解决多用户并发请求。 在多线程Sock…

从谚语:“一手交钱,一手交货来”谈谈什么是数据库事务

事务与交易 一手交钱&#xff0c;一手交货 一手交钱&#xff0c;一手交货&#xff0c;谚语&#xff0c;意思是指钱和货当场相交&#xff0c;互不拖欠。出自明朝施耐庵《水浒传》第二一回。 Transaction 意思 我们先来看一下来自于剑桥英-英词典的解释&#xff1a; transac…

Flask-HTTP请求、响应、上下文、进阶实验

本节主要目录如下&#xff1a; 一、请求响应循环 二、HTTP请求 2.1、请求报文 2.2、Request对象 2.3、在Flask中处理请求 2.4、请求钩子 三、HTTP响应 3.1、响应报文 3.2、在Flask中生成响应 3.3、响应格式 3.4、Cookie 3.5、session&#xff1a;安全的Cookie 四、…

企业车辆管理系统参考论文(论文 + 源码)

【免费】关于企业车辆管理系统.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89282550 企业车辆管理系统 摘 要 随着经济的日益增长,车辆作为最重要的交通工具,在企事业单位中得以普及,单位的车辆数目已经远远不止简单的几辆,与此同时就产生了车辆资源的合理…

汽车灯罩一般都是用什么材质做的?汽车车灯的灯罩如果破损破裂破洞了要怎么修复?

汽车灯罩一般都是用什么材质做的&#xff1f; 汽车灯罩一般使用的主要材质是聚碳酸酯&#xff08;PC&#xff09;和丙烯酸酯&#xff08;PMMA&#xff09;这两种塑料。这两种材料具有良好的透明性、耐候性和耐冲击性&#xff0c;因此非常适合用于汽车灯罩的制造。 聚碳酸酯&am…

小程序支付的款项流转与到账时间

商家做小程序&#xff0c;最关心的是客户通过小程序下单支付的钱&#xff0c;是怎么样的流转状态以及最终到哪里。因此&#xff0c;本文将详细解析款项最终流向何处以及多久能够到账。 一、小程序支付的款项流向 当用户在小程序内完成支付后&#xff0c;款项并不会直接到达商…

5月8日学习记录

_[FBCTF2019]RCEService&#xff08;preg_match函数的绕过&#xff09; 涉及知识点&#xff1a;preg_match函数绕过&#xff0c;json的格式&#xff0c;正则回溯 打开环境&#xff0c;要求用json的格式输入 搜索学习一下json的语法规则 数组&#xff08;Array&#xff09;用方括…

制造版图大变革!逾10座晶圆厂蓄势待发 | 百能云芯

在全球半导体产业的激烈竞争和市场需求的复杂波动中&#xff0c;晶圆厂建设热潮正在美国兴起&#xff0c;这一波建设浪潮的核心动力之一&#xff0c;便是美国政府推出的《芯片与科学法案》所承诺的巨额补贴&#xff0c;旨在提升美国在全球半导体行业的竞争力。 当地时间4月25日…

JSP技术讲解

目录 1、JSP简介 2、JSP体验 3、JSP运行原理 4、JSP基本语法 5、JSP指令 6、JSP内置九大对象 7、JSP标签 8、JSP配置 9、JSP排错 10、总结 在前面的Servlet学习中发现Servlet本质是一个java程序&#xff0c;因此Servlet更加擅长编写程序的业务逻辑&#xff0c;而如果要…

shpfile转GeoJSON;控制shp转GeoJSON的精度;如何获取GeoJSON;GeoJSON是什么有什么用;GeoJSON结构详解(带数据示例)

目录 一、GeoJSON是什么 二、GeoJSON的结构组成 2.1、点&#xff08;Point&#xff09;数据示例 2.2、线&#xff08;LineString&#xff09;数据示例 2.3、面&#xff08;Polygon&#xff09;数据示例 2.4、特征&#xff08;Feature&#xff09;数据示例 2.5、特征集合&…

Hass哈斯数控数据采集网络IP配置设置

机床数据采集&#xff08;MDC&#xff09;允许你使用Q和E命令通过网络接口或选项无线网络从控制系统提取数据。设置143支持该功能&#xff0c;并且指定控制器使用这个数据端口。MDC是一个需要一台附加计算机发送请求&#xff0c;解释说明和存储机床数据的软件功能。这个远程计算…

【计算机毕业设计】基于SSM++jsp的电子竞技管理平台【源码+lw+部署文档+讲解】

目录 1 绪论 1.1 研究背景 1.2 目的和意义 1.3 论文结构安排 2 相关技术 2.1 SSM框架介绍 2.2 B/S结构介绍 2.3 Mysql数据库介绍 3 系统分析 3.1 系统可行性分析 3.1.1 技术可行性分析 3.1.2 经济可行性分析 3.1.3 运行可行性分析 3.2 系统性能分析 3.2.1 易用性指标 3.2.2 可…

JavaScript数字分隔符

● 如果现在我们用一个很大的数字&#xff0c;例如2300000000&#xff0c;这样真的不便于我们进行阅读&#xff0c;我们希望用千位分隔符来隔开它&#xff0c;例如230,000,000; ● 下面我们使用_当作分隔符来尝试一下 const diameter 287_266_000_000; console.log(diameter)…

C++学习————第十天(string的基本使用)

1、string 对象类的常见构造 (constructor)函数名称 功能说明&#xff1a; string() &#xff08;重点&#xff09; 构造空的string类对象&#xff0c;即空字符串 string(const char* s) &#xff08;重点&#xff09;…

PostgreSQL的学习心得和知识总结(一百四十一)|深入理解PostgreSQL数据库数据库角色的使用及预定义角色的原理

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

Mysql 基础 - 常见 子句

算数运算符 > < > < !/<> 逻辑运算符 3i in is null is not null 2l limit like 2o or 、order by 1a and ib between and 1n not and、or 、not、 in、 orderby、 limit、 like、 between...and、 is null 、is not null

【C++】C++11--- 列表初始化|关键字

目录 前言 列表初始化 创建对象时的列表初始化 单参数隐式类型转换 多参数的隐式类型转换 new表达式中使用列表初始化 列表初始化适用于STL 容器 模板类initializer_list 关键字auto 关键字decltype 关键字nullptr 前言 C标准10年磨一剑&#xff0c;第二个真正意义上…

学习软考----数据库系统工程师20

数据库技术基础 主要内容如下&#xff1a; DBMS的功能和特点 课本上&#xff1a; 数据库系统的三级模式结构 数据模型 E-R图

AI讲师大模型培训老师叶梓:大模型应用的方向探讨

大模型应用的关键方向及其落地案例可以从多个角度进行探讨&#xff0c;结合最新的研究和实际应用案例&#xff0c;我们可以更全面地理解这些技术如何推动社会和经济的发展。 Agent&#xff08;数字代理&#xff09;: 方向说明:Agent方向的AI技术旨在创建能够独立执行任务、做出…