日期:2014-05-17  浏览次数:20592 次

Struts2的action执行时间比较长,导致不能跳转页面,该如何处理?
问题是这样的:我用poi做一个excel导出,当数据量小的时候就能跳转页面,超过一定数据量是在action里面的处理时间久比较长,当action处理完毕后不能跳转页面,页面还是在等待状态。我主要是想知道为什么会出现这种问题,该如何解决。当然sql和代码优化先不管,以后再处理。 

------解决方案--------------------
这么没什么好办法吧,你导出比较慢,是因为你的数据量太大了。
你定下位,看看主要时间消耗在哪里,是在sql查询中,还是在poi填充数据的时候。
你如果导出的数据过大,内存都会溢出的。
或者你可以考虑分成几个excel文件,然后返回链接,通过链接再进行下载~
------解决方案--------------------
是在不行那就异步吧,等后台完全打完包,再展示这个链接。
------解决方案--------------------
嗯,,用户ajax.  成功返回前,弹个窗口,,,“正在处理中.....”
------解决方案--------------------
ajax,类似大文件上传
------解决方案--------------------
这个应该和浏览器有关系吧。

浏览器访问一个页面后,应该会有个超时时间,多少秒之后服务器没有响应,浏览器就认为超时了,即使后来有响应了,浏览器也不处理。
------解决方案--------------------
可以试试wireshark抓包分析一下就比较清楚了,前提是你要有点网络基础!
------解决方案--------------------
引用:
Quote: 引用:

你跳转页面和下载excel 有什么关系? 下载完后再跳转?什么思维~  
下载处理时间长,和页面跳转没必然关系。最多你开线程异步处理下载功能

再说现在我不管功能是否合理,只是想知道怎么解决这种问题。


好吧,那你可以开异步线程,点击生成Excel时候,直接返回页面,后台继续生成。监控生成进度,显示前台。
满100% 直接刷新页面。或者你只显示任务生成ing... 然后等待返回。Ajax或者什么自己考虑。
 将生成的文件,放在本地服务器临时文件夹内,给出下载路径,显示页面上。实现点击下载。
这样就避免了页面会挂掉,无反映的情况。
思路就是,先把页面显示出来。再处理。了解了么
------解决方案--------------------
另外,你那种问题无法解决。就是个错误的思路。貌似调节 浏览器等待响应时间,
以及项目服务器响应时间 或许可以。具体我就没碰到过这种问题,因为我不会这么做。
你总不能让每个用户为了适应你的软件,都去调节浏览器吧?钻牛角尖了你,这种问题几乎不用去研究。
------解决方案--------------------
直接用流传过去不行吗,为什么非要先导出到本地再下载?