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信息。下面是我关闭页面后,服务器端的输出信息,如图:

  • 相关阅读:
    PAT 甲级 1126 Eulerian Path (25 分)
    PAT 甲级 1126 Eulerian Path (25 分)
    PAT 甲级 1125 Chain the Ropes (25 分)
    PAT 甲级 1125 Chain the Ropes (25 分)
    PAT 甲级 1124 Raffle for Weibo Followers (20 分)
    PAT 甲级 1124 Raffle for Weibo Followers (20 分)
    PAT 甲级 1131 Subway Map (30 分)
    PAT 甲级 1131 Subway Map (30 分)
    AcWing 906. 区间分组 区间贪心
    AcWing 907. 区间覆盖 区间贪心
  • 原文地址:https://www.cnblogs.com/lihuiyy/p/2270392.html
Copyright © 2011-2022 走看看