最近一个项目有个需求,需要实时的在页面上显示数据,想在服务端直接推送到页面上,上网查了一下,查到了这个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();
}
}
}
}
应该是可以了。有问题可以留言