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

pushlet 之 官方示例解读与改造

    博客分类:
  • J2EE
阅读更多

下载pushlet-2.0.4,解压后文件夹内有一些目录!

我们只关心 src 源文件,和 webapps 示例工程。将 pushlet.war 拷贝到Tomcat部署目录下,启动Tomcat,可以看示例工程!

示例工程有三个,我们打开 Pushlet Demos ,然后看到有许多可以进行测试的示例,点开 Basics 查看!

选择消息推送方式,然后选择订阅的主题,页面会显示后台推送的消息!

 

下面我们来新建一个工程,来自己手动建立一个测试示例工程!

为了查看更明显,不再拷贝Jar包而是拷贝源码!

 

log4j.properties,pushlet.properties,sources.properties,style.css,均拷贝自部署后Tomcat工程下的 pushlet 文件夹!

其中JS文件夹里面的内容其实是 pushlet 下 lib 下的内容,为了规范和统一特更名!

首先我们要修改一下 js-pushlet-client.js ,这个JS文件内取得系统跟路径的方法会有问题,所以在此更改一下!

原来的方法:

function getWebRoot() {
	if (pushletWebRoot != null) {
		return pushletWebRoot;
	}
	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("js-pushlet-client.js");
			if (index >= 0) {
				pushletWebRoot = src.substring(0, index);
				break;
			}
		}
	}
	return pushletWebRoot;
}

 

更改为:

//js获取项目根路径,如: http://localhost:8083/nms
function getWebRoot(){
    //获取当前网址,如: http://localhost:8083/nms/share/meun.jsp
    var curWwwPath=window.document.location.href;
    //获取主机地址之后的目录,如: nms/share/meun.jsp
    var pathName=window.document.location.pathname;
    var pos=curWwwPath.indexOf(pathName);
    //获取主机地址,如: http://localhost:8083
    var localhostPaht=curWwwPath.substring(0,pos);
    //获取带"/"的项目名,如:/nms
    var projectName=pathName.substring(0,pathName.substr(1).indexOf('/')+1);
    return(localhostPaht+projectName+"/");
}

 

如果按照原来的方式,则程序写的太死,不方便维护!

 

然后就是我们访问的页面 http://localhost:8080/pushlet/examples/raw/raw.html ,他的页面是英文的,可能有的人看的很麻烦!

虽然我的英文不怎么样,但是还是自我牺牲一下吧,翻译的不好的尽管板砖!

其实就是把里面的HTML内容拷贝到新建工程的 index.jsp 中:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<head>
	<title>消息推送模式与内容测试</title>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<link href="style.css" rel="stylesheet">
	<meta http-equiv="Pragma" content="no-cache">
	<script type="text/javascript" src="<%=basePath %>js/pushlet_js/js-pushlet-client.js"></script>
    <script type="text/javascript">
     	var subscriptionId = null;
       	// 加入或离开
		function joinLeave(what) {
			if (what == 'joinStream') {
			  p_join_listen(null, 'stream');
			} else if (what == 'joinPull') {
			  p_join_listen(null, 'pull');
			} else if (what == 'joinPoll') {
			  p_join_listen(null, 'poll');
		    } else if (what == 'leave') {
			  p_leave();
			  subscriptionId = null;
			  displayData('无消息或离开状态');
		    }
		}
		// 产生消息
		function onData(event) {
			// Write the event as HTML table into content Element
	  		// p_debug(flag, "pushlet-app", 'event received subject=' + event.getSubject() );
			displayData(event.toString());
		}
		// 主题订阅成功
		function onSubscribeAck(event) {
			subscriptionId = event.get('p_sid');
			displayControl(event.toString());
			displayData('订阅成功,等待消息');
    	}
    	// Ack refresh
		function onRefreshAck(event) {
			displayData(event.toString());
    	}
	   	// Heartbeat on data channel
		function onHeartbeat(event) {
			displayData(event.toString());
    	}
		// 主题取消订阅成功
		function onUnsubscribeAck(event) {
			subscriptionId = null;
			displayControl(event.toString());
			displayData('取消订阅成功,无消息');
  		}
		// 捕获其他返回信息
		function onEvent(event) {
			displayControl(event.toString());
		}
		// 订阅主题
		function subscribeUnsubscribe(subject) {
		    if (p_getSessionId() == null) {
		      alert('请先选择加入模式');
		      return;
		    }
		    if (subject == 'UNSUBSCRIBE') {
		       // Unsubscribe all
			   p_unsubscribe();
			} else if (subject != '') {
				// Unsubscribe first if already subscribed
				if (subscriptionId != null) {
					p_unsubscribe(subscriptionId);
				}
				p_subscribe(subject, 'mylabel');
			}
 		}
		// 选择调试
		function setDebug(value) {
			if (value == 'none') {
				p_setDebug(false);
			} else if (value == 'full') {
				p_setDebug(true);
			} else if (value == 'net') {
				p_setDebug(false);
				p_setNetDebug(true);
			}
 		}
 		function displayData(aString) {
 		  document.dataEventDisplay.event.value = aString;
		}
   		function displayControl(aString) {
 		  document.controlEventDisplay.event.value = aString;
		}
	</script>
</head>
<body>
  <h2>消息推送测试</h2>
  <p>通过以下表单控制消息服务</p>
  <table border="0" cellpadding="0" cellspacing="0" >
    <tr>
    <td>
       <h3>加入/离开</h3>
     </td>
     <td>
       <h3>主题</h3>
     </td>
      <td>
       <h3>调试窗口</h3>
     </td>
    </tr>
    <tr>
    <td>
       <form name="joinForm">
         <select name="joinField" onChange="joinLeave(this.value)">
           <option selected value="" >请选择</option>
           <option value="joinStream">加入 (stream mode)</option>
           <option value="joinPull">加入 (pull mode)</option>
           <option value="joinPoll">加入 (poll mode)</option>
           <option value="leave">离开</option>
         </select>
       </form>
     </td>
     <td>
       <form name="subscribeForm">
         <select name="selectField" onChange="subscribeUnsubscribe(this.value)">
           <option selected value="" >选择主题</option>
           <option value="/system">系统信息</option>
           <option value="/temperature">天气情况</option>
           <option value="/stocks">网络连接</option>
           <option value="/stocks,/temperature">多主题订阅</option>
           <option value="/">所有消息</option>
          <option value="UNSUBSCRIBE">卸载主题</option>
          </select>
       </form>
     </td>
      <td>
        <form name="debugForm">
          <select name="selectField" onChange="setDebug(this.value)">
           <option selected value="none" >无调试</option>
           <option value="full">所有调试</option>
           <option value="net">进调试网络</option>
          </select>
        </form>
     </td>
    </tr>
  </table>
<h3>控制和监控</h3>
<p>
以下是事件监听情况,你需要先加入才能看到效果
</p>
<form name="controlEventDisplay">
  <table border="2" bordercolor="white" cellpadding="0" cellspacing="0" >
    <tr>
     <td>
       <textarea cols="40" rows="8" name="event">
        等待消息
       </textarea>
     </td>
    </tr>
  </table>
</form>
<h3>消息监控</h3>
<p>
以下是事件产生的消息内容,你需要选择主题后才能看到消息内容
</p>
<form name="dataEventDisplay">
  <table border="2" bordercolor="white" cellpadding="0" cellspacing="0" >
    <tr>
     <td>
       <textarea cols="60" rows="10" name="event">
        没有消息
       </textarea>
     </td>
    </tr>
  </table>
</form>
<script type="text/javascript">p_embed()</script>
</body>
</html>

 

别忘记了工程需要日志记录的log4j包!运行后看到效果:

 

 选择一个加入模式,选择一个主题,会看到后台推送的消息内容!

 

解说:

消息来源是定义在sources.properties中

source1=nl.justobjects.pushlet.test.TestEventPullSources$TemperatureEventPullSource
source2=nl.justobjects.pushlet.test.TestEventPullSources$SystemStatusEventPullSource
source3=nl.justobjects.pushlet.test.TestEventPullSources$PushletStatusEventPullSource
source4=nl.justobjects.pushlet.test.TestEventPullSources$AEXStocksEventPullSource
source5=nl.justobjects.pushlet.test.TestEventPullSources$WebPresentationEventPullSource
source6=nl.justobjects.pushlet.test.TestEventPullSources$PingEventPullSource

 

以上是示例自带的消息源

 

获取消息的步骤

通过 p_join_listen 方法加入监听,加入模式有三种:stream,pull,poll

通过 p_leave 方法取消事件监听

通过 p_subscribe 方法订阅主题

通过 p_unsubscribe 方法取消订阅的主题

在操作过程中,会触发一些事件,例如订阅成功,取消主题订阅等消息通知,和有消息推送时触发的 onData 方法!

 

获取消息

示例打印在页面时直接使用了 event.toString() !

我们也看到了他打印的内容:

p_event=data
p_subject=/system/jvm
p_seq=1
totalMemory=5177344
threads=25
maxMemory=66650112
freeMemory=433104
p_time=1349686051
p_sid=fyfaq

 

一个Key一个Value,如果想要获得某个值,查看手把手示例!

event.get("mess");

 

请您到ITEYE网站看原创,谢谢!

http://cuisuqiang.iteye.com/ !

自建博客地址:http://www.javacui.com/ ,内容与ITEYE同步!

10
1
分享到:
评论

相关推荐

    基于SpringBoot+Vue的“智慧食堂”设计与实现(Java毕业设计,包括源码、数据库、教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

    历届奥运会奖牌数据(1896-2024年).xlsx

    本次分享的数据为1896年-2024年(从雅典到巴黎)间奥运会奖牌数据,包括年份、届次、国家地区、名次、金牌、银牌、铜牌等数据,含免费下载链接 ## 一、数据介绍 数据名称:历届奥运会奖牌数据 数据范围:世界各国 样本数量:1877条 数据年份:1896年-2024年 数据说明:包括届次、国家、名次等数据

    基于SpringBoot+Vue的实习管理系统(Java毕业设计,包括源码、数据库、教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

    【人机交互】MATLAB直车道线检测.zip

    【人机交互】MATLAB直车道线检测

    基于SSM+JSP的KTV点歌系统+数据库(Java毕业设计,包括源码,教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:jsp 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4

    基于SSM+JSP的课程在线教育资源管理系统(1)+数据库(Java毕业设计,包括源码,教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:jsp 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4

    2023年计算机硬件的组装实验报告.pdf

    2023年计算机硬件的组装实验报告.pdf

    springboot大学生租房系统 LW PPT.zip

    ava项目springboot基于springboot的课程设计,包含源码+数据库+毕业论文

    Flutter分析:带有质量平衡部分机翼的MATLAB计算(含Elastic轴与中心对齐)

    内容概要:本文档主要针对含有质量平衡段(即弹性轴和重心重合点xa=0)的硬翼Flutter问题提供了MATLAB解决方案。文档通过迭代的方式对一系列参数(如频率比(fr)、弹性轴(E)和半径(r)等)进行操作,并利用贝塞尔函数(Kn)来评估flutter速度(UFhat),从而预测了不同质比(mu)下flutter的缩减速度变化情况。同时,文档包含了绘图命令以视觉展示减小颤振速度随质量比变化的趋势以及相应的MATLAB代码。 适合人群:航空工程、飞行器动力学领域的科研工作者,工程师及研究生。尤其是那些从事飞行安全性和稳定性研究的专业人士。 使用场景及目标:主要用于解决飞行器设计过程中遇到的具体颤振问题,能够为设计新型飞机或其他有翼飞行物体提供科学依据和技术支持。它还能够辅助教育,帮助相关专业的学生理解flutter现象及其预防措施。 其他说明:此文件是以数值方法探讨带质量平衡的翅膀颤振特性的实例,在工程上有着重要意义。对于希望深入学习此类问题的人来说,这是一个极好的参考资料和实验平台。然而,实际应用还需要进一步考虑真实条件下的复杂因素,因此需要更多的专业知识和背景资料的支持。

    基于JAVA的机场航班起降与协调管理系统&毕业设计&毕业论文&数据库&演示视频&源代码

    本次项目是设计一个基于JAVA的机场航班起降与协调管理系统。 (1)在经济可行性上来分析的话,该软件是机场内部使用的一个指挥协调软件,属于航空安全投资,本软件开发成本并不高,软件和服务器数据库可以用机场原有的数据库进行开发,比起空难给航空公司造成的损失来说九牛一毛。 (2)在技术可行性上来分析的话,该软件主要运用了Java技术、jQuery-easyui和Mysql数据库技术。Java是到目前来说最稳定的、最可靠的软件开发工具;jQuery-easyui虽然是比较新的前台开发技术,但是他的界面新颖整洁,适合于功能性软件的开发;Mysql数据库也是许多大公司都采用的软件项目开发数据库,不仅稳定而且性能可靠,可以用作本次软件的开发。 (3)在法律可行性上来分析的话,该软件使用的技术都为开源的软件开发工具和语言,虽然Java等开发技术都存在Sun公司的版权问题,但是Java技术是可以免费使用的,没有涉及到法律上的侵权。 (4)在方案可行性上来分析的话,此次软件开发的很大一部分精力都放在了软件的需求分析和设计方面,设计出来的软件可以很好地去实现我们所要完成的软件预先设计的功能。

    2023年计算机与通信网络实验报告.pdf

    2023年计算机与通信网络实验报告.pdf

    2023年四川省德阳市统招专升本计算机自考真题(含答案).pdf

    2023年四川省德阳市统招专升本计算机自考真题(含答案).pdf

    基于SSM+JSP的农产品供销服务系统+数据库(Java毕业设计,包括源码,教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:jsp 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4

    篮球论坛系统--论文.zip

    Java项目基于springboot的课程设计,包含源码+数据库+毕业论文

    基于SpringBoot+Vue的致远汽车租赁系统(Java毕业设计,包括源码、数据库、教程).zip

    Java 项目,仅供学习参考。 Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

    GUI面板MATLAB答题纸试卷自动识别.zip

    GUI面板MATLAB答题纸试卷自动识别

    Java毕业设计-SpringBoot+Vue的班级综合测评管理系统(附源码、数据库、教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

    springboot大学生体质测试管理系统--论文.zip

    ava项目springboot基于springboot的课程设计,包含源码+数据库+毕业论文

    美国机器人渗透度(工具变量).dta

    美国工业机器人渗透度是衡量自动化技术在制造业和其他工业领域应用程度的重要指标,可帮助研究制造业自动化趋势、劳动力市场变化,以及智能制造对经济的影响,同时,本分享数据也可用作工业机器人工具变量 ## 一、美国工业机器人渗透度数据的介绍 数据年份:2011-2019年 数据范围:美国各行业 数据格式:excel、dta

Global site tag (gtag.js) - Google Analytics