该cometdemo实现如下效果: 
1.客户端A打开某网页,界面上显示“wait”。窗口勿关。 
2.客户端B打开某网页,在某输入框中输入”red”, 则客户端A的白色方框变为红色。在某输入框中输入”green”, 则客户端A的方框变为绿色。 
 
详细代码后面给出。 
现在问题是,老板不相信这个东西实现了comet机制,他认为这个实现还是browser端不断地去服务端取数据(像ajax一样),而不是服务端发现数据更新了便push到browser端。我想问题的关键大概是他不认为这个cometdemo里的comet-push.jsp是在服务端执行的吧,即对于每个客户端A是不是都有一个不同的comet-push.jsp在执行,还是都是同一个? 
对jsp不太熟,请各位大牛帮忙给个说法。谢谢!!! 
对下面每个文件简单说明一下: 
comet.html:客户端A打开的页面,包含display和push两个框架 
comet-push.jsp:push框架。看数据是否更新,如果更新则push至display框架 
comet-display.html:display框架 
comet-input.jsp:客户端B打开的页面 
comet_server.java:存储数据的静态类 
 
comet.html 
<HTML> 
<HEAD> 
   <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
   <meta http-equiv="Pragma" content="no-cache"> 
 
<script LANGUAGE="javascript"> 
var pageStart="<HTML><HEAD></HEAD><BODY BGCOLOR=blue TEXT=white><table width=\"211\" height=\"106\" border=\"0\"><tr><td bgcolor=\"#"; 
var pageMiddle1="\">&nbsp;</td><td bgcolor=\"#"; 
var pageMiddle2="\">&nbsp;</td></tr></table><H2>Server pushes: <P>"; 
var pageEnd="</H2></BODY></HTML>"; 
 
  function push(content) { 
   window.frames['displayFrame'].document.writeln(pageStart+content+pageMiddle1+content+pageMiddle2+content+pageEnd); 
   window.frames['displayFrame'].document.close(); 
  } 
 
</script> 
</HEAD> 
 
<FRAMESET BORDER=0 COLS="*,0"> 
     <!-- frame to display the content pushed  --> 
     <FRAME SRC="comet-display.html" NAME="displayFrame"  BORDER=0  SCROLLING=no> 
      
     <!-- Hidden frame with the pushlet that pushes lines of javascript--> 
     <FRAME SRC="comet-push.jsp" NAME="pushletFrame" BORDER=0  SCROLLING=no> 
</FRAMESET> 
 
</HTML> 
 
comet-push.jsp 
<%@page import="Comet.*"%> 
<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"> 
<% 
  /** 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> "; 
  String color,colorvalue; 
  int i = 0; 
  try { 
      while (true) { 
          if (i!=comet_server.getInt()){ 
              i = comet_server.getInt(); 
              color = comet_server.getcolor(); 
              if ("red".equals(color)||"green".equals(color)){ 
                  if ("red".equals(color)) colorvalue = "FF0000"; 
                  else colorvalue = "00CC00"; 
                  out.print(jsFunPre+colorvalue+jsFunPost); 
                  out.flush(); 
          } 
          } 
          //out.print(jsFunPre+"FF0000"+jsFunPost); 
                  //out.flush(); 
      //检查comet_server是否有新数据,有则 
      try { 
          Thread.sleep(100); 
      } 
      catch (InterruptedException e){ 
          out.print(jsFunPre+"InterruptedException: "+e+jsFunPost); 
      } 
      } 
  } 
  catch (Exception e){ 
      out.print(jsFunPre+"Exception: "+e+jsFunPost); 
  } 
%> 
</BODY> 
</HTML> 
 
comet-display.html 
<HTML> 
<BODY BGCOLOR=black TEXT=white> 
<H1>WAIT...</H1> 
</BODY> 
</HTML> 
 
comet-input.jsp 
<%@page language="java" contentType="text/html;charset=UTF-8"%> 
<%@page import="Comet.*"%> 
<% 
String color = (String)request.getParameter("color"); 
comet_server.setcolor(color); 
%> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 
<body> 
<form method="post" name="colorinput" action="comet-input.jsp"> 
<input name="color" type="text" /> 
<input name="submit" value="OK" type="submit" /> 
</form> 
</body> 
</html> 
 
comet_server.java 
package Comet; 
public class comet_server{ 
    private static String color; 
    private static int i = 0; 
    public static void setcolor(String thatcolor){ 
        color = thatcolor; 
        if (i<100) 
        { 
            i++; 
        } 
        else i=0; 
    } 
    public static String getcolor(){ 
        return color; 
    } 
    public static int getInt(){ 
        return i; 
    } 
};