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);