原文:http://www.52php.cn/article/p-agnurwdi-pp.html
DWR高级主题之反向Ajax(DWR3的轮询模式演示1)
----------
web.xml
- <?xmlversion="1.0"encoding="UTF-8"?>
- <web-appxmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
- version="2.4">
-
- display-name>firstDWR</welcome-file-listwelcome-file>index.html>
-
- servlet>DWRServletservlet-name>dwr-invokerservlet-class>org.directwebremoting.servlet.DwrServlet
- init-paramparam-name>debugparam-value>true<!--跨域调用配置信息,不是必须的-->
- >crossDomainSessionSecurity>false<!--下面是轮询模式的反向Ajax所需要的参数-->
- >activeReverseAjaxEnabled>org.directwebremoting.extend.ServerLoadMonitor>org.directwebremoting.impl.PollingServerLoadMonitor<!--设置轮询的频率为6秒-->
- >disconnectedTime>6000servlet-mappingurl-pattern>/dwr/*
- web-app>
dwr.xml
<!DOCTYPEdwrPUBLIC
- "-//GetAheadLimited//DTDDirectWebRemoting3.0//EN""http://getahead.org/dwr/dwr30.dtd"dwrallowcreatecreator="new"javascript="MathDelegate"paramname="class"value="app.MathDelegate"/>
- create>
java文件
packageapp;
- importorg.directwebremoting.Browser;
- importorg.directwebremoting.ScriptSessions;
- publicclassMathDelegate{
- privatestaticintnum=1;
-
-
- *
- *@paramuserid
- *@paramrequest
- *@return
- */
- voiddwrHandle(){
- Browser.withAllSessions(newRunnable(){
- voidrun(){
- try{
- Thread.sleep(1000);
- }catch(InterruptedExceptione){
- e.printStackTrace();
- }
- //funA为页面上一个js函数,num++为funA的参数
- ScriptSessions.addFunctionCall("funA",num++);
- }
- });
- voidhandle()throwsInterruptedException{
- intm=0;
- while(m++<10){
- 3000);
- dwrHandle();
- }
index.html
htmlheadmetahttp-equiv="Content-Type"content="text/html;charset=UTF-8"title>firstdwrscripttype="text/javascript"src="dwr/engine.js">script<!--注意:反向Ajax中,util.js是必须包含的-->
- scripttype="text/javascript"src="dwr/util.js"scripttype="text/javascript"src="dwr/interface/MathDelegate.js"<!--轮询模式与comet模式的反向Ajax所需要的配置-->
- dwr.engine.setActiveReverseAjax(true);
- <!--
- //重点关于解决页面每刷新一次会多创建一个新的ScriptSession的解决方法
- //由于ScriptSession的创建机制不同于HttpSession,它会在每次页面刷新的时候都会重新创建,而销毁机制却是失去连接
- //或者失效之后一定时间才会自动销毁,这样就可能造成服务端可能就保存了很多的无用的ScriptSession,所以不仅仅会影响
- //性能问题,更重要的是,可能就不能实现你想要的功能。
- //解决方法是在接收消息的页面,也就是你调用dwr.engine.setActiveReverseAjax(true);的页面调用一个dwr的方法。
- //dwr.engine.setNotifyServerOnPageUnload(true);
- //这个方法的功能就是在销毁或刷新页面时销毁当前ScriptSession,这样就保证了服务端获取的ScriptSession集合中没有
- //无效的ScriptSession对象。
- -- dwr.engine.setNotifyServerOnPageUnload(true);
- functionstart(){
- MathDelegate.handle();
- functionfunA(num){
- document.getElementById("resultDiv").innerHTML="<h1>"+num+"h1>";
- bodyhr/>
- DWR演示:brspanid="resultDiv"spaninputtype="button"value="start"onclick="start();">
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|