许多Web应用、企业应用涉及到长时间的操作,例如复杂的数据库查询或繁重的XML处理等,虽然这些任务主要由数据库系统或中间件完成,但任务执行的结果仍旧要借助JSP才能发送给用户。本文介绍了一种通过改进前端表现层来改善用户感觉、减轻服务器负载的办法。
当JSP调用一个必须长时间运行的操作,且该操作的结果不能(在服务器端)缓冲,用户每次请求该页面时都必须长时间等待。很多时候,用户会失去耐心,接着尝试点击浏览器的刷新按钮,最终失望地离开。
本文介绍的技术是把繁重的计算任务分离开来,由一个独立的线程运行,从而解决上述问题。当用户调用JSP页面时,JSP页面会立即返回,并提示用户任务已经启动且正在执行;JSP页面自动刷新自己,报告在独立线程中运行的繁重计算任务的当前进度,直至任务完成。
一、模拟任务
首先我们设计一个TaskBean类,它实现java.lang.Runnable接口,其run()方法在一个由JSP页面(start.jsp)启动的独立线程中运行。终止run()方法执行由另一个JSP页面stop.jsp负责。TaskBean类还实现了java.io.Serializable接口,这样JSP页面就可以将它作为JavaBean调用:
package test.barBean;
import java.io.Serializable;
public class TaskBean implements Runnable,
Serializable
{
private int counter;
private int sum;
private boolean started;
private boolean running;
private int sleep;
public TaskBean()
{
counter = 0;
sum = 0;
started = false;
running = false;
sleep = 100;
}
}
TaskBean包含的“繁重任务”是计算1+2+3…+100的值,不过它不通过100*(100+1)/2=5050公式计算,而是由run()方法调用work()方法100次完成计算。work()方法的代码如下所示,其中调用Thread.sleep()是为了确保任务总耗时约10秒。
protected void work()
{
try
{
Thread.sleep(sleep);
counter++;
sum += counter;
} catch (InterruptedException e)
{
setRunning(false);
}
}
status.jsp页面通过调用下面的getPercent()方法获得任务的完成状况:
public synchronized int getPercent()
{
return counter;
}
如果任务已经启动,isStarted()方法将返回true:
public synchronized boolean isStarted()
详细解析JSP编程中进度条的设计实例(1)
时间: 2024-10-26 11:55:18
详细解析JSP编程中进度条的设计实例(1)的相关文章
详细解析JSP编程中进度条的设计实例
js|编程|设计 许多Web应用.企业应用涉及到长时间的操作,例如复杂的数据库查询或繁重的XML处理等,虽然这些任务主要由数据库系统或中间件完成,但任务执行的结果仍旧要借助JSP才能发送给用户.本文介绍了一种通过改进前端表现层来改善用户感觉.减轻服务器负载的办法. 当JSP调用一个必须长时间运行的操作,且该操作的结果不能(在服务器端)缓冲,用户每次请求该页面时都必须长时间等待.很多时候,用户会失去耐心,接着尝试点击浏览器的刷新按钮,最终失望地离开. 本文介绍的技术是把繁重的计算任务分离开来,由一
Android编程自定义进度条颜色的方法详解
本文实例讲述了Android编程自定义进度条颜色的方法.分享给大家供大家参考,具体如下: 先看效果图: 老是提些各种需求问题,我觉得系统默认的颜色挺好的,但是Pk不过,谁叫我们不是需求人员呢,改吧! 这个没法了只能看源码了,还好下载了源码, sources\base\core\res\res\ 下应有尽有,修改进度条颜色只能找progress ,因为是改变样式,首先找styles.xml 找到xml后,进去找到: <style name="Widget.ProgressBar"&
Java和jsp编程中应该注意的几个常见问题
1. 对应String类型的对象使用println()方法时,如果对象为null,将打印null而不是引发NullPointerException,由此引用的问题是容易造成错觉,对于以后对字符串的操作容易引起问题. 2. 引发NullPointerException异常,主要原因是没有对对象的存在性进行验证,在jsp编程中经常出现:if(request.getParameter("username").equals("xxx")).out.println(sessi
Java和JSP编程中应该注意的几个问题
js|编程|问题 1. 对应String类型的对象使用println()方法时,如果对象为null,将打印null而不是引发NullPointerException,由此引用的问题是容易造成错觉,对于以后对字符串的操作容易引起问题. 2. 引发NullPointerException异常,主要原因是没有对对象的存在性进行验证,在jsp编程中经常出现:if (request.getParameter("username").equals("xxx")).out.pri
浏览器-android WebView中进度条只能显示一次,为什么?
问题描述 android WebView中进度条只能显示一次,为什么? public class WebActivity extends Activity implements View.OnClickListener { private WebView webView; private EditText edit_web_adds; private Button btn_webadds_go, btn_web_back; private ProgressBar pb; String Url;
jsp编程中session的用法实例分析_JSP编程
本文实例讲述了jsp编程中session的用法.分享给大家供大家参考,具体如下: TTP协议是无状态的,即信息无法通过HTTP协议本身进传递.为了跟踪用户的操作状态,ASP应用SESSION对象.JSP使用一个叫HttpSession的对象实现同样的功能.HTTPSession 是一个建立在cookies 和URL-rewriting上的高质量的界面.Session的信息保存在服务器端,Session的id保存在客户机的cookie中.事实上,在许多服务器上,如果浏览器支持的话它们就使用cook
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
PHP + plupload.js JS插件实现多图上传并显示进度条加删除实例,废话不多说,直接上代码 HTML代码: <!DOCTYPE html> <head> <meta charset="utf-8" /> <meta name="viewport" content="initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no&qu
分享35个讨人喜欢的漂亮进度条UI设计
日期:2012-9-8 来源:GBin1.com 不管技术如何发展,漂亮的用户界面设计永远会更加让用户着迷,相信大家还记得我们曾将分享过的31个免费的进度条和加载条PSD设计,在今天的用户界面设计分享中,我们将推荐给大家另外一套超棒的进度条ui设计,相信大家肯定会喜欢! Adobe Inspired Bar Chubby Loading Bar Colourful Progress Bars Dark Loading Bar Dark Progress Loaders Circular Pro
javascript-Github上一个模仿YouTube顶端进度条的jQuery实例,无法在本地部署。
问题描述 Github上一个模仿YouTube顶端进度条的jQuery实例,无法在本地部署. Demo地址:http://www.thepetedesign.com/demos/youtube_loadingbar_demo.htmlGithub源码:https://github.com/peachananr/loading-bar 把他的源文件下载下来之后,按照说明上的用法,为什么没有效果? <html><head><script type=""text