pushlet 服务器数据推送到客户端

最近一个项目有个需求,需要实时的在页面上显示数据,想在服务端直接推送到页面上,上网查了一下,查到了这个pushlet框架,资料特别少,大部分都是COPY且不能用,特整理出来(亲测)。

        首先列出所依赖文件(网上下载即可):pushlet.jar(导入你的工程)、ajax-pushlet-client.js(页面需引人的JS)、pushlet.properties(放到src下即可)、sources.properties(放到src下即可),最后这两个文件我都没有改动过。这里要注意一下ajax-pushlet-client.js这个文件 其中有这么一段代码

[javascript] view plain copy print ?
  1. _getWebRoot: function() {  
  2.         /** Return directory of this relative to document URL. */  
  3.         if (PL.webRoot != null) {  
  4.             return PL.webRoot;  
  5.         }  
  6.         //derive the baseDir value by looking for the script tag that loaded this file  
  7.         var head = document.getElementsByTagName('head')[0];  
  8.         var nodes = head.childNodes;  
  9.         for (var i = 0; i < nodes.length; ++i) {  
  10.             var src = nodes.item(i).src;  
  11.             if (src) {  
  12.                 var index = src.indexOf("ajax-pushlet-client.js");  
  13.                 if (index >= 0) {  
  14.                     <span style="color:#FF0000;">index = src.indexOf("js");</span>  
  15.                     PL.webRoot = src.substring(0, index);  
  16.                     break;  
  17.                 }  
  18.             }  
  19.         }  
  20.         return PL.webRoot;  
  21.     }  
注意标红的一句 index=src.indexOf("js");由于我的ajax-pushlet-client.js的文件所在目录是/js/ajax-pushlet-client.js,   这里要改成你ajax-pushlet-client.js的目录,比如你的文件放在/lib/ajax-pushlet-client.js   那么就改成 index=src.indexOf("lib");

        配置pushlet的servlet

        web.xml:

       <servlet>
        <servlet-name>pushlet</servlet-name>  
        <servlet-class>nl.justobjects.pushlet.servlet.Pushlet</servlet-class>  
        <load-on-startup>1</load-on-startup>
    </servlet>   
    <servlet-mapping>  
        <servlet-name>pushlet</servlet-name>  
        <url-pattern>/pushlet.srv</url-pattern>  
    </servlet-mapping>

     前台JSP:

     send.jsp  //就是利用这个页面触发后台一个servlet

     

  1. <%  
  2. String path = request.getContextPath();  
  3. %>  
  4. <form action="<%=path%>/TestPushlet">  
  5.     <input type="submit" value ="submit"/>  
  6. </form>  
    receive.jsp//利用这个页面接收servlet推送过来的数据
  1. <script type="text/javascript" src="<%=path %>/js/ajax-pushlet-client.js"></script>  
  2. <div id="display">随机数在这里显示</div>  
  3. <script>  
  4. PL._init();  
  5. PL.joinListen('/test/myevent1');//与发送字段一致  
  6. function onData(event)  
  7. {  
  8.     var data=event.get("key1");  
  9.     document.getElementById("display").innerHTML=data;  
  10. }   
  11. </script>  

 

TestPushlet 这个servlet 配置就不说了 代码如下:(其实就是每3秒发送一个随机数)

  1. import java.io.IOException;  
  2. import java.util.Random;  
  3.   
  4. import javax.servlet.ServletException;  
  5. import javax.servlet.http.HttpServlet;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8.   
  9. import nl.justobjects.pushlet.core.Dispatcher;  
  10. import nl.justobjects.pushlet.core.Event;  
  11.   
  12. public class TestPushlet extends HttpServlet  
  13. {  
  14.   
  15.     /** 
  16.      *  
  17.      */  
  18.     private static final long serialVersionUID = 1L;  
  19.   
  20.     public TestPushlet()  
  21.     {  
  22.         super();  
  23.     }  
  24.   
  25.     protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
  26.     {  
  27.         while (true)  
  28.         {  
  29.             Event event = Event.createDataEvent("/test/myevent1");//发送字段  
  30.             Random random = new Random();  
  31.             event.setField("key1", String.valueOf(random.nextInt(100)));  
  32.             Dispatcher.getInstance().multicast(event);  
  33.             try  
  34.             {  
  35.                 Thread.sleep(3000);  
  36.             }  
  37.             catch (InterruptedException e)  
  38.             {  
  39.                 // TODO Auto-generated catch block  
  40.                 e.printStackTrace();  
  41.             }  
  42.         }  
  43.     }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值