Tomcat已经实现了自己的comet方式,并且提供了一个例子。这样网上的例子很多,我精简了些。
MessageSender.java
package me.comet;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;
import javax.servlet.ServletResponse;
public class MessageSender extends Thread {
private ServletResponse connection;
public MessageSender(ServletResponse connection) {
this.connection = connection;
}
public void run() {
try {
while (true) {
if (connection == null) {
synchronized (this) {
wait();
}
}
OutputStream out = connection.getOutputStream();
out.write(getString().getBytes());
out.flush();
connection.flushBuffer();
System.out.print(getString());
Thread.sleep(1000);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@SuppressWarnings("deprecation")
private String getString() {
return Thread.currentThread()+" CurrentTime "+new Date().toLocaleString() + "\n";
}
}
TimeServlet.java
package me.comet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.catalina.CometEvent;
import org.apache.catalina.CometProcessor;
public class TimeServlet extends HttpServlet implements CometProcessor {
private static final long serialVersionUID = 1L;
private static final Integer TIMEOUT = 10 * 1000;
private MessageSender sender = null;
public void event(CometEvent event) throws IOException, ServletException {
HttpServletRequest request = event.getHttpServletRequest();
HttpServletResponse response = event.getHttpServletResponse();
if (event.getEventType() == CometEvent.EventType.BEGIN) {
log("Begin for session: " + request.getSession(true).getId());
request.setAttribute("org.apache.tomcat.comet.timeout", TIMEOUT);
sender = new MessageSender(response);
sender.start();
} else if (event.getEventType() == CometEvent.EventType.ERROR) {
log("Error for session: " + request.getSession(true).getId());
event.close();
} else if (event.getEventType() == CometEvent.EventType.END) {
log("End for session: " + request.getSession(true).getId());
event.close();
} else if (event.getEventType() == CometEvent.EventType.READ) {
throw new UnsupportedOperationException("This servlet does not accept data");
}
}
@Override
public void destroy() {
sender.interrupt();
sender = null;
}
}
web.xml
<?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>TimeServlet</servlet-name>
<servlet-class>me.comet.TimeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TimeServlet</servlet-name>
<url-pattern>/time</url-pattern>
</servlet-mapping>
</web-app>
test.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Comet Weather</title>
</head>
<body>
<label>记录</label>
<br/>
<iframe src="http://localhost:8080/comet/time"
width="60%" height="300" frameborder="1"></iframe>
</body>
</html>
更改 tomcat/conf/server.xml
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" />
更改 tomcat/conf/context.xml
<Context>
<Loader delegate="true" />
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
jar包
添加tomcat/lib/catalina.jar
测试地址:http://localhost:8080/comet/test.jsp
分享到:
相关推荐
tomcat7后台服务器,java项目实现后台推送信息到客户端浏览器
通过tomcat服务器,向网页发送即时消息。comet的小例子,可以直接运行,用tomcat6.0。
Comet4J是一个微型的即时推送框架,它分为服务端与客户端两部分,你只要将服务器端(JAR文件,目前仅支持Tomcat6、7)放入WEB-INF\lib,客户端(JavaScript文件)引入到页面,那么你的应用就具备了向客户端推送信息的...
使用Tomcat服务器进行开发简单又方便,部署容易,配置简单!
Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询、长连接、自动选择三种工作模式 文件包含comet4j-tomcat6.jar , comet4j-tomcat7.jar , comet4j.js...
服务器主动向客户端推送消息所需的comet4j-tomcat7.jar和comen4j.js,在此需注意:comet4j-tomcat7.jar目前仅支持tomcat6和tomcat7
此资源包中包含了tomcat7所需要的jar包与comet4j.js请各位自取,谢谢!
demo是采用comet的web推送技术,使用tomcat7做服务器,内含tomcat7上面配置说明,在MyEclipse、tomcat7上面完美运行,本人亲测!
comet4j消息推送所需js与jar包(tomcat6与tomcat7) Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架
comet4j-tomcat7.jar comet4j.js Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架
Comet4J是一个微型的即时推送框架,它分为服务端与客户端两部分,你只要将服务器端(JAR文件,目前仅支持Tomcat6、7)放入WEB-INF\lib,客户端(JavaScript文件)引入到页面,那么你的应用就具备了向客户端推送信息的...
Comet模式是一种服务器端推技术,它的核心思想提供一种能让当服务器端往客户端发送数据的方式。Comet模式为什么会出现?刚开始人们在客户端通过不断自动刷新整个页面来更新数据,后来觉得体验不好又使用了AJAX不断从...
这个项目是基于tomcat,comet4j的技术来实现推送消息到web页面,可以直接导入,直接运行的,里面包含了项目所需要的comet4j-tomcat7.jar(tomcat7的就导入这个),comet4j.js(页面引入这个js),等jar包,对于想要学习...
该压缩包包含了目前最新的服务器推送技术comet4j技术的相关jar包及js脚本文件,服务器有tomcat6和tomcat7.
服务器推送技术comet4j技术的相关jar包及js脚本文件,maven项目里包含tomcat7的comet4j.jar包,项目直接解压部署运行可以看效果。做了两个不同频道的实时数据推送,希望对大家学习有帮助。
通过comet实现了一个聊天功能。 1.需要在tomcat的server.xml里面配置 connectionTimeout="20000" redirectPort="8443" /> 2.需要在tomcat的context.xml里面配置 在Context标签里面配置: ...
Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询、长连接、自动选择三种工作模式。 功能特性 推送消息广播。 推送定向消息。 提供连接上线前、上线、...