许多 Web 应用、企业应用涉及到长时间的操作,例如复杂的数据库查询或繁重的某 ML处理等,虽然这些任务主要由数据库系统或中间件完成,但任务执行的结果仍旧要借助JSP 才能发送给用户
本文介绍了一种通过改进前端表现层来改善用户感觉、减轻服务器负载的办法
当 JSP 调用一个必须长时间运行的操作,且该操作的结果不能(在服务器端)缓冲,用户每次请求该页面时都必须长时间等待
很多时候,用户会失去耐心,接着尝试点击浏览器的刷新按钮,最终失望地离开
本文介绍的技术是把繁重的计算任务分离开来,由一个独立的线程运行,从而解决上述问题
当用户调用 JSP 页面时,JSP 页面会立即返回,并提示用户任务已经启动且正在执行;JSP 页面自动刷新自己,报告在独立线程中运行的繁重计算任务的当前进度,直至任务完成
一、模拟任务首先我们设计一个 TakBean 类,它实现 ng
Runnable 接口,其 run()方法在一个由 JSP 页面(tart
jp )启 动的独立线程中运行
终止 run()方法执行由另一个 JSP 页面 top
TakBean 类还实现了 java
Serializable 接口,这样 JSP 页面就可以将它作为JavaBean 调用:packagetet
barBean;importjava
Serializable;publicclaTakBeanimplementRunnable,Serializable{privateintcounter;privateintum;privatebooleantarted;privatebooleanrunning;privateintleep;publicTakBean(){counter=0;um=0;tarted=fale;running=fale;leep=100;}}TakBean 包含的"繁重任务