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

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

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

_getWebRoot: function() {
		/** Return directory of this relative to document URL. */
		if (PL.webRoot != null) {
			return PL.webRoot;
		}
		//derive the baseDir value by looking for the script tag that loaded this file
		var head = document.getElementsByTagName('head')[0];
		var nodes = head.childNodes;
		for (var i = 0; i < nodes.length; ++i) {
			var src = nodes.item(i).src;
			if (src) {
				var index = src.indexOf("ajax-pushlet-client.js");
				if (index >= 0) {
					index = src.indexOf("js");
					PL.webRoot = src.substring(0, index);
					break;
				}
			}
		}
		return PL.webRoot;
	}
注意标红的一句 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

     

<%
String path = request.getContextPath();
%>
<form action="<%=path%>/TestPushlet">
	<input type="submit" value ="submit"/>
</form>
    receive.jsp//利用这个页面接收servlet推送过来的数据

<script type="text/javascript" src="<%=path %>/js/ajax-pushlet-client.js"></script>
<div id="display">随机数在这里显示</div>
<script>
PL._init();
PL.joinListen('/test/myevent1');//与发送字段一致
function onData(event)
{
	var data=event.get("key1");
	document.getElementById("display").innerHTML=data;
} 
</script>

 

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


import java.io.IOException;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import nl.justobjects.pushlet.core.Dispatcher;
import nl.justobjects.pushlet.core.Event;

public class TestPushlet extends HttpServlet
{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public TestPushlet()
	{
		super();
	}

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		while (true)
		{
			Event event = Event.createDataEvent("/test/myevent1");//发送字段
			Random random = new Random();
			event.setField("key1", String.valueOf(random.nextInt(100)));
			Dispatcher.getInstance().multicast(event);
			try
			{
				Thread.sleep(3000);
			}
			catch (InterruptedException e)
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

应该是可以了。有问题可以留言

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值