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:

      
        pushlet  
        nl.justobjects.pushlet.servlet.Pushlet  
        1
   
   
      
        pushlet  
        /pushlet.srv  
   

     前台JSP:

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

     

<%
String path = request.getContextPath();
%>
    receive.jsp//利用这个页面接收servlet推送过来的数据


随机数在这里显示

 

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();
			}
		}
	}
}

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

你可能感兴趣的:(JAVA)