`
cuisuqiang
  • 浏览: 3935585 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
3feb66c0-2fb6-35ff-968a-5f5ec10ada43
Java研发技术指南
浏览量:3650243
社区版块
存档分类
最新评论

pushlet 之 Pushlet使用手把手实例

阅读更多

Pushlet(一种comet 架构的实现)是基于Servlet 机制,数据从server端的Java 对象直接推送(push)到客户端浏览器的(动态)HTML 页面,而无需任何Java applet 或者插件的帮助。

  • 在MyEclipse中创建工程。附件包含了从官方下载的Pushlet包已经本次的源码包,直接导入到开发工具即可。
  • 在创建的工程中增加pushlet.jar,log4j.jar。拷贝pushlet.properties,sources.properties到WEB-INF下。拷贝ajax-pushlet-client.js到WebRoot下。
  • 配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<!-- $Id: web.xml,v 1.7 2005/02/21 17:21:49 justb Exp $ -->
<web-app>
	<!-- Define the pushlet servlet -->
	<servlet>
		<servlet-name>pushlet</servlet-name>
		<servlet-class>nl.justobjects.pushlet.servlet.Pushlet</servlet-class>
		<load-on-startup>3</load-on-startup>
	</servlet>
	<!-- Define the Servlet Mappings. -->
	<!-- The pushlet -->
	<servlet-mapping>
		<servlet-name>pushlet</servlet-name>
		<url-pattern>/pushlet.srv</url-pattern>
	</servlet-mapping>
</web-app>
  • 后台代码HelloWorldPlushlet.java,该类包含一个内部类
package com;
import nl.justobjects.pushlet.core.Event;
import nl.justobjects.pushlet.core.EventPullSource;
public class HelloWorldPlushlet {	
	static public class HwPlushlet extends EventPullSource {
		// 休眠五秒
		@Override
		protected long getSleepTime() {
			return 5000;
		}
		@Override
		protected Event pullEvent() {
			Event event = Event.createDataEvent("/cuige/he");
			event.setField("mess", "hello,world!Plushlet!");
			return event;
		}
	}
}
  •  sources.properties清理其他,定义自己发布的内容

 

source1=com.HelloWorldPlushlet$HwPlushlet
  •  在JSP中调用
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<meta http-equiv="Pragma" content="no-cache" />
		<script type="text/javascript" src="ajax-pushlet-client.js"></script>		
		<script type="text/javascript">
			PL._init(); 
			PL.joinListen('/cuige/he');
			function onData(event) { 
				alert(event.get("mess")); 
				// 离开
				// PL.leave();
			}
		</script>
	</head>
	<body>
		<center>
		<h1>
			my first pushlet!
		</h1>
		</center>
	</body>
</html>

 

  •  将工程部署到Tomcat后访问,该页面以五秒钟一个间隔,收到后台传来的数据!

工程部署后如下图展示

 每次访问时,后台都会打印增加到管理中的用户信息,当关闭浏览器后,服务器会在超时后自动清理!

 

请您到ITEYE看我的原创:http://cuisuqiang.iteye.com

或支持我的个人博客,地址:http://www.javacui.com

 

15
2
分享到:
评论
23 楼 Jonny_qian 2017-02-16  
用setField返回一些简单,重要的信息,不要保存太多的信息字段在里面  
22 楼 zhanggen515200 2017-02-06  
20170106 写道
为什么我下载你的mypushlet.rar 怎么出不来 报404

我也是,服务器跑起来了,但是404,Page not found
21 楼 20170106 2017-01-11  
为什么我下载你的mypushlet.rar 怎么出不来 报404
20 楼 zengliangxi 2015-03-12  
楼主在tomcat中没问题,可是放到weblogic中部署时报错Servlet: "pushlet" failed to preload on startup in Web application: "hdq.war". java.lang.NullPointerException at nl.justobjects.pushlet.servlet.Pushlet.init(Pushlet.java:40) at javax.servlet.GenericServlet.init(GenericServlet.java:241) at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:283) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(Unknown Source) at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:64) at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:58) at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:48) at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:521) at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:1893) at weblogic.servlet.internal.WebAppServletContext.loadServletsOnStartup(WebAppServletContext.java:1870) at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1790) at
19 楼 shinebar 2014-12-02  
楼主你运行没?我写的示例基本上和你的一样,怎么在浏览器的左下角提示,pushlet died -2
18 楼 ld7413662 2014-11-13  
liuya 写道
lk0098 写道
请教一下,启动的时候出现EventSourceManager: cannot load sources.properties from classpath,这个路径是在哪设置的?
EventSourceManager: cannot load sources.properties from classpath, will try from D:\Program Files\apache-tomcat-7.0.54\webapps\mypushlet\/WEB-INF\sources.properties




同求,你们解决了吗?

可以把sources.properties,pushlet.properties两个文件换个目录,我放在src下面.
17 楼 zhangb5228509 2014-09-04  
这种方式感觉对服务器的压力还是很大
16 楼 cuisuqiang 2014-08-29  
liuya 写道
lk0098 写道
请教一下,启动的时候出现EventSourceManager: cannot load sources.properties from classpath,这个路径是在哪设置的?
EventSourceManager: cannot load sources.properties from classpath, will try from D:\Program Files\apache-tomcat-7.0.54\webapps\mypushlet\/WEB-INF\sources.properties




同求,你们解决了吗?

sources.properties就在WEB-INF下,我的代码里面不是有吗,难道有问题?
15 楼 liuya 2014-08-28  
lk0098 写道
请教一下,启动的时候出现EventSourceManager: cannot load sources.properties from classpath,这个路径是在哪设置的?
EventSourceManager: cannot load sources.properties from classpath, will try from D:\Program Files\apache-tomcat-7.0.54\webapps\mypushlet\/WEB-INF\sources.properties




同求,你们解决了吗?
14 楼 依柳触雪 2014-08-19  
lk0098 写道
请教一下,启动的时候出现EventSourceManager: cannot load sources.properties from classpath,这个路径是在哪设置的?
EventSourceManager: cannot load sources.properties from classpath, will try from D:\Program Files\apache-tomcat-7.0.54\webapps\mypushlet\/WEB-INF\sources.properties



同求...
13 楼 lk0098 2014-07-21  
请教一下,启动的时候出现EventSourceManager: cannot load sources.properties from classpath,这个路径是在哪设置的?
EventSourceManager: cannot load sources.properties from classpath, will try from D:\Program Files\apache-tomcat-7.0.54\webapps\mypushlet\/WEB-INF\sources.properties
12 楼 cuisuqiang 2013-12-31  
dongfangbubai1 写道
event怎么返回一个对象呢??????

如果返回的是字符串,那就只能返回字符串,用对象,可以更好的兼容
11 楼 cuisuqiang 2013-12-31  
心海新航 写道
想请教个问题,用pushlet如何实现实时提醒未读消息数呢?我现在遇到的问题是取不到登陆用户的session。求指教,非常感谢!

你说的这个功能可以使用AJAX实时刷新来实现。获得SessionID可以通过传递参数的方式实现,不过貌似加参数在后台获取很麻烦。如果你要更好方案欢迎分享
10 楼 dongfangbubai1 2013-12-30  
event怎么返回一个对象呢??????
9 楼 心海新航 2012-12-11  
想请教个问题,用pushlet如何实现实时提醒未读消息数呢?我现在遇到的问题是取不到登陆用户的session。求指教,非常感谢!
8 楼 cuisuqiang 2012-11-14  
sblig 写道
sblig 写道
cuisuqiang 写道
sblig 写道
IE8 崩溃 假死。。。

竟然有这种现象?我回头验证一下!

//现在已经处理好了,我的处理是这样的
protected Event pullEvent() {
  Event event = new Event("/null");//先创建到空的上面

  Map<String, List<HintArriveProcessInfo>> hintProMap =
HintArriveProcessTask.getHintMap();
  if (hintProMap.size() > 0) {

  }

}

谢谢分享!
7 楼 sblig 2012-11-13  
sblig 写道
cuisuqiang 写道
sblig 写道
IE8 崩溃 假死。。。

竟然有这种现象?我回头验证一下!

//现在已经处理好了,我的处理是这样的
protected Event pullEvent() {
  Event event = new Event("/null");//先创建到空的上面

  Map<String, List<HintArriveProcessInfo>> hintProMap =
HintArriveProcessTask.getHintMap();
  if (hintProMap.size() > 0) {

  }

}
6 楼 sblig 2012-11-13  
cuisuqiang 写道
sblig 写道
IE8 崩溃 假死。。。

竟然有这种现象?我回头验证一下!

protected Event pullEvent() {

}
5 楼 cuisuqiang 2012-11-13  
sblig 写道
IE8 崩溃 假死。。。

竟然有这种现象?我回头验证一下!
4 楼 sblig 2012-11-12  
IE8 崩溃 假死。。。

相关推荐

Global site tag (gtag.js) - Google Analytics