Tomcat6推送技术的使用
CometEvent event.... event.setTimeout(30*1000);
or
event.getHttpServletRequest().setAttribute("org.apache.tomcat.comet.timeout", new Integer(30 * 1000));
This sets the timeout to 30 seconds. Important note, in order to set this timeout, it has to be done on the?BEGIN
?event. The default value is?soTimeout
?
?
??????简单的Comet servlet代码示例:
package com.easyway.comet.pushlet;import java.io.*;import javax.servlet.ServletException;import javax.servlet.http.*;import org.apache.catalina.CometEvent;import org.apache.catalina.CometProcessor;import org.apache.catalina.CometEvent.EventType;/** * Tomcat6推送技术通过时现实tomcat的推送接口CometProcessor实现的servlet实现推送技术,在 * servlet中out.close()方法不能使用,否則不能持續推送信息. * <p>功能描述,该部分必须以中文句号结尾。<p> * * 创建日期 2013-7-21<br> * @author longgangbai <br> * @version $Revision$ $Date$ * @since 3.0.0 */public class CometServlet extends HttpServlet implements CometProcessor { // private static final long serialVersionUID = 1L; public void event(CometEvent e) throws IOException, ServletException { if (e.getEventType() == EventType.BEGIN) { // fill in code handling here HttpServletResponse response = e.getHttpServletResponse(); PrintWriter out = response.getWriter(); out.write("Hello world"); out.flush(); //System.out.println("message sent"); }else if (e.getEventType() == EventType.READ) { }else if (e.getEventType() == EventType.ERROR) { }else if(e.getEventType() == EventType.END){ } // and continue handing other events }}
?
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>CometTomcat6</display-name> <servlet> <servlet-name>cometTomcet6</servlet-name> <servlet-class>com.easyway.comet.pushlet.CometServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>cometTomcet6</servlet-name> <url-pattern>/cometServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list></web-app>
?
html界面代碼:
<!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>Insert title here</title></head> <script> //服务器端代码类似与普通Ajax代码,其中,需要注意的是:request.readyState值如果设置为4,浏览器会处于长期等待状态,而收不到响应消息,设置为3后,firefox浏览器正常,但IE不能正常获得消息 function CometEx() { var request = new XMLHttpRequest(); request.open("GET", "http://localhost:8080/CometTomcat6/cometServlet", true); request.onreadystatechange = function() { if (request.readyState == 3 && request.status == 200) { alert(request.responseText); } } request.send(null); } </script><body onload="CometEx();"></body></html>
?