编程环境及配置:

Eclipse3.3 + tomcat 6.0 + dojo + jetty 6.1.9

主要讲讲jetty。


“Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的 API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供 网络和web连接。”


Jetty里面含有实现comet技术的包。通过在Eclipse+tomcat编程环境中添加扩展jar文件的方式即可快速实现上述编程环境的配置。

  • 首先下载jetty-6.1.9.zip(可到)
  • 在他的/lib文件夹下面有我们所需要的所有的jar文件,找到jetty-util-6.1.9.jar,jetty- 6.1.9.jar,servlet-api-2.5-6.1.9.jar以及在/lib/cometd下面的cometd-bayeux- 6.1.9.jar,cometd-api-0.9.20080221.jar,将他们一并导入到eclipse的工程当中。
  • 将jetty-6.1.9/contrib/cometd/bayeux/src/main/java下面的org文件夹拷贝至工程的src目录中

HelloWorld

  • 编写HelloWorld.java
  1. package  cn.ict.net.lx.comet;  
  2. import  java.io.IOException;  
  3. import  java.util.HashMap;  
  4. import  java.util.Map;  
  5. import  javax.servlet.ServletException;  
  6. import  javax.servlet.http.HttpServletRequest;  
  7. import  javax.servlet.http.HttpServletResponse;  
  8. import  dojox.cometd.Bayeux;  
  9. import  dojox.cometd.Channel;  
  10. /**  
  11.  * Servlet implementation class for Servlet: HelloWorld  
  12.  *  
  13.  */   
  14.  public   class  HelloWorld  extends  javax.servlet.http.HttpServlet  implements  javax.servlet.Servlet {  
  15.    static   final   long  serialVersionUID = 1L;  
  16.      
  17.     /* (non-Java-doc)  
  18.      * @see javax.servlet.http.HttpServlet#HttpServlet()  
  19.      */   
  20.     public  HelloWorld() {  
  21.         super ();  
  22.     }         
  23.       
  24.     /* (non-Java-doc)  
  25.      * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)  
  26.      */   
  27.     protected   void  doGet(HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException {  
  28.         // TODO Auto-generated method stub   
  29.         //response.getWriter().println("Hello");   
  30.         for  ( int  i= 0 ; i <  100 ; i++)  
  31.             publish();  
  32.     }     
  33.       
  34.     /* (non-Java-doc)  
  35.      * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)  
  36.      */   
  37.     protected   void  doPost(HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException {  
  38.         // TODO Auto-generated method stub   
  39.         publish();  
  40.     }     
  41.       
  42.     public   void  publish(){  
  43.         Bayeux b = (Bayeux)getServletConfig().getServletContext().getAttribute(Bayeux.DOJOX_COMETD_BAYEUX);  
  44.         Channel c = b.getChannel("/hello/world"false );  
  45.         Map<String, Object> message = new  HashMap<String, Object>();  
  46.         message.put("test""jsp: hello world" );  
  47.           
  48.         c.publish(b.newClient("server_user"null ), message,  "new server message" );  
  49.     }  
  50. }  

  • 配置web工程的web.xml如下
  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>   
  2. < web-app   id = "WebApp_ID"   version = "2.4"   
  3.     xmlns = "http://java.sun.com/xml/ns/j2ee"   
  4.     xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >   
  6.     < display-name > dojoSrc </ display-name >   
  7.     < welcome-file-list >   
  8.         < welcome-file > index.html </ welcome-file >   
  9.         < welcome-file > index.htm </ welcome-file >   
  10.         < welcome-file > index.jsp </ welcome-file >   
  11.         < welcome-file > default.html </ welcome-file >   
  12.         < welcome-file > default.htm </ welcome-file >   
  13.         < welcome-file > default.jsp </ welcome-file >   
  14.     </ welcome-file-list >   
  15.     < servlet >   
  16.         < servlet-name > hello </ servlet-name >   
  17.         < servlet-class >   
  18.             cn.ict.net.lx.comet.HelloWorld  
  19.         </ servlet-class >   
  20.     </ servlet >   
  21.     < servlet-mapping >   
  22.         < servlet-name > hello </ servlet-name >   
  23.         < url-pattern > /hello/* </ url-pattern >   
  24.     </ servlet-mapping >   
  25.     <!-- 配置ContinuationCometdServlet, 这个是必须的。配置后就可以支持comted -->   
  26.     < servlet >   
  27.         < servlet-name > cometd </ servlet-name >   
  28.         < servlet-class >   
  29.             org.mortbay.cometd.continuation.ContinuationCometdServlet  
  30.         </ servlet-class >   
  31.         < load-on-startup > 1 </ load-on-startup >   
  32.     </ servlet >   
  33.     <!-- HelloWorld的servlet配置 -->   
  34.     < servlet >   
  35.         < description >   
  36.         </ description >   
  37.         < display-name >   
  38.         HelloWorld</ display-name >   
  39.         < servlet-name > HelloWorld </ servlet-name >   
  40.         < servlet-class >   
  41.         cn.ict.net.lx.comet.HelloWorld</ servlet-class >   
  42.     </ servlet >   
  43.     <!-- Servlet映射 -->   
  44.     < servlet-mapping >   
  45.         < servlet-name > cometd </ servlet-name >   
  46.         < url-pattern > /cometd/* </ url-pattern >   
  47.     </ servlet-mapping >   
  48.     < servlet-mapping >   
  49.         < servlet-name > HelloWorld </ servlet-name >   
  50.         < url-pattern > /HelloWorld </ url-pattern >   
  51.     </ servlet-mapping >   
  52.       
  53.       
  54. </ web-app >   

  • 编写hello.html
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" >   
  2. < html >   
  3. < head >   
  4. < meta   http-equiv = "Content-Type"   content = "text/html; charset=UTF-8" >   
  5. < title > Comet Hello World </ title >   
  6. < mce:script   type = "text/javascript"   src = "../dojo/dojo/dojo.js"   mce_src = "dojo/dojo/dojo.js"   djConfig = "parseOnLoad:true" > </ mce:script >   
  7. < mce:script   type = "text/javascript" > <!--  
  8.     dojo.require("dojox.cometd");  
  9.     dojo.require("dojox.cometd.timestamp");  
  10.       
  11.     function callback(msg) {  
  12.         // alert(msg);  
  13.         // document.write(msg);  
  14.         // alert(msg.data.test);  
  15.         document.body.appendChild(document.createTextNode(msg.data.test+"< br > "));  
  16.     }  
  17.       
  18.     dojox.cometd.init("/dojoSrc/cometd/cometd");  
  19.     dojox.cometd.subscribe("/hello/world", callback);  
  20. // --> </ mce:script >   
  21. </ head >   
  22. < body >   
  23.     < input   type = "button"   
  24.        onclick = "dojox.cometd.publish('/hello/world', { test: 'hello world' } )"   
  25.        value = "Click Me!" >   
  26. </ body >   
  27. </ html >   

分别使用IE/Firefox/Chrome访问页面hello.html:

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐