Author: remm Date: Tue Sep 12 17:48:21 2006 New Revision: 442776 URL: http://svn.apache.org/viewvc?view=rev&rev=442776 Log: - Chat example using the new API.
Modified: tomcat/tc6.0.x/trunk/webapps/examples/WEB-INF/classes/chat/ChatServlet.java Modified: tomcat/tc6.0.x/trunk/webapps/examples/WEB-INF/classes/chat/ChatServlet.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/examples/WEB-INF/classes/chat/ChatServlet.java?view=diff&rev=442776&r1=442775&r2=442776 ============================================================================== --- tomcat/tc6.0.x/trunk/webapps/examples/WEB-INF/classes/chat/ChatServlet.java (original) +++ tomcat/tc6.0.x/trunk/webapps/examples/WEB-INF/classes/chat/ChatServlet.java Tue Sep 12 17:48:21 2006 @@ -23,9 +23,11 @@ import java.io.PrintWriter; import java.util.ArrayList; -import org.apache.catalina.servlets.CometServlet; +import org.apache.catalina.CometEvent; +import org.apache.catalina.CometProcessor; import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -34,7 +36,7 @@ * Helper class to implement Comet functionality. */ public class ChatServlet - extends CometServlet { + extends HttpServlet implements CometProcessor { protected ArrayList<HttpServletResponse> connections = new ArrayList<HttpServletResponse>(); @@ -54,9 +56,59 @@ messageSender = null; } - public void begin(HttpServletRequest request, HttpServletResponse response) + /** + * Process the given Comet event. + * + * @param event The Comet event that will be processed + * @throws IOException + * @throws ServletException + */ + public void event(CometEvent event) + throws IOException, ServletException { + + // Note: There should really be two servlets in this example, to avoid + // mixing Comet stuff with regular connection processing + HttpServletRequest request = event.getHttpServletRequest(); + HttpServletResponse response = event.getHttpServletResponse(); + + if (event.getEventType() == CometEvent.EventType.BEGIN) { + String action = request.getParameter("action"); + if (action != null) { + if ("login".equals(action)) { + String nickname = request.getParameter("nickname"); + request.getSession(true).setAttribute("nickname", nickname); + response.sendRedirect("post.jsp"); + event.close(); + return; + } else { + String nickname = (String) request.getSession(true).getAttribute("nickname"); + String message = request.getParameter("message"); + messageSender.send(nickname, message); + response.sendRedirect("post.jsp"); + event.close(); + return; + } + } else { + if (request.getSession(true).getAttribute("nickname") == null) { + // Redirect to "login" + log("Redirect to login for session: " + request.getSession(true).getId()); + response.sendRedirect("login.jsp"); + event.close(); + return; + } + } + begin(event, request, response); + } else if (event.getEventType() == CometEvent.EventType.ERROR) { + error(event, request, response); + } else if (event.getEventType() == CometEvent.EventType.END) { + end(event, request, response); + } else if (event.getEventType() == CometEvent.EventType.READ) { + read(event, request, response); + } + } + + protected void begin(CometEvent event, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { - super.begin(request, response); log("Begin for session: " + request.getSession(true).getId()); PrintWriter writer = response.getWriter(); @@ -69,9 +121,8 @@ } } - public void end(HttpServletRequest request, HttpServletResponse response) + protected void end(CometEvent event, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { - super.end(request, response); log("End for session: " + request.getSession(true).getId()); synchronized(connections) { connections.remove(response); @@ -80,15 +131,20 @@ PrintWriter writer = response.getWriter(); writer.println("</body></html>"); + event.close(); + } - public void error(HttpServletRequest request, HttpServletResponse response) + protected void error(CometEvent event, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { log("Error for session: " + request.getSession(true).getId()); - end(request, response); + synchronized(connections) { + connections.remove(response); + } + event.close(); } - public boolean read(HttpServletRequest request, HttpServletResponse response) + protected void read(CometEvent event, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { InputStream is = request.getInputStream(); byte[] buf = new byte[512]; @@ -98,35 +154,20 @@ log("Read " + n + " bytes: " + new String(buf, 0, n) + " for session: " + request.getSession(true).getId()); } else if (n < 0) { - return false; + error(event, request, response); + return; } } while (is.available() > 0); - return true; } protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { - String action = request.getParameter("action"); - if (action != null) { - if ("login".equals(action)) { - String nickname = request.getParameter("nickname"); - request.getSession(true).setAttribute("nickname", nickname); - response.sendRedirect("post.jsp"); - } else { - String nickname = (String) request.getSession(true).getAttribute("nickname"); - String message = request.getParameter("message"); - messageSender.send(nickname, message); - response.sendRedirect("post.jsp"); - } - } else { - if (request.getSession(true).getAttribute("nickname") == null) { - // Redirect to "login" - response.sendRedirect("login.jsp"); - } else { - // Request to view the chet, so use Comet - super.service(request, response); - } - } + // Compatibility method: equivalent method using the regular connection model + PrintWriter writer = response.getWriter(); + writer.println("<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">"); + writer.println("<head><title>JSP Chat</title></head><body bgcolor=\"#FFFFFF\">"); + writer.println("Chat example only supports Comet processing"); + writer.println("</body></html>"); } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]