admin 管理员组文章数量: 1086019
2024年3月7日发(作者:汇编jnl)
文章编号:1007—1423(2014)04—0066—05 DOI:10.3969 ̄.issn.1007—1423.2014.04.016 基于Comet属性同步的Java Web实时进度条研究 陈冈 (武汉纺织大学管理学院,武汉430073) 摘要: 在长时间的任务处理中,进度条常用来向用户提示任务处理进程。研究一种结合Comet和Java的反射技术,通过属 性同步的方式,实现Java Web实时进度条的处理方案。该方案的优势在于纯Java实现、代码简单、无需安装浏览器插 件.具有较好的应用效果 关键词: Comet;Java Web;属性;进度条;反射 0 引言 对于需要长时间处理的任务.常常使用进度条来 向用户指示任务处理进程,以获得直观、清晰、友好的 界面效果 对于基于C/S模式的应用系统.大多数IDE 平台都提供了进度条组件,实现起来非常容易 但是, 对于基于B/S模式的Java Web应用系统来说,基于浏 览器和模式本身的特征:服务器需要实时地将更新的 任务进度信息传送到客户端.作为客户端的浏览器则 需要实时解析服务器返回的信息并显示为任务进度百 分比。因此,要实现Java Web应用系统的进度条就比 较闲难.特别是纯Java代码方式 对于类似于进度条的这类需要服务器端客户端实 时交互信息的应用.目前比较多的处理方案是采用A. JAX或者Flash技术 但是.这两种技术方法.或者代码 过于复杂.或者需要安装插件.并不是较为理想的处理 绍一下隐蒇帧方式 隐蒇帧是一种使用HTML内联标 签IFRAME的动态Web技术 通过在HTML页面里嵌 人一个隐蒇帧IFRAME.并将其SRC属性设置为一个 长连接的请求页面.服务器端就可以源源不断地往客 户端“推”送数据 目前已经出现了许多基于Comet应 用的各种开源框架和产品HI.例如著名的Google的 htmlifle的ActiveX组件 基于隐藏帧的流处理方式.其困难在于无法跟踪 请求调用过程的状态.这导致客户端进度条无法同步 服务器端的任务处理进度 本文采用隐蒇帧的流处理 方式来实现Java Web实时进度条.并巧妙解决了属性 同步问题 1 技术原理 对于进度条来说.最关键的是客户端、服务器端需 要实时交换当前处理的任务进度信息 结合Comet和 Java的反射技术,可以较好的解决这个问题 一方面. 采用隐蒇帧的流处理方式.将当前任务进度内置为属 性值.以便服务器端能够向客户端实时“推”送该属性 值 另一方面,通过反射,服务器端实时改变该属性值, 并由客户端实时获取 该解决方案的优势如下: (1)页面无刷新。实现了与采用AJAX或Flash技 技术 由于这些原因.“服务器推”技术Comet受到越来 越多的关注 Comet是一种基于HTTP长连接、允许服务器向浏 览器推送数据的Web应用模式Il_ C0met主要有两种模 式:基于AJAX的长轮询(AJAX with long polling)方 式、流(Streaming)方式。其中,流方式包括隐蒇帧(Hid— den iframe)方式和XMLHttpRequest方式 这里着重介 术同等效果 ⑥ 现代计算机2014.02上
开发案 / (2)代码简单。相对于AJAX或者Flash,代码量 少、处理简单 (3)客户端进度条与服务器端数据处理实时同步。 (4)能够自适应确定或不确定任务数的处理 当待 处理任务数难以确定时,显示:无百分比的处理文本提 示:而当待处理任务数确定时.则显示:百分比形式的 状态进度指示 (5)纯Java实现,无需安装浏览器插件。 (6)界面美观,任务提示效果显著。 该解决方案的处理架构.如图l所示 图1方案基本原理 客户端由隐蒇帧IFRAME以及由HTML标签 TABLE构造的进度组成.并包含构成进度条要素的三 个属性组成:当前处理的任务(例如图2中的“383”)、 待处理总数(例如图2中的“610”)、进度提示信息(例 如图2中的“正在随机抽卷.请稍候。。。”)。 服务器端首先获取任务总数.并通过Java的反射 机制.获取负责生成客户端进度条画面的对象,然后循 环处理任务 在循环体内部.除了处理当前第i个任务 外.通过反射改变进度条属性值.以便客户端进度条能 够同步该属性值 这样一来,客户端进度条就能精确反 映服务器端的任务处理进度 值得指出的是:每次数据 传送并不会关闭连接,连接只会在出现通信错误或者 重建连接(例如刷新页面)时关闭。 2 方案的具体实现 本方案以JDK6、Tomcat7、IE6作为研究环境,以 MVC模式翻实现。关键实现过程为: (1)JSP页面部分代码 该页面用于客户端显示进度条画面 代码中的链 接仅用于测试说明目的。页面关键代码如下: <scirpt type=”text/javascript”> function openInworkingDialog(){ window.showModelessDialog(”showProgressDialog”, window, ’’dialogWidth -430px;- dilaogHeight:143px;center:1;status:0;scrolh0”); } </script> <a href=”psample”onclick=”openInworkingDialog()”>进 度条测试</a> 这里1 ̄psample是一个演示任务处理的Servlet. openInw0rkingDialog()函数用来打开客户端进度条画 面。其中,sh0wPr0gressDial0g是一个构造基于隐蒇帧的 流处理方式的Servlet程序,showM0delessDialog()函数 用于创建一个显示进度条画面的模态对话框。 (2)Servlet程序showProgressDialog部分代码 该Servlet程序由JSP页面的openInworkingDialog ()函数调用,代码如下: @WebServlet(”/showProgressDialog”) public class ShowProgressMonitor extends HttpServlet{ private static final long serialVersionUID=1L; protected void service(HttpServletRequest request, HttpServletResponse response)throws Servle— tException,IOException{ response.setContentType(‘‘text/html;eharset=UTF一 8”); ServletOutputStream out:response.getOutputStream (); out.write(”<title> ̄@t¥q ̄</title>",.getBytes()); out.write <body topmargin=0 style=‘font—size:1lpt’ >”.getBytes()); out.write(”<iframe vspace=0 width=100%height= 142px align=center scrolling=no frameborder=0 sre=\”progress— Monitor\”></iframe>"..getBytes()); out.write(”</body>".getBytes()); out.lfush(); out.close(); } } 现代计算机 2014.o2上@
\ 开发案伪 \\ \\———————————————————————————————————————————————————————一———— 隐蒇帧的SRC属性页面为Servlet文件progress— retum instance; Mo”ift,or.用于构建相关进度属性以及具体的进度条页 面。 } …//其他属性的setter方法 (3)隐葳帧源属性程序 该S£',rvh t程序用于构建Comet隐藏帧IFRAME的 SRC属性页面.部分关键代码如下: @WebServlet(”/progressMonitor'’) } (4)任务处理Servlet的部分关键代码 该Servl t程序就是实际中服务器端的业务逻辑处 理程序。在该程序中,主要执行的操作是:初始化进度 public class PmgressMonitor extends nttpServlct{ 条、循环处理具体任务、反射改变属性值。部分关键代 private static final long serialVersionUID=1 L; private staitc ProgressMonitor instance;//进度条对象 private Integer curnum=0;//当前处理的任务 private Integer totalnum=1;//待处理总数 private Stirng progresstip: ’;//进度提示信息 )Override public void init()throws ServletException{ super.init(); instance=this; } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response)throws Servle— tException,IOException{ uploadProgressMonitor(request,response); } public void uploadProgressMonitor(HttpServletRequest re— quest, HttpServletResponse response)throws IOEx.- eeption{ StringBuffer progressbar=new StringBuffer(); progressbaL.append f”<meta http一-equiv=‘refresh’ content=‘O.3;URL=wogressMonitor’>”): progressbar.append(”<table border=0 width=‘100%’ height=‘100%’>” : …//进度条具体画面.使用TABLE标签来构造 progressbar.append(”</table>”); ServletOutputStream out=response.getOutputStream (); out.write(progressbar.toString().getBytes()); out..lfush(); out.close(); } public staitc ProgressMonitor getInstance(){ ⑥ 现代计算机2014.02上 码如下: @WebServlet(”,psa ple”) public class ProgressSample extends HttpServlet{ private static final long serialVersionUID=1 L; Object progressMonitor=null; Method setProgresstip=nul1.sctCurnum:nul1.setTotal— nun=null; protected void doGet(HttpServletRequest request, HttpServletResponse response)throws Servle— tExeeption,IOException{ try{ Thread.sleep(100); progressMonitor=getReflectObject f Progress— MonitOLClass)://获得进度对象 if(progressMonitor!:nul1){ setProgresstip progressMonitor.getClass ().getDeclaredMethod( ”setProgresstip”,Stirng.class); setProgresstip.invoke(progressMonitor, ”正在随机抽卷,请稍候…”); setCurnum progressMonitor.getClass(). getDeclaredMethod( ”setCurnum”,Integer.class); setTotalnum progressMonitor.getClass ().getDeclaredMethod( ”setTotalnum”,Integer.class); int totalnum=610: setTotalnum.invoke(progressMonitor,to-- for(int i=0;i<totalnum;){ …//处理具体的任务 setCurnum.invoke(progressMonitoc, ++i)://改变进度属性
开发案椤lj ———————————————————————————————————————.——/ / / } progressMonitor=null; 览器。本文所研究的进度条解决方案。在多个实际 Java Web系统中得到应用,效果良好,受到用户好评。 }catch(Exception e){e.printStackTrace();} } 缸 rF艘璐 常聪 nvoke()方法通过反射设置进 整 I∞4l 8。鞠 hk pap do?t mtos&;=42i∞ , 其中,setProgresstip.i度条对象的属性,getReflectObject()方法用于反射获取 蘸雏攀畿囊律 羲:Il;l鼬嘴辅|玮嘲 糍鞴曲 l浏龉~I 指定类的实例对象。限于篇幅.代码略去。图2为某个 罐誉糍撼节 糍摇娆露l申 +霹婀黼 群 嚣= 现实应用场景中解决方案实现的任务进度条指示效 l l嚣 当前;383【艟%】 息数:610 果。该进度条界面友好,实时同步数据。 ‘2】着刺蝴 垒 B 壹义缫别_÷j 正在随机抽毪,请稍候… 3 结语 【 本文所研究方案解决了Comet无法跟踪请求调用 过程状态的问题 该方案可作进一步处理.例如用DIV 图2实时进度条效果 代替模态对话框来显示进度条.以适应更多种类的浏 参考文献: [1]Wikipedia.Comet[EB/O L1.http://en.wikipedia.org/wiki/Comet_(programming),2013—1 1-l1 『21周婷.Comet:基于H ITrP长连接的“服务器推”技术[EB/OL].http://www.ibm.com/developerworks/cn/web/wa—lo—comet/#resources, 2007-08—3 l 【3】林胜利,王坤茹,盂海利.Java优化编程【M】.电子工业出版社,2005.5 【4】戚永军,翟智平,耿娟平.基于Comet的Web即时通讯系统设计与实现fJJ.计算机科学,2012(¥2) [5】丁振凡.基于Spring MVC的网络存储系统[J].计算机系统应用,2013(02) 『61葛中泽.基于Comet的目标参数实时在线检测技术研究『JI.制造业自动化,2013(2) [7]张语涵,刘淑华,周永鑫.Java Web应用中错误和异常处理方法研究【J]现代计算机(专业版),2013(23). 『81司飙.MVC模式下的考试系统建模研究fJ1.计算机科学,2013(S1) 『91张原,张昭,刘蕊.基于MVC设计模式的虚拟实验平台模块化设计『J1.计算机工程与科学,2013(08) 『101刘淑华.J2EE项目中一种新的错误处理方法lJ1.计算机应用与软件,2013(07) fl11葛中泽.基于Comet的目标参数实时在线检测技术研究fJ1.制造业自动化,2013(02) 『l21蔡骥然,曹海传.B/S架构下基于OPC与Comet技术的实时监控系统[J].计算机应用,2012(S2) 【l3】左伟,冯金富,许凌权.基于COMET的武器控制系统建模【JJ.计算机工程,2010(10) 作者简介: 陈冈(1970一),男(汉族),湖北英山人,副教授,研究方向为信息管理与信息系统、电子商务 收稿日期:2013—12—05 修稿日期:2014—01—05 现代计算机 2014.02上⑨
\ 开发案例 \\\ \—————— Research on Java Web Real Time Progress Bar Based on Comet Attribute SynChrOnizatiOn CHEN Gang (School of Management,Wuhan Textile University,Wuhan 4370073) Abstract: In the long time task processing,the progress bar is used to prompt users about the task handling process.Studies a kind of method which implements a real—.time progress bar based on Java Web with the combination of Comet and Java reflection technology by using the at— tribute synchronous way.The advantage of this method is the pure Java implementation,the simple code,no need to install the browser plug-in.This method has a good application effect. Keywords: Comet;Java Web;Attribute;Progress Bar;Reflection (上接第65页) Research on the Big Data Push Platform Based on Android System ZHU Kui,WANG Wei—yang (College of Information Engineering,Shanghai Maritime University,Shanghai 201306) Abstract: The rise of mobile Intcrnet and social networks make the big data into the new journey,in the age of big data,how to timely and effec— tively access to information has become a problem for the mobile Internet users.In view of the influence of big data of mobile Intemet users,proposes a push platform based on Android system,push platform establishes a connection between data and user,through high— quality data analysis and timely delivery to the user,analyses the push send platform realization principle,analyzes and its applications. Keywords: Android;Push Platform;Big Data 现代计算机2014.02上
版权声明:本文标题:基于Comet属性同步的Java Web实时进度条研究 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1709799473a546753.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论