`
cloklo
  • 浏览: 27090 次
  • 性别: Icon_minigender_1
  • 来自: 襄阳
社区版块
存档分类
最新评论

Pushlets:从Servlet发送消息给DHTML客户端浏览器

    博客分类:
  • HTML
阅读更多

来自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对象给serverserver保存这些引用并按照顺序通知客户端,在javaworld的另外一篇文章中对此有详细的讨论(http://www.javaworld.com/javaworld/javaqa/1999-04/05-rmicallback.html)。

 

 

Messaging

 

 

消息方式的话,appletmessageing server的客户端,它通过TCP/IP连接或者UDP发送消息,最新进展甚至可以通过multicast。你可以通过消息中间件,如SoftWirediBusIBMMQSeriesBEA的消息中间件等。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.htmlpush-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.jspjs-pushlet-net.html

l         客户端java(JavaPushletClient.javaJavaPushletClientListener.java)用来接收Java客户端的事件。

l         用来在DHTML layer中显示内容的layer.jslayer-grid.jslayer-region.js

l         测试事件和例子应用(如EventGenerators.javatemperature.html)。

 

  

 

关键类是Pushlet这个servletPublisher类,Subscriber接口和Event类。客户端通过调用Pushlet servlet,客户端接收Event

分享到:
评论

相关推荐

    网页开发必备:网页制作完全手册(DHTML html css htc )

    DHTML 对象 DHTML 属性 DHTML 方法 DHTML 事件 DHTML 集合 HTML 参考 HTML 元素 HTML 字符集 样式表(CSS)参考 CSS 属性参考 CSS 长度单位参考 其他参考 命令标识符 缺省行为参考 htc 行为参考 可视化...

    DHTML5-客户端JavaScript.ppt

    DHTML5-客户端JavaScript.ppt

    css.rar_DHTML_html_w3c css_浏览器

     本手册是 Rainer s DHTML Library 产品的一部分。  本手册针对的是已有一定网页设计制作经验的读者。其目的是提供完整清晰的样式表内容的快速索引及进阶帮助。所以对于网页制作和样式表的基础知识,仅简单介绍,...

    web开发手册(javascript css servlet w3c dhtml)

    web开发相关手册文档 包括dhtml js servlet css w3c

    DHTML 手册 DHTML 手册

    DHTML 手册 DHTML 手册 DHTML 手册 DHTML 手册

    用VC++ 对 IE 浏览器进行高级操作

    很多软件安装以后都会在 IE 浏览器的工具栏上添 加一个自己的启动按钮,只要点击该按钮就可以启动自 己的程序,比较典型的软件有网络蚂蚁、金山词霸、网 际快车(FlashGet)等等。如图 1 所示,“FlashGet” 按钮...

    在网制作中,有许多的术语,例如:CSS、HTML、DHTML、XHTML等等.docx

    在网制作中,有许多的术语,例如:CSS、HTML、DHTML、XHTML等等.docx

    DHTML动态网页设计(完整课件)

    DHTML 是一个营销术语 - 被网景公司(Netscape)和微软公司用来描述 4.x 代浏览器应当支持的新技术。 DHTML 是一种用来创建动态站点的技术组合物。对大多数人来说,DHTML 意味着 HTML 4.0、样式表以及 JavaScript 的...

    pushlet.jar(2.0.4)

    Pushlet 是一个开源的 Comet 框架,Pushlet 使用了观察者模式:客户端发送请求,订阅感兴趣的事件;服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的方式发送到订阅者的事件队列里。 ...

    DHTML.api手册

     Netscape 4.x 跨浏览器 DHTML Internet Explorer 4.x  JSS(JavaScript 样式表)(允许您控制不同的 HTML 元素如何显示)  Layers(允许您控制元素的定位和可见性)  CSS1  CSS2(允许您控制不同的 ...

    fxos-app-lemmings:为 FirefoxOS 更新了 DHTML Lemmings

    DHTML 旅鼠 本游戏已获得 GPL 许可,由crisp ( ) 于 2004 年编写 该存储库是更新版本,以利用更新的技术并在 2014 年适应网络。 它旨在支持更新的设备,如手机或平板电脑,使用: HTML5 - 避免不良做法并使用新的...

    DHTML手册 DHTML

    DHTML手册 DHTML

    dhtml 示例

    Web 窗体 DHTML 示例演示如何在 Web 窗体应用程序中使用客户端脚本和动态 HTML (DHTML)。许多可用的 Web 窗体示例重点说明 ASP.NET 的新服务器端事件处理功能。此示例阐释客户端脚本仍然是用于在 ASP.NET 中生成 Web...

    DHTML概念、核心和编程

    DHTML技术资料 DHTML的概念 DHTML 技术的核心—DOM CSS-P DHTML 编程

    DHTML&javascript 使用手册

    DHTML&javascript 使用手册 动态 HTML (DHTML) 对象模型参考 DHTML 对象 DHTML 属性 DHTML 方法 DHTML 事件 DHTML 集合 HTML 参考 HTML 元素 HTML 字符集 样式表(CSS)参考 CSS 属性参考 CSS 长度单位参考...

    易语言WEB浏览器2.0#3版(第三方)

    易语言WebBrowser2.fne支持库中文名为易语言WEB浏览器支持库,本易语言支持库封装WEB浏览器控件。使您可以在 Windows 窗体客户端应用程序中显示网页。可以复制应用程序中的 Internet Explorer Web浏览功能,还可以...

    Dhtml手册(Dhtml手册.chm)

    Dhtml手册(Dhtml手册.chm)

    DHTML 手册中文文档

    DHTML 完全手册 动态 HTML (DHTML) 对象模型参考 &lt;br&gt;DHTML 对象 DHTML 属性 DHTML 方法 DHTML 事件 DHTML 集合 HTML 参考 &lt;br&gt;HTML 元素 HTML 字符集 样式表(CSS)参考 &lt;br...

    DHTML参考手册DHTML参考手册

    DHTML 对象 DHTML 属性 DHTML 方法 DHTML 事件 DHTML 集合 HTML 参考 HTML 元素 HTML 字符集 样式表(CSS)参考 CSS 属性参考 CSS 长度单位参考 其他参考 命令标识符 缺省行为参考 htc 行为参考 可视化...

Global site tag (gtag.js) - Google Analytics