使用DWR反转实现信息推送

除了利用Pushlet实现信息推送外,DWR反转同样可以实现推送。

DWR的简单配置方法已经在以前的博客中写过。所以这里直接贴代码

新建web工程,这里命名为DwrEg,包结构如下:

web.xml代码如下:

Xml代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <web-appversion="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7. servletservlet-name>dwr-invoke</servlet-class>uk.ltd.getahead.dwr.DWRServletinit-paramparam-name>debugparam-value>true>activeReverseAjaxEnabled <!--
  8. >classes>java.lang.Object>--
  9. servlet-mappingurl-pattern>/dwr/*welcome-file-listwelcome-file>client.htmlweb-app>

dwr.xml代码如下:

<!DOCTYPEdwrPUBLIC"-//GetAheadLimited//DTDDirectWebRemoting2.0//EN""http://getahead.org/dwr//dwr20.dtd"dwrallowcreatejavascript="myrevsrse"creator="new"paramname="class"value="com.src.MyReverse"/>
  • create>
  • MyReverse.java代码如下:

    Java代码
      packagecom.src;
    1. importjava.util.Collection;
    2. importorg.directwebremoting.ScriptBuffer;
    3. importorg.directwebremoting.ScriptSession;
    4. importorg.directwebremoting.ServerContext;
    5. importorg.directwebremoting.ServerContextFactory;
    6. importorg.directwebremoting.WebContext;
    7. importorg.directwebremoting.WebContextFactory;
    8. importorg.directwebremoting.proxy.dwr.Util;
    9. publicclassMyReverse{
    10. voidsendMes(Stringmes){
    11. System.out.println("kaoshisibestllll...");
    12. send("系统消息:"+mes);
    13. }
    14. voidsend(finalStringoutput){
    15. org.directwebremoting.WebContextweb=WebContextFactory.get();
    16. Stringpage=web.getServletContext().getcontextpath()+"/client.html";
    17. Collectionsessions=web.getScriptSessionsByPage(page);
    18. System.out.println("size=="+sessions.size());
    19. UtilutilAll=newUtil(sessions);
    20. utilAll.addFunctionCall("callBack",output);//callBack是client.jsp里面的javascript函数,output是传递过去的参数
    21. //utilAll.setValue("news_id",output,false);
    22. //这种方法也可以,直接将client.html里id为news_id的textarea的值设置为output的值
    23. voidnoticeNewOrder(intid){
    24. WebContextwctx=WebContextFactory.get();
    25. ScriptBufferscript=newScriptBuffer();
    26. script.appendScript("receiveMessages(")
    27. .appendData(id)
    28. .appendScript(");");
    29. ServerContextsctx=ServerContextFactory.get(wctx.getServletContext());
    30. Collection<ScriptSession>pages=sctx.getScriptSessionsByPage("/DwrEg/client.html");
    31. for(ScriptSessionsession:pages){
    32. session.addScript(script);
    33. }

    client.HTML代码如下:

    推送界面dopush.html的代码如下:

    scripttype="text/javascript"src="dwr/interface/myrevsrse.js"Metahttp-equiv="Content-Type"content="text/html;charset=utf-8"title>Inserttitlehere functionsendnews(){
  • varnew_content=dwr.util.getValue("newcontent");
  • myrevsrse.sendMes(new_content);
  • functionsendinfo(){
  • myrevsrse.noticeNewOrder(12);
  • inputtype="text"name="newcontent"inputtype="button"value="发消息"onclick="sendnews()"inputtype="button"value="send2"onclick="sendinfo()">
  • 同样,这里的问题也是怎么实现点对点的信息推送,这儿只是实现了向所有的clent.html页面推送信息,以后接着总结。。。。

    相关文章

    IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
    PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
    使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
    Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
    本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
    Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...