扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
首先应该想一个问题,复杂事务或者事务逻辑如果不按线程方式运行,运行在
再想另一个问题,事务处理应该需要网页上的一系列参数
为了进度条公用,所有的复杂事务处理都应该实现同一个接口或者抽象类,我这里用了一个接口,如下:
public interface IprogressBar {
public void execute(HttpServletRequest req,String pbid);//执行复杂事务 } |
用一个实现多线程的抽象类,如下:
public interface IprogressBar {
public void execute(HttpServletRequest req,String 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技术来实现网页的无刷新进度条实现,代码如下:
<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; } } } } <input type="button" value="执行大事务" id="go" onclick="go();"/> |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者