来自RMI或者CORBA的服务器端回掉可以通知客户端服务器上有什么变化。但是如果客户端是浏览器,情况又如何呢?本文介绍pushlets来完成此功能。
下载:
http://www.pushlets.com ,当前下载版本为2.0.0
正文:
当前,开发者越来越将servlet或者jsp作为服务器前端语言了,但是同时,如果浏览器已经装载了当前html页面,它就很难从服务器端获取更新信息了。(如果客户端不主动请求的话)。
对于经验丰富的程序员,我们容易想起applet。本文我们要讨论一下到底如何做最好。
1, server-to-web client 通知:现有解决方案
在进入pushlet概念之前,让我们回顾一下现有的server-to-web client方案,可以归结为:HTML刷新、server-side callback以及messaging。
HTML refresh
<META HTTP-EQUIV="Refresh" CONTENT="4;URL=http://www.justobjects.nl">
页面会定时刷新,但是多少时间合适?
Server-side callback
在server-side callback中,server对象回调一个java-applet,通过RMI或者CORBA。通常,客户端首先传递一个RMI远程引用或者CORBA对象给server,server保存这些引用并按照顺序通知客户端,在javaworld的另外一篇文章中对此有详细的讨论(http://www.javaworld.com/javaworld/javaqa/1999-04/05-rmicallback.html)。
Messaging
消息方式的话,applet是messageing server的客户端,它通过TCP/IP连接或者UDP发送消息,最新进展甚至可以通过multicast。你可以通过消息中间件,如SoftWired的iBus,IBM的MQSeries,BEA的消息中间件等。JMS是消息的重要标准。
上述方案都有各自的优点和缺点。让我们看看Pushlet吧。
Pushlet是一个轻量级的客户端方案,不需要applet或者插件,直接和脚本以及HTML整合,使用标准HTTP连接,可以在任何servlet服务器中部署。它并一定是上述方案的替代,是你另外一个可选的方案。
Pushlet 基础
HTTP streaming
Pushlet基于HTTP streaming,它不是读取完html页面就关闭HTTP连接,连接仍然开放。
我们可以开发一个JSP或者servlet,它持续发送HTML内容给客户端。如下:
<HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> </HEAD> <BODY BGCOLOR="blue" TEXT="white"> <% int i = 1;
try { while (true) { out.print("<h1>"+(i++)+"</h1>"); out.flush();
try { Thread.sleep(3000); } catch (InterruptedException e) { out.print("<h1>"+e+"</h1>"); } } } catch (Exception e) { out.print("<h1>"+e+"</h1>"); } %> </BODY> </HTML> |
下一个例子中,我们了结一下pushlet的机制。如何让页面3秒钟刷新一次?包含三个文件:push-js-stream.html,push-js-stram-pusher.jsp,push-js-stream-display.html。主页面是push-js-stream.html。
push-js-stram-pusher.jsp
<% /** Start a line of JavaScript with a function call to parent frame. */ String jsFunPre = "<script language=JavaScript >parent.push('";
/** End the line of JavaScript */ String jsFunPost = "')</script> ";
int i = 1; try {
// Every three seconds a line of JavaScript is pushed to the client while (true) {
// Push a line of JavaScript to the client out.print(jsFunPre+"Page "+(i++)+jsFunPost); out.flush();
// Sleep three secs try { Thread.sleep(3000); } catch (InterruptedException e) { // Let client display exception out.print(jsFunPre+"InterruptedException: "+e+jsFunPost); } } } catch (Exception e) { // Let client display exception out.print(jsFunPre+"Exception: "+e+jsFunPost); } %> |
Push-js-stram.html
<script LANGUAGE="JavaScript"> var pageStart="<HTML><HEAD></HEAD><BODY BGCOLOR=blue TEXT=white><H2>Server pushes: <P>"; var pageEnd="</H2></BODY></HTML>";
// Callback function with message from server. // This function is called from within the hidden JSP pushlet frame function push(content) {
// Refresh the display frame with the content received window.frames['displayFrame'].document.writeln(pageStart+content+pageEnd); window.frames['displayFrame'].document.close(); }
</script> </HEAD>
<FRAMESET BORDER=0 COLS="*,0"> <!-- frame to display the content pushed by the pushlet --> <FRAME SRC="push-js-stream-display.html" NAME="displayFrame" BORDER=0 SCROLLING=no>
<!-- Hidden frame with the pushlet that pushes lines of JavaScript--> <FRAME SRC="push-js-stream-pusher.jsp" NAME="pushletFrame" BORDER=0 SCROLLING=no> </FRAMESET> |
Push-js-display.html
<HTML> <BODY BGCOLOR=black TEXT=white> <H1>WAIT...</H1> </BODY> </HTML> |
运行一下上面的代码,它体现了pushlet的全部思想:在servlet或者jsp中将Javascript代码以流的形式传递给一个隐藏的frame。
Design of the Framework
Pushlet框架应用的基本模式是Publish-Subscribe模式,也称作Observer模式,有服务器端组件和客户端组件:
l 服务器端Java类(围绕pushlet.java),请看UML类图。
l 客户端可复用脚本(pushlet.js)和html(pushlet.html),用来接收DHTML客户端的事件。
(石头注:在2.0.0版本中,应该是lib目录下的js-pushlet-client.jsp和js-pushlet-net.html)
l 客户端java类(JavaPushletClient.java和JavaPushletClientListener.java)用来接收Java客户端的事件。
l 用来在DHTML layer中显示内容的layer.js、layer-grid.js、layer-region.js。
l 测试事件和例子应用(如EventGenerators.java和temperature.html)。
关键类是Pushlet这个servlet,Publisher类,Subscriber接口和Event类。客户端通过调用Pushlet servlet,客户端接收Event
相关推荐
DHTML 对象 DHTML 属性 DHTML 方法 DHTML 事件 DHTML 集合 HTML 参考 HTML 元素 HTML 字符集 样式表(CSS)参考 CSS 属性参考 CSS 长度单位参考 其他参考 命令标识符 缺省行为参考 htc 行为参考 可视化...
DHTML5-客户端JavaScript.ppt
本手册是 Rainer s DHTML Library 产品的一部分。 本手册针对的是已有一定网页设计制作经验的读者。其目的是提供完整清晰的样式表内容的快速索引及进阶帮助。所以对于网页制作和样式表的基础知识,仅简单介绍,...
web开发相关手册文档 包括dhtml js servlet css w3c
DHTML 手册 DHTML 手册 DHTML 手册 DHTML 手册
很多软件安装以后都会在 IE 浏览器的工具栏上添 加一个自己的启动按钮,只要点击该按钮就可以启动自 己的程序,比较典型的软件有网络蚂蚁、金山词霸、网 际快车(FlashGet)等等。如图 1 所示,“FlashGet” 按钮...
在网制作中,有许多的术语,例如:CSS、HTML、DHTML、XHTML等等.docx
DHTML 是一个营销术语 - 被网景公司(Netscape)和微软公司用来描述 4.x 代浏览器应当支持的新技术。 DHTML 是一种用来创建动态站点的技术组合物。对大多数人来说,DHTML 意味着 HTML 4.0、样式表以及 JavaScript 的...
Pushlet 是一个开源的 Comet 框架,Pushlet 使用了观察者模式:客户端发送请求,订阅感兴趣的事件;服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的方式发送到订阅者的事件队列里。 ...
Netscape 4.x 跨浏览器 DHTML Internet Explorer 4.x JSS(JavaScript 样式表)(允许您控制不同的 HTML 元素如何显示) Layers(允许您控制元素的定位和可见性) CSS1 CSS2(允许您控制不同的 ...
DHTML 旅鼠 本游戏已获得 GPL 许可,由crisp ( ) 于 2004 年编写 该存储库是更新版本,以利用更新的技术并在 2014 年适应网络。 它旨在支持更新的设备,如手机或平板电脑,使用: HTML5 - 避免不良做法并使用新的...
DHTML手册 DHTML
Web 窗体 DHTML 示例演示如何在 Web 窗体应用程序中使用客户端脚本和动态 HTML (DHTML)。许多可用的 Web 窗体示例重点说明 ASP.NET 的新服务器端事件处理功能。此示例阐释客户端脚本仍然是用于在 ASP.NET 中生成 Web...
DHTML技术资料 DHTML的概念 DHTML 技术的核心—DOM CSS-P DHTML 编程
DHTML&javascript 使用手册 动态 HTML (DHTML) 对象模型参考 DHTML 对象 DHTML 属性 DHTML 方法 DHTML 事件 DHTML 集合 HTML 参考 HTML 元素 HTML 字符集 样式表(CSS)参考 CSS 属性参考 CSS 长度单位参考...
易语言WebBrowser2.fne支持库中文名为易语言WEB浏览器支持库,本易语言支持库封装WEB浏览器控件。使您可以在 Windows 窗体客户端应用程序中显示网页。可以复制应用程序中的 Internet Explorer Web浏览功能,还可以...
Dhtml手册(Dhtml手册.chm)
DHTML 完全手册 动态 HTML (DHTML) 对象模型参考 <br>DHTML 对象 DHTML 属性 DHTML 方法 DHTML 事件 DHTML 集合 HTML 参考 <br>HTML 元素 HTML 字符集 样式表(CSS)参考 <br...
DHTML 对象 DHTML 属性 DHTML 方法 DHTML 事件 DHTML 集合 HTML 参考 HTML 元素 HTML 字符集 样式表(CSS)参考 CSS 属性参考 CSS 长度单位参考 其他参考 命令标识符 缺省行为参考 htc 行为参考 可视化...