1. 场景描述

因项目需查询数据量比较大(需要查询Hbase等nosql数据库),采用用户点击查询后,后台查询并生成查询文件;然后消息通知用户后,用户点击下载的方式来满足用户需求。

2. 解决方案

Web容器用的Tomcat,拟采用tomcat提供文件下载功能。

2.1 开启虚拟目录与路径映射(不建议)

需修改tomcat下的web.xm和server.xml文件

2.1.1 开启虚拟目录

修改web.xml

<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param> -------------------修改为:-----------
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
2.1.2 开启路径映射

修改server.xml

     <Host name="localhost"  appBase="webapps"
unpackWARs="true" autoDeploy="true" deployOnStartup="true">
<Context path="" docBase="laowang" debug="0" reloadable="true"/>
</Host> ------------新加一个<Context>----------------
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true" deployOnStartup="true">
<Context path="" docBase="laowang" debug="0" reloadable="true"/>
<Context path="/test" docBase="/home/laowang/test" debug="0" privileged="true"></Context>
</Host>

其中:path中的 "/test"为请求访问路径;/home/laowang/test为文件存在服务器的实际路径。

2.1.3 效果

2.1.4 存在不足

web中listings的 含义是Directory Listing(虚拟目录),默认false其实是处于安全考虑的,修改为true其实是不安全的,不建议的。

2.2 将文件放置到ROOT下(不建议)

2.2.1 说明

直接将文件放置到目录:apache-tomcat-8.0.53/webapps/ROOT,因为tomcat本身提供的就是web服务,可以直接访问,不用修改任何东西。

2.2.2 效果

2.2.3 存在不足

ROOT目录,重新打包的时候,文件会丢失的,只能用于临时文件还可以,与项目需求不符合。

2.3 只开启路径映射及相关配置(建议)

2.3.1 开启路径映射
 <Host name="localhost"  appBase="webapps"
unpackWARs="true" autoDeploy="true" deployOnStartup="true">
<Context path="" docBase="laowang" debug="0" reloadable="true"/>
</Host> ------------新加一个<Context>----------------
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true" deployOnStartup="true">
<Context path="" docBase="laowang" debug="0" reloadable="true"/>
<Context path="/test" docBase="/home/laowang/test" debug="0" privileged="true"></Context>
</Host>
2.3.2 效果

(1)因未开启虚拟路径服务,所以不能访问其他文件。

(2)只有文件名称完全对的上,才能访问。

2.3.3 存在问题及解决方案

大家通过截图可能也发现了,文件是直接打开的,而并不是下载到本地,项目需求是要下载到本地打开的。

有两个方式解决

(1)第一个是在打开的文件右键-》另存为就可以下载,但是这样太不不方便。

(2)结合前端html使用a标签,点击后直接下载。(推荐)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="http://10.192.168.11:9108/test/test.txt" download="test.txt">download</a>
</body>
</html>

效果图,点击后就直接下载到默认目录了。


web文件下载(附方案及源码配置)的更多相关文章

  1. Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)

    Visual Studio 2015开发Qt项目实战经验分享(附项目示例源码)    转 https://blog.csdn.net/lhl1124281072/article/details/800 ...

  2. HTML与CSS入门经典(第9版)试读 附随书源码 pdf扫描版​

    HTML与CSS入门经典(第9版)是经典畅销图书<HTML与CSS入门经典>的最新版本,与过去的版本相同,本书采用直观.循序渐进的方法,为读者讲解使用HTML5与CSS3设计.创建并维护世 ...

  3. WEB前端开发学习:源码canvas 雪

    WEB前端开发学习:源码canvas 雪 双旦节要到了,程序员们为了响应气氛,特别用代码制作了动态雪花,WEB前端开发学习的初学者们一起跟着案例做一遍吧! <!DOCTYPE html> ...

  4. [C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护)

    [C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护) 标签: .net加密产品c#dll工具 2011-03-24 21:06 27009人阅读 评论(13) 收藏 举报 分类: C ...

  5. NLP大赛冠军总结:300万知乎多标签文本分类任务(附深度学习源码)

    NLP大赛冠军总结:300万知乎多标签文本分类任务(附深度学习源码)       七月,酷暑难耐,认识的几位同学参加知乎看山杯,均取得不错的排名.当时天池AI医疗大赛初赛结束,官方正在为复赛进行平台调 ...

  6. web框架前言与学生数据库系统(附1.0源码)

    对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. import socket def f1(request): ""&quo ...

  7. 二、Uniapp+vue+腾讯IM+腾讯音视频开发仿微信的IM聊天APP,支持各类消息收发,音视频通话,附vue实现源码(已开源)-腾讯云后台配置TXIM

    项目文章索引 1.项目引言 2.腾讯云后台配置TXIM 3.配置项目并实现IM登录 4.会话好友列表的实现 5.聊天输入框的实现 6.聊天界面容器的实现 7.聊天消息项的实现 8.聊天输入框扩展面板的 ...

  8. Linux 部署ASP.NET SQLite 应用 的坎坷之旅 附demo及源码

    Linux 部署ASP.NET SQLite 应用 的坎坷之旅.文章底部 附示例代码. 有一台闲置的Linux VPS,尝试着部署一下.NET 程序,结果就踏上了坑之路,不过最后算是完美解决问题,遂记 ...

  9. 移动web app开发必备 - Deferred 源码分析

    姊妹篇  移动web app开发必备 - 异步队列 Deferred 在分析Deferred之前我觉得还是有必要把老套的设计模式给搬出来,便于理解源码! 观察者模式 观察者模式( 又叫发布者-订阅者模 ...

随机推荐

  1. Keil5生成bin文件

    进入“Options for Target”设置界面如下: 如图所示方框中输入: fromelf.exe --bin -o "$L@L.bin" "#L" 生成 ...

  2. synchronized 专题

    这几天不断添加新内容,给个大概的提纲吧,方面朋友们阅读,各部分是用分割线隔开了的: synchronized与wait()/notify() JMM与synchronized ThreadLocal与 ...

  3. 微信小程序把玩(十八)picker组件

    原文:微信小程序把玩(十八)picker组件 picker选择器分为三种,普通选择器,时间选择器, 日期选择器 用mode属性区分,默认是普通选择器.测试时时间和日期点击无反应不知道是BUG还是啥!没 ...

  4. EnterpriseLibrary 6.0 AOP 使用问题

    因为EnterPrise Library 6.0改动了模块的功能类不再自动从Unity创建了,也就是引导也不依赖Unity容器组件,需要先使用静态方法注册一下 private static void ...

  5. Attention is all you need及其在TTS中的应用Close to Human Quality TTS with Transformer和BERT

    论文地址:Attention is you need 序列编码 深度学习做NLP的方法,基本都是先将句子分词,然后每个词转化为对应的的词向量序列,每个句子都对应的是一个矩阵\(X=(x_1,x_2,. ...

  6. Windows Vista 的历史地位

    Windows Vista,这是一个不那么如雷贯耳的Windows名字,很多人甚至从来没有体验过这个操作系统.但是,Windows Vista刚刚推出时候所引起的话题性,恐怕是其后的Win7也难以与之 ...

  7. 什么是Android NDK

    1.NDK是一系列工具的集合. NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.这些工具对开发者的帮助是巨大的. NDK集成了交叉编译 ...

  8. 主要C++流派,看看你是哪一流

    1. 经典C++流:类是核心,例程多用C Runtime的,很少用模版,一般是正统教育的结果.2. 古典C流:基本上当C用,偶尔用用对象,不使用异常,喜欢怀旧.3. MFC流:秉承MFC的风格,主要使 ...

  9. Microsoft Development Platform Technologies

  10. DataVeryLite入门教程(一) 配置篇

    DataVeryLite 是基于.net 4.0的数据库持久化ORM框架. 目前支持的数据库有Sqlserver,Mysql,Oracle,Db2,PostgreSql,Sqlite和Access. ...