You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by cr...@locus.apache.org on 2000/07/11 04:07:22 UTC
cvs commit: jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/servlets InvokerServlet.java
craigmcc 00/07/10 19:07:22
Modified: proposals/catalina/src/share/org/apache/tomcat/servlets
InvokerServlet.java
Log:
Enhance the invoker servlet to support both /servlet/{servlet-name} and
/servlet/{servlet-class} type mappings, assuming that "/servlet" is the
mapping assigned to the invoker servlet itself. There is no specification
requirements related to an invoker servlet, but this change will improve
compatibility with existing servlet containers that behave in this way.
Revision Changes Path
1.5 +36 -51 jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/servlets/InvokerServlet.java
Index: InvokerServlet.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/servlets/InvokerServlet.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- InvokerServlet.java 2000/05/16 20:25:57 1.4
+++ InvokerServlet.java 2000/07/11 02:07:22 1.5
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/servlets/InvokerServlet.java,v 1.4 2000/05/16 20:25:57 craigmcc Exp $
- * $Revision: 1.4 $
- * $Date: 2000/05/16 20:25:57 $
+ * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/servlets/InvokerServlet.java,v 1.5 2000/07/11 02:07:22 craigmcc Exp $
+ * $Revision: 1.5 $
+ * $Date: 2000/07/11 02:07:22 $
*
* ====================================================================
*
@@ -65,20 +65,9 @@
package org.apache.tomcat.servlets;
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
import java.io.IOException;
-import java.io.PrintWriter;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.sql.Timestamp;
-import java.util.Enumeration;
-import java.util.Vector;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
-import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -86,9 +75,6 @@
import org.apache.tomcat.HttpRequest;
import org.apache.tomcat.HttpResponse;
import org.apache.tomcat.Wrapper;
-import org.apache.tomcat.util.xml.SaxContext;
-import org.apache.tomcat.util.xml.XmlAction;
-import org.apache.tomcat.util.xml.XmlMapper;
/**
@@ -97,7 +83,7 @@
* in the web application deployment descriptor.
*
* @author Craig R. McClanahan
- * @version $Revision: 1.4 $ $Date: 2000/05/16 20:25:57 $
+ * @version $Revision: 1.5 $ $Date: 2000/07/11 02:07:22 $
*/
public final class InvokerServlet
@@ -250,21 +236,7 @@
}
String servletClass = pathInfo.substring(1);
- // See if we can load the class object for this servlet class
- /*
- try {
- Class clazz = Class.forName(servletClass);
- } catch (Throwable t) {
- if (debug >= 1)
- log("serveRequest: Invalid servletClass '" +
- servletClass + "'");
- response.sendError(HttpServletResponse.SC_NOT_FOUND,
- request.getRequestURI());
- return;
- }
- */
-
- // Create and register a new Wrapper for this servlet class
+ // Identify the servlet name or class, and related information we will need
int slash = servletClass.indexOf("/");
if (slash >= 0) {
pathInfo = servletClass.substring(slash);
@@ -275,25 +247,38 @@
String name = "org.apache.tomcat.INVOKER." + servletClass;
String pattern = request.getServletPath() + "/" + servletClass + "/*";
Wrapper wrapper = null;
- if (debug >= 1)
- log("serveRequest: Creating wrapper for '" + servletClass +
- "' with mapping '" + pattern + "'");
- try {
- Class wrapperClassObject = Class.forName(wrapperClass);
- wrapper = (Wrapper) wrapperClassObject.newInstance();
- wrapper.setName(name);
- wrapper.setLoadOnStartup(1);
- wrapper.setServletClass(servletClass);
- context.addChild(wrapper);
- context.addServletMapping(pattern, name);
- } catch (Throwable t) {
- log("serveRequest", t);
- response.sendError(HttpServletResponse.SC_NOT_FOUND,
- request.getRequestURI());
- return;
- }
+
+ // Are we referencing an existing servlet name?
+ wrapper = (Wrapper) context.findChild(servletClass);
+ if (wrapper != null) {
+ if (debug >= 1)
+ log("serveRequest: Using wrapper for servlet '" +
+ wrapper.getName() + "' with mapping '" + pattern + "'");
+ context.addServletMapping(pattern, wrapper.getName());
+ }
+
+ // No, create a new wrapper for the specified servlet class
+ else {
+ if (debug >= 1)
+ log("serveRequest: Creating wrapper for '" + servletClass +
+ "' with mapping '" + pattern + "'");
+ try {
+ Class wrapperClassObject = Class.forName(wrapperClass);
+ wrapper = (Wrapper) wrapperClassObject.newInstance();
+ wrapper.setName(name);
+ wrapper.setLoadOnStartup(1);
+ wrapper.setServletClass(servletClass);
+ context.addChild(wrapper);
+ context.addServletMapping(pattern, name);
+ } catch (Throwable t) {
+ log("serveRequest", t);
+ response.sendError(HttpServletResponse.SC_NOT_FOUND,
+ request.getRequestURI());
+ return;
+ }
+ }
- // Pass this request on to the newly created wrapper
+ // Pass this request on to the identified or newly created wrapper
StringBuffer sb = new StringBuffer(request.getServletPath());
sb.append("/");
sb.append(servletClass);