日期:2014-05-18  浏览次数:20599 次

struts2有没有什么方式主动响应到页面?
本帖最后由 tiankangyan 于 2013-06-07 08:58:02 编辑
情况是这样的:
我在JSP页面通过ajax向action取数据,但是由于取数据的时间较长(20秒左右),所以我另开了一个线程去等数据,action则早早返回了。但等我线程能拿到数据时,不知道怎么响应给JSP页面了。大家看看有没有什么好的方式能解决,谢谢!

补充:数据是从设备中取的,数据传输加上设备响应需要这么长时间。我现在就在想有没有什么方式能让线程拿到数据后主动响应给JSP页面
Struts 多线程 action 取数据时间长

------解决方案--------------------
两种思路吧,
主动响应的方法我是没想到,
第一种能不能预先加载,就是服务器启动的时候就把所有需要的东西都准备好?这样提取返回就很快了。要知道如果一个需要等待20秒的网站那是相当差的。
第二种我没试验过,我想能不能发送请求那里添加一个js,另开一页面发送,相应返回到第二个页面上。这样第一个页面可以做一些其他工作。
------解决方案--------------------
引用:
Quote: 引用:

两种思路吧,
主动响应的方法我是没想到,
第一种能不能预先加载,就是服务器启动的时候就把所有需要的东西都准备好?这样提取返回就很快了。要知道如果一个需要等待20秒的网站那是相当差的。
第二种我没试验过,我想能不能发送请求那里添加一个js,另开一页面发送,相应返回到第二个页面上。这样第一个页面可以做一些其他工作。


谢谢你的回答,时间确实没办法,因为是读的实时数据,也没办法缓存什么的。
第二种方法,我是不是可以理解成js另开一个线程去等待?这个我也考虑过了,这里还有问题,就是如果不开线程去等待数据,则action响应期间会很卡;如果另开了线程,则没办法主动响应到JSP 



获取实时数据就用comet4j
------解决方案--------------------
comet4j没用过,不过看起来比较靠谱,不过估计通信资源占用会比较严重。
如果是有限次数的相应的话,用容器管理一下线程处理的数据,在页面加载之后js异步请求相应的数据从容器中拿出来。
html5的websocket可以主动推送。
------解决方案--------------------
客户端用AJAX异步没有错,服务端在SERVLET中,(你用的STRUTS2也可以,在ACTION页面中),开一个线程,往线程里传参,参数就为request,然后在这个线程里把数据处理好,并用request.write写入流中就可以了