1、基础概念:Pushlet是一种comet实现:在Servlet机制下,数据从server端的Java对象直接推送(push)到(动态)HTML页面,而无需任何Java applet或者插件的帮助。
2、什么事comet请参照
http://www.ibm.com/developerworks/cn/web/wa-lo-comet/
3、不多说了直接贴一个最简单的例子,
1)将pushlet.jar包导入自己的项目;
2)将pushlet.properties、sources.properties导入到src目录下
3)修改web.xml文件如下(url-pattern暂时设置为/pushlet.srv)
pushlet nl.justobjects.pushlet.servlet.Pushlet 1 pushlet /pushlet.srv
4)编写一个java类如下
import java.io.UnsupportedEncodingException; import nl.justobjects.pushlet.core.Event; import nl.justobjects.pushlet.core.EventPullSource; public class HelloWorldPlushlet implements Serializable { private static final long serialVersionUID = 1L; static public class HelloWorldEvent extends EventPullSource { @Override protected long getSleepTime() { return 1000; // 刷新时间 } @Override protected Event pullEvent() { Event event = Event.createDataEvent("/source/event");// 事件标识 String s = "你好"; s = toISO88591(s); event.setField("msg", s);// 封装参数 return null; } } public static String toISO88591(String str) { try { str = new String(str.getBytes("UTF-8"), "ISO-8859-1"); } catch (UnsupportedEncodingException ex) { ex.printStackTrace(); } return str; } }
上面有一个中文的处理方法,toISO88591()不然不支持中文。
还有就是注意Event event = Event.createDataEvent("/source/event");// 事件标识
5)编写jsp文件如下<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>index.html test
PL.joinListen('/source/event');//事件标识 在数据源中引用,注意跟上面的红色部分保持一致。
6)下面说一下web.xml中
/** 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("lib/ajax-pushlet-client.js"); if (index >= 0) { PL.webRoot = src.substring(0, index); break; } } } return PL.webRoot; },
注意var index = src.indexOf("lib/ajax-pushlet-client.js");这句话 这个方法就是取webRoot跟路径的,所以
7)最后启动程序,大家就可以看到每一秒弹出一个“你好”窗口了。