在网页中实现页面无刷新的进度条显示不是一件很麻烦的事情,但如果这个进度条要能准确反映当前事务或者复杂逻辑的执行进度,那么却并不是一件容易的事情,目前AJAX技术流行,所以本文作者试想通过AJAX来实现网页准确进度条,以銄读者。
首先应该想一个问题,复杂事务或者事务逻辑如果不按线程方式运行,运行在JAVA运行中根本无法跳过复杂事务去处理进度显示,所以我们这边很自然的想到复杂事务或者业务逻辑用多线程实现。
再想另一个问题,事务处理应该需要网页上的一系列参数信息的,那么如何获取这些参数呢,这个似乎容易想到,传一个HttpServletRequest过去就可以了。
为了进度条公用,所有的复杂事务处理都应该实现同一个接口或者抽象类,我这里用了一个接口,如下:
public interface IprogressBar {
  public void execute(HttpServletRequest req,String pbid);//执行复杂事务
}
用一个实现多线程的抽象类,如下:
public abstract class AbstractProgressBar extends TimerTask implements IprogressBar {
private HttpServletRequest request;
private String pbid;
public AbstractProgressBar(){
}
//子类必须重载这个函数
public abstract void execute(HttpServletRequest req, String pbid);
public void run() {
execute(request,pbid);
}
public void setRequest(HttpServletRequest req){
this.request=req;
}
public void setPbid(String pbid){
this.pbid=pbid;
}
}
设计到具体项目不便给出代码,这里我另外写了一个测试类,也就是执行复杂事务处理的类,如下:
public class TestPB extends AbstractProgressBar{
public void execute(HttpServletRequest req, String pbid) {
String sql="insert into temp_table(idx)values(?)";
int pid=Integer.parseInt(pbid);
ProgressBar pb=new ProgressBar(pid,300,0,1);
//模拟大事务
for(int i=0;i<300;i++){
DbUtils.executeUpdate(sql,new Object[]{new Integer(i)});
//控制进度
pb.stepIt();
}
}
}
接着利用AJAX技术来实现网页的无刷新进度条实现,代码如下:
<%@ page contentType="text/html;charset=UTF-8"%>
<html>
<head>
<title>无刷新页面进度条测试</title>
<STYLE TYPE="text/css">
<!--
BODY {OVERFLOW:scroll;OVERFLOW-X:hidden}
.DEK {POSITION:absolute;VISIBILITY:hidden;Z-INDEX:200;}
//-->
</STYLE>
<script type="text/javascript">
var xmlHttp;
var pbid;//进度条ID
function createXMLHttpRequest(){
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
function checkDiv() {
var progress_bar = document.getElementById("progressBar");
if (progress_bar.style.visibility != "visible") {
progress_bar.style.visibility = "visible";
}else
{
progress_bar.style.visibility = "hidden";
}
}
function go() {
createXMLHttpRequest();
checkDiv();
var url = "../servlet/ProgressBarServlet?task=create&impcls=blogcn.pb.imp.TestPB";//其中blogcn.pb.imp.TestPB是复杂事务的实现类
var button = document.getElementById("go");
button.disabled = true;
xmlHttp.open("GET", url, true);
xmlHttp.setRequestHeader("Content-Type", "text/xml;charset=gb2312");
xmlHttp.onreadystatechange = goCallback;
xmlHttp.send(null);
}
function goCallback(){
if (xmlHttp.readyState==4)
{
if (xmlHttp.status==200) {
pbid=xmlHttp.responseXML.getElementsByTagName("pbid")[0].firstChild.data;
setTimeout("pollServer()", 2000);
}
}
}
function pollServer() {
createXMLHttpRequest();
var url = "../servlet/ProgressBarServlet?task=poll&pbid="+pbid;
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = pollCallback;
xmlHttp.send(null);
}
function pollCallback(){
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
var percent_complete =
xmlHttp.responseXML
.getElementsByTagName("percent")[0].firstChild.data;
if (percent_complete < 100) {
    PB1.pos=percent_complete;
        PB1.Update();  
setTimeout("pollServer()", 2000);
} else {
    PB1.pos=100;
        PB1.Update();
document.getElementById("go").disabled = false;
}
}
}
}
</script>
</head>
<body>
          <input type="button" value="执行大事务" id="go" οnclick="go();"/>
    <DIV id="progressBar">
       <script language="javascript">
     var PB1=new TProgressBar("myPB1",220,180,375,20);
     PB1.Create();
     PirateCount=100;
     PID=PirateCount-2;
     PB1.Reposition();
     PB1.max=PID;
    </script>
</body>
</html>
 
 
整个页面将不会有任何刷新。

转载于:https://www.cnblogs.com/yintian2/archive/2007/06/09/777280.html

利用AJAX技术实现网页无刷新进度条显示相关推荐

  1. Asp.Net 上传大文件专题(4)--利用ajax技术显示上传进度

    ====================================================== 注:本文源代码点此下载 ================================= ...

  2. html5拖拽图片批量ajax无刷新进度上传

    1.前端拖拽图片 之前有篇文章说到HTML5的拖拽(drag.drop,详见:/post/jquery-plugin-1-jquery-drag-and-html5-draggable-api-and ...

  3. ajax技术怎么应用程序,利用AJAX技术开发应用程序.pdf

    维普资讯 2008年6月 电 脑 学 习 第3期 利用AJAX技术开发应用程序 蔡燕敏' 摘 要:介绍了AJAx技术的概念.工作原理及使用AJAX技术的基本原则.讨论了AJAx技术在应用程序的开发过 ...

  4. zan php demo,ajax+php+mysql实现无刷新点赞功能

    从动态图看出来,点击赞的按钮的时候,旁边的赞数量在无刷新地增加.打开数据库也能看到赞数量更新了. 原理就是通过ajax异步提交数据给数据库. 首先前端页面就是一个按钮和赞数量. 数据库名,test,表 ...

  5. html实现在线搜歌,利用Ajax技术实现在线歌词搜索功能

    最新制作完成的在线歌词搜索功能,利用ajax技术,无刷新显示歌词,只需要输入你要查找的歌曲名或歌词.界面还不是很好看,完善中...... 1 2 3 4 5 无标题文档 6 7 8 9 10 22 2 ...

  6. Ajax弹出式无刷新城市选择特效

    为什么80%的码农都做不了架构师?>>>    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// ...

  7. php无刷新实现页面更新,使用laravel和ajax实现整个页面无刷新的操作方法

    1.数据库文件 CREATE TABLE IF NOT EXISTS mr_key ( id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT ' ...

  8. 利用curl下载文件(进度条显示) 代码片段

    在项目中需要用到程序更新的功能,同事介绍说是curl中的开发库很不错,于是下载这个包测试了一下,确实不错.准备正式用到项目中,以下一个例子用于从互联网上抓取一个文件下载到本地,并加上进度条显示,做得挺 ...

  9. jquery PHP大文件上传,Jquery和BigFileUpload实现大文件上传及进度条显示

    实现方法:用到了高山来客 的bigfileupload组件,用高山来客的方法,弹出一个模式窗口,然后不停刷新获取进度,始终觉得体验感不好,于是想到用jquery来实现无刷新进度显示,因为提交页面后, ...

  10. 多线程对比:通过创建线程的方式来同步MFC进度条显示

    一.功能说明 目的:当主线程需要处理大量数据导致耗费时间很长时,主线程界面的进度条会卡顿不刷新,无法实时保持进度,因此需要将进度条显示与数据处理分开,将数据处理过程放在新建的线程中,主界面主要用来显示 ...

最新文章

  1. iOS 自动布局框架 – Masonry 详解
  2. 博士毕业去哪了?光鲜亮丽的高校教师工资了解下!
  3. VS2005下如何新建一个WINCE设备的DLL工程
  4. 3层,5层,7层,9层网络性能比较-0-2
  5. 蓝桥杯 日志统计 尺取
  6. oracle用户密码复杂度查询,11gR2 Database用户密码复杂度验证
  7. nginx之worker进程个数
  8. 带UpdatePanel页面返回js问题
  9. python装饰器详解-python装饰器使用实例详解
  10. linux 编译程序的四个过程
  11. 大学本科计算机考试小抄,大学考试竟允许光明正大打小抄你也考不过
  12. javaweb图片加载不出来问题的解决方法
  13. C# 中的委托和事件[转自张子扬]
  14. ue4白天夜晚切换_白天/夜晚编码的美好时光...多年来最佳
  15. 思维导图ubuntu_XMind for Linux - 思维导图 | linux软件
  16. ResetTemplate封装
  17. OPENWRT系统学习系列之一(系统源码到编译固件和烧录固件)
  18. CGB2105-Day03
  19. 计算机怎样升win10,如何升级Win10 Win7升级到Win10图文教程
  20. 最全Pycharm教程(13)——Pycharm部署

热门文章

  1. java 性能优化分析工具_【java】JVM性能调优监控工具、可视化在线内存分析工具...
  2. 自动驾驶1-7: 进入自动驾驶汽车行业的建议Advice for Breaking into the Self-Driving Cars Industry
  3. 计算机打印指定测试页到文件夹中,上海计算机等级一级考试复习指导.pptx
  4. 引用的基本概念与用法
  5. react轮播图插件_React 基础面试题 - 和你随便聊聊 React
  6. 【机器学习系列】隐马尔科夫模型第一讲:通俗易懂概述HMM
  7. 斯坦福公开课《机器学习》第五章SVM笔记
  8. Boyer-Moore算法
  9. android studio for android learning (二十六 )自定义控件理解与浅析(1)
  10. android studio for android learning (二十三 )Android Orientation Sensor(方向传感器)与指南针实战(新方法替代orientation)