DWR由服务器端向客户端推送消息
发布时间:2020-12-16 01:44:20 所属栏目:百科 来源:网络整理
导读:实现步骤: 第一、在项目中引入 dwr.jar ,然后在 web.xml 中进行配置,配置如下: servletservlet-namedwr-invoker/servlet-nameservlet-classorg.directwebremoting.servlet.DwrServlet/servlet-classinit-paramparam-namedebug/param-nameparam-valuetrue
实现步骤: 第一、在项目中引入dwr.jar,然后在web.xml中进行配置,配置如下: <servlet> <servlet-name>dwr-invoker</servlet-name> <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>true</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern> </servlet-mapping> 第二:和同级目增加dwr.xml,内容如下 <!DOCTYPEdwrPUBLIC "-//GetAheadLimited//DTDDirectWebRemoting3.0//EN" "http://getahead.org/dwr/dwr30.dtd"> <dwr> <alow> <createcreator="new"javascript="MessagePush"> <paramname="class"value="com.pcitc.lw.service.MessagePush"/> </create> <createcreator="new"javascript="TestPush"> <paramname="class"value="com.pcitc.lw.service.Test"/> </create> </alow> </dwr> dwr的基本配置指向具体实现类,MessagePush在页面的javascript中使用(被推送者),Test推送者 第三,被推送的页面 <%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%> <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"> <html> <head> <metahttp-equiv="cache-control"content="no-cache"> </head> <scripttype='text/javascript'src='dwr/engine.js'></script> <scripttype='text/javascript'src='dwr/util.js'></script> <scripttype="text/javascript"src="dwr/interface/MessagePush.js"></script> <scripttype="text/javascript"> functiononPageLoad(){ varuserId='${userinfo.id}'; MessagePush.onPageLoad(userId); } //推送信息 functionshowMessage(mgs){ alert(mgs); } </script> <bodyonload="onPageLoad();dwr.engine.setActiveReverseAjax(true);dwr.engine.setNotifyServerOnPageUnload(true);"> <divid="DemoDiv">helloworld</div> </body> </html> 注意:页面加载时加载的函数setActiveReverseAjax和setNotifyServerOnPageUnload是dwr的,onPageLoad是将登陆的用户和scriptSession进行绑定,为以后的推送做准备。 第四 MessagePush类: publicvoidonPageLoad(StringuserId){ ScriptSessionscriptSession=WebContextFactory.get().getScriptSession(); scriptSession.setAttribute(userId,userId); DwrSSessionUtilss=newDwrSSessionUtil(); try{ ss.init(); }catch(ServletExceptione){ e.printStackTrace(); } } 第五:DwrSSessionUtil : publicclassDwrSSessionUtilextendsDwrServlet{ publicvoidinit()throwsServletException{ Containercontainer=ServerContextFactory.get().getContainer(); ScriptSessionManagermanager=container.getBean(ScriptSessionManager.class); ScriptSessionListenerlistener=newScriptSessionListener(){ publicvoidsessionCreated(ScriptSessionEventev){ HttpSessionsession=WebContextFactory.get().getSession(); StringuserId=((User)session.getAttribute("userinfo")).getId()+""; System.out.println("aScriptSessioniscreated!"); ev.getSession().setAttribute("userId",userId); } publicvoidsessionDestroyed(ScriptSessionEventev){ System.out.println("aScriptSessionisdistroyed"); } }; manager.addScriptSessionListener(listener); } } 第五 JSP页面: <%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%> <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"> <html> <head> <metahttp-equiv="cache-control"content="no-cache"> <metahttp-equiv="expires"content="0" <scripttype="text/javascript"src="js/jquery-2.1.js"></script> <scripttype='text/javascript'src='dwr/engine.js'></script> <scripttype='text/javascript'src='dwr/util.js'></script> <scripttype='text/javascript'src='dwr/interface/TestPush.js'></script> <scripttype="text/javascript"> functiontest(){ varmsg=document.getElementById("msgId").value; TestPush.sendMessageAuto(msg,"收到没"); } </script> </head> <body> id:<inputtype="text"name="msgId"id="msgId"/><br/> <inputtype="button"value="你好"onclick="test()"/> </body> </html> 第六:推送代码: publicclassTest{ publicvoidsendMessageAuto(Stringuserid,Stringmessage){ finalStringuserId=userid; finalStringautoMessage=message; Browser.withAllSessionsFiltered(newScriptSessionFilter(){ publicbooleanmatch(ScriptSessionsession){ if(session.getAttribute("userId")==null){ returnfalse; }else{ return(session.getAttribute("userId")).equals(userId); } } },newRunnable(){ privateScriptBuffers=newScriptBuffer(); publicvoidrun(){ s.appendCall("showMessage",autoMessage); Collection<ScriptSession>sessions=Browser.getTargetSessions(); for(ScriptSessionscriptSession:sessions){ scriptSession.addScript(s); } } }); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c# – 如何在Linq to XML语句中循环
- c# – 如何让ASP.NET MVC为区域设置默认的Controller和Acti
- 一个C#游戏来统治它们(iOS,Android,WP7,W7,Mac OS X和XBOX)
- flash builder4使用外部SWC库
- ios – “无法在捆绑NSBundle中找到名为’MainStoryboard’
- ruby-on-rails – Rails 3.1.3使用anchor属性和link_to标签
- Ajax js 使用Ajax检测用户名是否存在
- 正则表达式子的使用
- 【cocos2dx-js 学习分享 七】游戏遮罩
- jsonObject和jsonArray解析json的方式