后台使用一个线程来进行你的计算程序,并且它要根据完成的百分比来修改一个静态变量。
客户端使用ajax的方式定时(1次/2秒)来请求服务端,服务端的反馈程序只需要返回这个变量的值。客户端拿到返回值后,使用javascript来显示一个进度,比如用一个有底色的table的宽度来表示。

解决方案 »

  1.   

    没有例子了,只是偶的想法而已,哈哈
    应该是可以实现的,ajax方面你可以用DWR框架来方便的实现,多线程也很简单,参考下thinking in java里边的就足够了。
    大概流程是这样的:
    1、页面中的一个按钮触发一个javascript方法->ajax向服务端发送请求->服务端接收到请求后开一个线程来做你的计算程序(程序运行着还没有结束)->主程序返回一个值表明计算已经开始->ajax向客户端返回值->客户端获得值后开始触发显示进度的另一个javascript方法2、显示进度的js方法被触发后使用js的定时功能,每2秒或n秒调用另外一个js方法(用于检查服务器计算进度)3、检查进度的这个方法通过ajax向服务端发送检查进度的请求->服务端将计算程序实时更新的那个变量(百分比形式)的值返回->ajax向客户端返回进度值->客户端获得值后将页面上一个<table bgcolor="blue">或图像的宽度进行调整,把进度值设置为它的宽度,然后把进度值放在表格中间显示,一个进度功能就出来了4、当接收到服务器的进度状态为100%完成时,客户端的js停止定时刷新功能,并显示一个处理完成的提示即可。这种功能很花哨也很酷,但是开发起来比较麻烦,简单的处理就是:
    客户端js程序首先在页面上显示一个会动的gif(比如windows启动时候的那种滚动条),然后通过ajax发送处理请求到服务器端,服务端开始调用计算程序,但不要使用线程来处理,也不要返回结果。
    但服务器计算程序完成,返回结果表示处理完毕。客户端接收到结果后,将那个动画gif删除,并显示处理完毕的提示。
    这种实现起来也很简单,只是没有实时的进度而已。自己权衡了。