该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="\"> </td><td bgcolor=\"#";
var pageMiddle2="\"> </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;
}
};
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="\"> </td><td bgcolor=\"#";
var pageMiddle2="\"> </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;
}
};
解决方案 »
- SSH框架HibernateDaoSupport中没有update方法
- 关于打印的问题,求教,谢谢!
- 怎么新建一个build.xml文件啊?
- 字符 过滤
- java调用VB.NET写的DLL
- hibernate + sqlserver2005 如何实现删除记录后保持id主键连续不间断
- 我那个网页我用request.setCharacterEncoding("GBK");之后还是出现存到数据库里还是乱码,这是怎么回事啊?
- 跪求一个基于SSH框架的图书管理系统。
- 求指教,SSH项目里怎么搭建Quartz呢?
- 我用的是jrun,请问怎样实现在jsp页面中,鼠标在某个图标上时,该图标所在位置就换成另一个图标
- 大虾们棒棒忙啊!一个关于Tomcat的问题!
- 按照自然历得出一年中的第几周是哪个区间段?
那肯定是B/S结构....需要讨论吗...
难道现在HTTP能直接长连接了?