Tomcat6 修改server.xml protocol="org.apache.coyote.http11.Http11NioProtocol"
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.catalina.comet.CometEvent;
import org.apache.catalina.comet.CometProcessor;
public class TestComet extends HttpServlet implements CometProcessor{
/**
*
*/
private static final long serialVersionUID = 1908618975033615167L;
private TestClient client = null;
@Override
public void event( CometEvent event ) throws IOException, ServletException {
HttpServletRequest req = event.getHttpServletRequest();
HttpServletResponse resp = event.getHttpServletResponse();
switch ( event.getEventType() ){
case BEGIN:
{
event.setTimeout(30000);
client = new TestClient(resp);
client.start();
break;
}
case END:
{
System.out.println("end");
event.close();
break;
}
case ERROR:
{
System.out.println("error");
event.close();
break;
}
case READ:
{
System.out.println("read");
event.close();
break;
}
}
}
}
import javax.servlet.ServletResponse;
public class TestClient {
private ServletResponse resp = null;
private Customer customer;
private Producer producer;
private Thread pro;
private Thread cus;
private SyncStack stack;
public TestClient(ServletResponse resp){
this.resp = resp;
stack = new SyncStack();
customer = new Customer(resp,stack);
producer = new Producer(stack);
cus = new Thread(customer);
pro = new Thread(producer);
}
public void start(){
cus.start();
pro.start();
}
public void setStatus(boolean _status){
customer.setStatus(_status);
}
}
//产品
public class SyncStack {
private String[] str = new String[10];
private int index;
public synchronized void push(String sst) {
if (index == sst.length()) {
try {
System.out.println("enough product,please wait!");
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.notify();
str[index] = sst;
index++;
}
public synchronized String pop() {
if (index == 0) {
try {
System.out.println("no product,please wait!");
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
notify();
index--;
String product = str[index];
return product;
}
public String[] pro() {
return str;
}
}
//生产者
public class Producer implements Runnable {
private SyncStack stack;
private boolean isRunning = true;
public Producer(SyncStack stack) {
this.stack = stack;
}
public void run() {
while(isRunning){
for (int i = 0; i < stack.pro().length; i++) {
String product = "Product" + i;
stack.push(product);
System.out.println("producted: " + product);
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}// while
}
}
//消费者
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletResponse;
public class Customer implements Runnable{
private ServletResponse resp = null;
private SyncStack stack;
private boolean isRunning = true;
public Customer(ServletResponse resp,SyncStack stack){
this.resp = resp;
this.stack = stack;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(isRunning){
for (int i = 0; i < stack.pro().length; i++) {
String product = stack.pop();
PrintWriter pt;
try {
pt = resp.getWriter();
pt.println(product);
pt.flush();
resp.flushBuffer();
System.out.println("consumed: " + product);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}//while
}
public void setStatus(boolean _status){
this.isRunning = _status;
}
}
jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
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></title>
<script language = "javascript">
function go(){
var url = "http://109.123.112.190:8080/abc/comet";
var request ;
request = new XMLHttpRequest();
request.setRequestHeader("Content-Type","application/x-javascript;");
request.open("GET",url,true);
request.send(null);
request.onreadystatechange = function(){
if(this.readyState == 3 && this.status == 200){
if(request.responseText){
document.getElementById("number").innerHTML = request.responseText;
}
}
};
}
</script>
</head>
<body>
<input type = "button" name = "go" onclick = "go();" value="go"/>
<div id = "number"></div>
</body>
</html>
分享到:
相关推荐
Comet实现聊天室 运行时请将Tomcat的server.xml文件内的 connectionTimeout="20000" redirectPort="8443" /> 改为 connectionTimeout="20000" redirectPort="8443" /> 登陆的时候请记得先修改index.jsp...
【标题】"comet4j+tomcat6+tomcat7并附完整版Demo" 提供的是一种在Java后端与前端之间实现长连接通信的解决方案,主要涉及到的技术包括Comet4j、Tomcat 6和Tomcat 7。Comet技术是用于实现实时Web应用的一种方法,它...
标题中的“用DWR comet+Spring实现服务器推送的例子--网页聊天室”涉及到的是Web开发中的实时通信技术。DWR(Direct Web Remoting)是一个开源Java库,它允许JavaScript在浏览器和服务器之间进行直接的、安全的远程...
Comet4j是实现Comet的一种方式,它简化了在Java应用中集成实时推送的复杂性。该库提供了多种策略来实现长连接,包括HTTP Streaming、HTTP Chunked Transfer和Ajax Long Polling等。在Tomcat7这样的Servlet容器中,...
【标题】:“Tomcat+Comet 实现终端与服务端同步的小例子” 在这个主题中,我们将探讨如何使用Apache Tomcat服务器和Comet技术来实现浏览器客户端与服务端的实时通信。Comet是一种Web应用程序设计模式,它允许数据...
总的来说,“JQuery + Comet + IAsyncHttpHandler 简易聊天室”项目展示了一个利用现代Web技术实现实时通信的例子,结合了前端的jQuery库和后端的异步处理技术,实现了高效且实时的聊天功能。这样的设计思路对于学习...
comet两种实现之一的ajax实现,内部有源代码,这是一个聊天室的例子
tomcat实现comet例子,实现后台产生每隔几秒产生随机数,前台不刷新显示。tomcat实现comet例子,实现后台产生每隔几秒产生随机数,前台不刷新显示。tomcat实现comet例子,实现后台产生每隔几秒产生随机数,前台不...
javaweb消息推送 基于comet实现局域网内部通讯(聊天室)demo 功能特性 推送消息广播。 推送定向消息。 提供连接上线前、上线、下线前、下线、发送消息等多种可处理事件。 消息缓存机制,确保长轮询工作模式下不丢失...
这个"comet demo"是一个展示如何在Java环境下利用Tomcat服务器实现Comet技术的实例。Tomcat 6.0是Apache软件基金会开发的开源Servlet容器,支持各种Java Web应用的部署,包括Comet技术。 首先,Comet的核心在于保持...
comet4j Dome jar (tomcat6,tomcat7) comet4j Dome jar (tomcat6,tomcat7) comet4j Dome jar (tomcat6,tomcat7) comet4j Dome jar (tomcat6,tomcat7) comet4j Dome jar (tomcat6,tomcat7) comet4j Dome jar (tomcat6...
Comet4j是一个Java框架,专门用于实现Comet技术,这是一种服务器推送技术,允许服务器向客户端实时推送数据,而不仅仅是响应客户端的请求。在Web应用中,这种技术常用于实现聊天、实时通知、股票更新等功能,它克服...
Spring整合DWR(Direct Web Remoting)和Comet技术,是一种高效的实现Web应用程序实时通信的解决方案,特别适用于创建如多人聊天室这样的实时交互应用。在这个项目中,Spring作为后端框架,负责业务逻辑处理和控制...
Tomcat 7是一个流行的开源Java应用服务器,支持Servlet和JSP标准,Comet4J利用其特性来实现 comet 技术。你需要将这个jar包添加到Tomcat的类路径(classpath)中,以便在服务器端运行Comet4J相关的代码。 2. `comet...
里面东西很多,都是关于GWT-COMET的内容,实现gwt的服务器推技术,包括gwt-comet-examples-1.2.3:google官网上的Test实例;gwt-comet-1.2.3.jar:jar包,gwt-example:聊天实例源代码(.java的),gwt-event-source...
在本项目中,Comet4j可能被用来实现实时通知、聊天室等功能,提升应用的交互性和实时体验。 综上所述,这个项目集成了多种技术,构建了一个功能强大的Java Web应用,涵盖了从前端用户界面到后端数据处理的完整流程...
6. **WebSocket**:虽然不是传统意义上的Comet,WebSocket提供了全双工、低延迟的连接,非常适合实时通信应用,许多现代的Comet实现会结合WebSocket以提供更好的性能。 7. **错误处理和重连机制**:在Comet应用中,...
通过comet实现了一个聊天功能。 1.需要在tomcat的server.xml里面配置 connectionTimeout="20000" redirectPort="8443" /> 2.需要在tomcat的context.xml里面配置 在Context标签里面配置: ...
属于javaEE技术,对着源码讲解。视频可到优酷http://v.youku.com/v_show/id_XNTQ0NzQxMzYw.html?f=19180666或者直接搜名字。密码见文档