zoukankan      html  css  js  c++  java
  • pushlet的简单使用

    【转载】原文地址:http://hi.baidu.com/hivemind/blog/item/f95ecafe333e47235c6008be.html

    pushlet是comet的一个实现框架,在Servlet机制下,数据从server端的java对象直接推送(push)到html页面,无需插件的支持。至于comet和ajax的区别什么的,大家上网看一下即可,这里不做太多说明。

    首先去下载pushlet,下载地址:http://www.pushlets.com/,我下载的是一个当下最新的版本2.0.4。下面以一个例子做下说明,详细的可以看一下pushlet自身带的例子,源码也不是很复杂,包括几个js文件。有空大家看看源码可能更好些。

    首先建立一个web工程projPushlet,将pushlet.jar放到lib目录中,引入到工程。并且将pushlet.propertiessources.properties两个文件拷贝到WEB-INF目录中去。工程的目录结构如图示

    我们一般只需要对sources.properties进行修改即可。创建的消息源必须在这个文件中进行配置。消息源需要实现EventSource接口

    先看一下web.xml文件的servlet配置

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
    	xmlns="http://java.sun.com/xml/ns/javaee" 
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      
      <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>
      
    </web-app>
    

      注意,缺省不需要修改<url-pattern>/pushlet.srv</url-pattern>,如果修改,需要在对应的js文件中也要修改。pushlt缺省就是通过pushlet.srv触发servlet的。

    ==========================================

    看一下index.jsp这个文件的内容

    <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>My JSP 'index.jsp' starting page</title>
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
    	<script type="text/javascript" src="ajax-pushlet-client.js"></script>
    	<script type="text/javascript">
    	 	PL._init();
    	 	PL.joinListen('/zhaoyang/hi'); 
    	 	function onData(event) {
    	 		alert(event.get("hw"));
    	 	}
    	</script>
    	
      </head>
      
      <body>
        This is my first pushlet. <br>
      </body>
    </html>
    

    其中,PL._init(); 是对pushlet的初始化,触发web.xml中的servlet。其中,它下面的那行特别重要,这里的监听的主题,必须在sources.properties中配置的对象中声明这个主题。sources.properties配置着事件源(EventSources),在服务器启动时会自动激活。可以通过服务器的启动记录查看的到。可以将这个文件放到WEB-INF目录下面或者classess目录下面都可以。(详细可以看sources.properties内的注释)

    然后看一下sources.properties这个文件内容。如下图示:


    注意,source1是系统缺省自带的,source2是我自己配置的,并且在index.jsp中的脚本中,配置的/zhaoyang/hi是和这儿是对应的。具体是这样的。HwPlushlet是com.css.HelloWorldPlushlet对象的一个内部类,并且继承EventPullSource接口。大家看一下HelloWorldPlushlet.java就全明白了。代码如下:

    package com.css;

    import java.io.Serializable;

    import nl.justobjects.pushlet.core.Event;
    import nl.justobjects.pushlet.core.EventPullSource;

    public class HelloWorldPushlet implements Serializable{
    static public class EventPullSource extends EventPullSource{

    @Override
    protected long getSleepTime() {
    return 1000;
    }

    @Override
    protected Event pullEvent() {
    Event event = Event.createDataEvent("/zhaoyang/hi");
    event.setField("hw", "hello,world");
    return event;
    }

    }
    }

     在上面的代码中,可以看到创建事件(createDataEvent)的主题(aSubject)是/zhaoyang/hi,和index.jsp中PL.joinListen('/zhaoyang/hi'); 是对应的。EventPullSource有两个方法,一个是设置休眠时间(getSleepTime),另一个是创建事件(pullEvent)。其中,业务部分就写在pullEvent()方法中即可,这个方法会被定时调用

    这样这个基本的例子就OK了,运行一下,看看吧。

     访问http://localhost:8080/ 会定时弹出alert窗口,窗口的内容就是 event.setField("hw","hello,world");,呵呵。如图:

    如图:

    如果这个页面关闭了,服务器会自动取消订阅,和移除对应的session信息。下面是我关闭页面后,服务器端的输出信息,如图:

  • 相关阅读:
    easyui datagrid 遇到的坑 cannot read property ·· pageNum bug and so on
    原生js上传图片时的预览
    yield的理解
    js时间格式化
    js 实现复制粘贴时注意方法中需要两次点击实现的bug
    jquery 页面分页的实现
    easyui dialog 表单提交,弹框初始化赋值,dialog实现
    a标签(普通标签如span)没有disabled属性 ,怎样利用js实现该属性
    js之数据类型(对象类型——构造器对象——数组2)
    js之数据类型(对象类型——构造器对象——数组1)
  • 原文地址:https://www.cnblogs.com/lihuiyy/p/2270392.html
Copyright © 2011-2022 走看看