You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2006/09/13 02:48:21 UTC
svn commit: r442776 -
/tomcat/tc6.0.x/trunk/webapps/examples/WEB-INF/classes/chat/ChatServlet.java
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: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org