基本上,您希望在HTTP会话中(或在涉及整个应用程序任务的Servlet上下文中)存储对任务的引用以及任务本身的进度。这样,您必须能够在每个HTTP请求上检索有关它的信息。
在Javascript中,您可以在特定的超时时间或特定的时间间隔后使用
setTimeout()或
setInterval()执行函数。您可以使用它重复触发Ajax请求,以请求进度的当前状态。一旦检索到状态,例如以最大值为100的整数(百分比)的形式,只需更新一些表示进度条的div和/或相应的HTML
DOM树中的百分比文本。
jQuery在引发ajaxical请求以及像这样遍历/操纵HTML
DOM树时非常有帮助。它最大程度地减少了代码冗长和跨浏览器兼容性的麻烦。
想象一下
doGet()servlet的如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String processId = "longProcess_" + request.getParameter("processId"); LongProcess longProcess = (LongProcess) request.getSession().getAttribute(processId); int progress = longProcess.getProgress(); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(String.valueOf(progress));}然后,您可以像下面这样使用它:
function checkProgress() { $.getJSON('progressServlet?processId=someid', function(progress) { $('#progress').text(progress + "%"); $('#progress .bar').width(progress); if (parseInt(progress) < 100) { setTimeout(checkProgress, 1000); // Checks again after one second. } });}


