Spring MVC项目中通过IE导出报表无法下载

admin 2025-09-16 阅读:41 评论:0
最近一个重构的系统上线后客户发现无法使用IE6下载报表,具体为能弹出“另存为”对话框,但没有显示报表名称,点击保存后报错,无法下载。但是在我的WIN7笔记本上使用IE9和Firefox均能正常下载whatsapp登录,使用同事的WIN7下的...

最近一个重构的系统上线后客户发现无法使用IE6下载报表,具体为能弹出“另存为”对话框,但没有显示报表名称,点击保存后报错,无法下载。但是在我的WIN7笔记本上使用IE9和Firefox均能正常下载whatsapp登录,使用同事的WIN7下的搜狗浏览器也可以正确下载。由于我将项目的Spring版本从3.0.5.RELEASE升级到了3.1.0.RC1,所以一度以为是由于Spring框架内部的问题telegram中文版,但是在对比的新旧代码后发现问题不在这,新版本的代码中多了一个检测session超时的拦截器,其中有段关键代码:

response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", -1);

为什么要这样写参见我的这篇博文。

先简单说一下我们的报表导出原理,我们采用在Excel上画好模版,另存为“xml模版”,然后将xml的内容复制到jsp文件内,添加jstl支持使jsp文件动态化,用户访问一个url时,control端处理完毕后执行

response.setHeader("Content-Disposition", "attachment; filename=测试报表.xls");

使用户浏览器弹出一个另存为对话框,保存后就将这个jsp文件变成了后缀名为xls的excel文件(其实本质还是一个文本文件)。

回到导出报表上,通过jmeter工具发送url请求后的取样器结果中包含这样一段:

Thread Name: 线程组 1-1
Sample Start: 2011-10-26 13:38:23 CST
Load time: 5253
Latency: 31
Size in bytes: 12414200
Sample Count: 1
Error Count: 0
Response code: 200
Response message: OK
Response headers:
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Expires: Thu, 01-Jan-1970 00:00:00 GMT
Content-Disposition: attachement; filename=excel.xls
Content-Language: zh-CN
Content-Type: application/vnd.ms-excel;charset=gb2312
Set-Cookie: JSESSIONID=e1uhcjpgko27zheg3bfajw6y;Path=/lmkweb
Transfer-Encoding: chunked
Server: Jetty(7.2.0.v20101020)
HTTPSampleResult fields:
ContentType: application/vnd.ms-excel;charset=gb2312
DataEncoding: gb2312

去掉拦截器的no-cache这段代码后,在IE6中就能正确下载了,所以初步认为是response的header中的Cache-Control和Content-Disposition冲突了(IE6,IE7等等),但是底层细节不甚明了(WIN7的IE9和Firefox没有问题)。

另:在写测试代码时发现一个以前就想知道原因的现象,即如果这个报表文件非常小,IE的另存为对话框弹出后会显示字节数,而如果非常大,等一会儿弹出的对话框不显示字节数,在下载的过程中会显示下载了多少,下载速度等等。

这次在测试的jsp文件中加入了

<% 
for (int i = 0; i < 10000; i++) {
	System.out.println("[" + i + "]");
%>   
...
<% 
}
%>

在浏览器中测试发现,在控制台打印到70左右时便不再输出了whatsapp网页版,而页面就弹出另存为对话框,点击保存后,控制台又开始打印。而在jmeter测试中不存在这种暂停。所以初步认为浏览器保存jsp文件时应该有一种缓存机制,非常有意思。

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

分享:

扫一扫在手机阅读、分享本文

3502文章数 0评论数
热门文章
  • 详细指南:WhatsApp国内使用方法全攻略-下载安装、注册登录及功能使用攻略

    详细指南:WhatsApp国内使用方法全攻略-下载安装、注册登录及功能使用攻略
    一、下载与安装WhatsApp WhatsApp是一款全球使用范围极广的即时通讯软件,不仅可以实现文本聊天,还能进行语音、视频通话WhatsApp中文版,发送文件等功能。由于众所周知的原因,国内用户想要下载和安装WhatsApp可能会遇到一些困难。不过,只要按照以下步骤操作,就能顺利完成WhatsApp的下载和安装。 首先,我们需要解决的是下载问题。由于WhatsApp在国内的应用商店无法直接下载,所以我们需要寻找其他的下载途径。Android用户可以选择到各大安卓市场搜索下...
  • 苹果IOS5.1.1机完美越狱

    苹果IOS5.1.1机完美越狱
    越狱工具下载:(需手动复制: http://bbs./read-htm-tid-4804612.html ) 详细的越狱教程: Absinthe 2.0.4的越狱方法与Absinthe 1.0的越狱方法完全一样,非常简单的“傻瓜一键式”。不过这里绿毒有说明,最好重新刷固件。支持越狱设备IOS5.1.1的固件下载地址请点击本站的IOS固件下载,看下图: 下载完固件之后,把设备连接iTunes,开始刷固件。你也可以选择不刷,但是在越狱的过程之中,新的系统在越狱时会比较的顺利,...
  • 电脑微信的聊天照片文件在哪里微信图片保存电脑哪个文件夹

    电脑微信的聊天照片文件在哪里微信图片保存电脑哪个文件夹
    1. 怎么找到微信聊天图片在哪个文件夹里 图片保存路径:/storage/emulated/tencent/MicroMsg/WeiXin/文件夹,这个是完整路径。而在文件夹中只需要找到/tencent/MicroMsg/WeiXinWhatsApp中文版,就可以了,前面两个文件夹是系统根目录。以下是保存及查找图片的方法步骤介绍。 第一步、找到桌面的微信APP,直接点击打开这个微信的APP。 2. 电脑微信图片保存在哪个文件夹 个人微信文件夹。 电脑版微信聊天的图片,都保存到...
  • Windows 11版WhatsApp将从UWP/Native切换回WebView2打包模式

    Windows 11版WhatsApp将从UWP/Native切换回WebView2打包模式
    Meta(最近更名为 Meta AI)悄然宣布,WhatsApp 将在 Windows 11 上放弃 UWP(WinUI)WhatsApp中文版,退回采用基于 Chromium 的容器。这意味着 WhatsApp 又回到了几年前的样子。由于 web.whatsapp.com 一直领先于 Windows 应用开发,它确实拥有一些新功能,但速度更慢,占用更多内存。 如果独立开发者因为无力维护所有平台的代码库而选择 Web 应用程序,那是一回事,但当像 Meta 这样价值万亿美元...
  • 小米下載WhatsApp的完整指南:安装与使用注意事项

    小米下載WhatsApp的完整指南:安装与使用注意事项
    综上所述,确保您的小米手机具备以上条件,将有助于您顺利下载和安装WhatsApp,享受便捷的通讯服务。在满足这些条件后,您就可以按照后续步骤进行WhatsApp的下载和安装。 2. 下载和安装WhatsApp的具体步骤 在小米手机上下载和安装WhatsApp的具体步骤相对简单,但需注意一些特殊情况。首先,确保你的手机系统已更新到最新版本,以保证最佳的兼容性。由于安卓手机商店内无法直接找到WhatsApp,你可以通过APKPure等第三方应用商店进行下载。打开APKPure应用...