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/05/05 07:59:10 UTC

cvs commit: jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/servlets InvokerServlet.java

craigmcc    00/05/04 22:59:09

  Modified:    proposals/catalina/src/conf server.xml web.xml
               proposals/catalina/src/share/org/apache/tomcat/core
                        ApplicationContext.java ApplicationDispatcher.java
                        StandardContext.java
               proposals/catalina/src/share/org/apache/tomcat/servlets
                        InvokerServlet.java
  Log:
  Correct mapping problem on request dispatchers that, among other things,
  messed up the invoker servlet.
  
  Revision  Changes    Path
  1.16      +3 -3      jakarta-tomcat/proposals/catalina/src/conf/server.xml
  
  Index: server.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/proposals/catalina/src/conf/server.xml,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- server.xml	2000/05/03 22:58:21	1.15
  +++ server.xml	2000/05/05 05:59:07	1.16
  @@ -50,12 +50,12 @@
         <!-- Tomcat Examples Context -->
         <Context path="/examples" docBase="webapps/examples" debug="0">
           <Listener className="org.apache.tomcat.startup.ContextConfig"
  -	          debug="3"/>
  +	          debug="0"/>
           <Manager className="org.apache.tomcat.session.StandardManager"
  -	         checkInterval="15" maxActiveSessions="1000"
  +	         checkInterval="15" maxActiveSessions="100"
                    pathname="sessions/localhost_examples.sessions"/>
   	<Valve   className="org.apache.tomcat.security.HttpSecurityValve"
  -                 debug="2"/>
  +                 debug="0"/>
         </Context>
   
         <!-- Watchdog JSP Tests Context -->
  
  
  
  1.7       +1 -3      jakarta-tomcat/proposals/catalina/src/conf/web.xml
  
  Index: web.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/proposals/catalina/src/conf/web.xml,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- web.xml	2000/05/03 22:58:21	1.6
  +++ web.xml	2000/05/05 05:59:08	1.7
  @@ -42,7 +42,7 @@
       </init-param>
   -->
   <!--
  -    <load-on-startup>-2147483646</load-on-startup>
  +    <load-on-startup>3</load-on-startup>
   -->
     </servlet>
   
  @@ -441,5 +441,3 @@
   -->
   
   </web-app>
  -
  -
  
  
  
  1.7       +7 -5      jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/ApplicationContext.java
  
  Index: ApplicationContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/ApplicationContext.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- ApplicationContext.java	2000/05/01 01:53:53	1.6
  +++ ApplicationContext.java	2000/05/05 05:59:08	1.7
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/ApplicationContext.java,v 1.6 2000/05/01 01:53:53 craigmcc Exp $
  - * $Revision: 1.6 $
  - * $Date: 2000/05/01 01:53:53 $
  + * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/ApplicationContext.java,v 1.7 2000/05/05 05:59:08 craigmcc Exp $
  + * $Revision: 1.7 $
  + * $Date: 2000/05/05 05:59:08 $
    *
    * ====================================================================
    *
  @@ -91,7 +91,7 @@
    * associated with each instance of <code>StandardContext</code>.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.6 $ $Date: 2000/05/01 01:53:53 $
  + * @version $Revision: 1.7 $ $Date: 2000/05/05 05:59:08 $
    */
   
   final class ApplicationContext
  @@ -360,6 +360,7 @@
   	}
   	HttpRequestBase request = new HttpRequestBase();
   	request.setContext(context);
  +	request.setContextPath(context.getPath());
   	request.setRequestURI(contextPath + relativeURI);
   	request.setQueryString(queryString);
   	Wrapper wrapper = context.map(request, true);
  @@ -367,7 +368,8 @@
   	    return (null);
   
   	// Construct a RequestDispatcher to process this request
  -	HttpServletRequest hrequest = (HttpServletRequest) request.getRequest();
  +	HttpServletRequest hrequest =
  +	    (HttpServletRequest) request.getRequest();
   	ApplicationDispatcher dispatcher =
   	  new ApplicationDispatcher(wrapper,
   	  			    hrequest.getServletPath(),
  
  
  
  1.3       +88 -28    jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/ApplicationDispatcher.java
  
  Index: ApplicationDispatcher.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/ApplicationDispatcher.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ApplicationDispatcher.java	2000/05/01 21:08:52	1.2
  +++ ApplicationDispatcher.java	2000/05/05 05:59:08	1.3
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/ApplicationDispatcher.java,v 1.2 2000/05/01 21:08:52 craigmcc Exp $
  - * $Revision: 1.2 $
  - * $Date: 2000/05/01 21:08:52 $
  + * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/ApplicationDispatcher.java,v 1.3 2000/05/05 05:59:08 craigmcc Exp $
  + * $Revision: 1.3 $
  + * $Date: 2000/05/05 05:59:08 $
    *
    * ====================================================================
    *
  @@ -93,7 +93,7 @@
    * from this resource.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.2 $ $Date: 2000/05/01 21:08:52 $
  + * @version $Revision: 1.3 $ $Date: 2000/05/05 05:59:08 $
    */
   
   final class ApplicationDispatcher
  @@ -122,11 +122,14 @@
   	super();
   	this.wrapper = wrapper;
   	this.context = (Context) wrapper.getParent();
  -	this.logger = wrapper.getLogger();
   	this.servletPath = servletPath;
   	this.pathInfo = pathInfo;
   	this.queryString = queryString;
   
  +	if (debug >= 1)
  +	    log("servletPath=" + this.servletPath + ", pathInfo=" +
  +		this.pathInfo + ", queryString=" + queryString);
  +
       }
   
   
  @@ -140,9 +143,9 @@
   
   
       /**
  -     * The Logger we can use to log debugging messages.
  +     * The debugging detail level for this component.
        */
  -    private Logger logger = null;
  +    private int debug = 0;
   
   
       /**
  @@ -211,6 +214,8 @@
   
   	// Handle a non-HTTP forward by passing on the existing request and response
   	if ((hrequest == null) || (hresponse == null)) {
  +	    if (debug >= 1)
  +		log(" Non-HTTP Forward");
   	    try {
   		wrapper.invoke(srequest, sresponse);
   	    } catch (IOException e) {
  @@ -225,6 +230,8 @@
   
   	// Handle an HTTP named dispatcher forward (no wrapping is required)
           else if ((servletPath == null) && (pathInfo == null)) {
  +	    if (debug >= 1)
  +		log(" Named Dispatcher Forward");
   	    try {
   		wrapper.invoke(hrequest, hresponse);
   	    } catch (IOException e) {
  @@ -239,6 +246,22 @@
   
   	// Handle an HTTP path-based forward with no new query parameters
   	else if (queryString == null) {
  +	    if (debug >= 1)
  +		log(" Non-Wrapped Path Forward");
  +	    StringBuffer sb = new StringBuffer();
  +	    if (context.getPath() != null)
  +	        sb.append(context.getPath());
  +	    if (servletPath != null)
  +	        sb.append(servletPath);
  +	    if (pathInfo != null)
  +	        sb.append(pathInfo);
  +	    String requestURI = sb.toString();
  +	    hrequest.setRequestURI(requestURI);
  +	    hrequest.setServletPath(servletPath);
  +	    hrequest.setPathInfo(pathInfo);
  +	    // Keep original query string
  +	    if (debug >= 1)
  +		log(" requestURI=" + requestURI);
   	    try {
   		wrapper.invoke(hrequest, hresponse);
   	    } catch (IOException e) {
  @@ -254,6 +277,8 @@
   
   	// Handle an HTTP path-based dispatcher include with request wrapping
   	else {
  +	    if (debug >= 1)
  +		log(" Wrapped Path Forward");
   	    WrappedRequest wrequest = new WrappedRequest(hrequest, queryString);
   	    StringBuffer sb = new StringBuffer();
   	    if (context.getPath() != null)
  @@ -263,6 +288,8 @@
   	    if (pathInfo != null)
   	        sb.append(pathInfo);
   	    String requestURI = sb.toString();
  +	    if (debug >= 1)
  +		log(" requestURI=" + requestURI);
   	    wrequest.setRequestURI(requestURI);
   	    wrequest.setServletPath(servletPath);
   	    wrequest.setPathInfo(pathInfo);
  @@ -279,27 +306,6 @@
   	    }
   	}
   
  -
  -	// Flush and close the output stream or writer
  -	PrintWriter writer = null;
  -	try {
  -	    writer = response.getWriter();
  -	    try {
  -		writer.flush();
  -		writer.close();
  -	    } catch (Throwable t) {
  -		;
  -	    }
  -	} catch (IllegalStateException e) {
  -	    try {
  -		ServletOutputStream stream = response.getOutputStream();
  -		stream.flush();
  -		stream.close();
  -	    } catch (Throwable t) {
  -		;
  -	    }
  -	}
  -
       }
   
   
  @@ -332,6 +338,8 @@
   
   	// Handle a non-HTTP include by passing on the existing request and response
   	if ((hrequest == null) || (hresponse == null)) {
  +	    if (debug >= 1)
  +		log(" Non-HTTP Include");
   	    try {
   		wrapper.invoke(srequest, sresponse);
   	    } catch (IOException e) {
  @@ -347,6 +355,8 @@
   
   	// Handle an HTTP named dispatcher include (no wrapping is required)
   	if ((servletPath == null) && (pathInfo == null)) {
  +	    if (debug >= 1)
  +		log(" Named Dispatcher Include");
   	    try {
   		wrapper.invoke(hrequest, hresponse);
   	    } catch (IOException e) {
  @@ -361,6 +371,8 @@
   	}
   
   	// Handle an HTTP path-based dispatcher include (with request wrapping)
  +	if (debug >= 1)
  +	    log(" Wrapped Path Include");
   	WrappedRequest wrequest = new WrappedRequest(hrequest, queryString);
   	String contextPath = context.getPath();
   	StringBuffer sb = new StringBuffer();
  @@ -371,6 +383,8 @@
   	if (pathInfo != null)
   	    sb.append(pathInfo);
   	ServletRequest sr = wrequest.getRequest();
  +	if (debug >= 1)
  +	    log(" requestURI=" + sb.toString());
   	if (sb.length() > 0)
   	    sr.setAttribute("javax.servlet.include.request_uri", sb.toString());
   	if (contextPath != null)
  @@ -391,6 +405,52 @@
   	} catch (Throwable t) {
   	    throw new ServletException
   	      (sm.getString("applicationDispatcher.include.throw"), t);
  +	}
  +
  +    }
  +
  +
  +    // -------------------------------------------------------- Private Methods
  +
  +
  +    /**
  +     * Log a message on the Logger associated with our Context (if any)
  +     *
  +     * @param message Message to be logged
  +     */
  +    private void log(String message) {
  +
  +	Logger logger = null;
  +	if (context != null)
  +	    logger = context.getLogger();
  +	if (logger != null)
  +	    logger.log("ApplicationDispatcher[" + context.getPath() + "]: "
  +		       + message);
  +	else
  +	    System.out.println("ApplicationDispatcher[" + context.getPath()
  +			       + "]: " + message);
  +
  +    }
  +
  +
  +    /**
  +     * Log a message on the Logger associated with our Container (if any)
  +     *
  +     * @param message Message to be logged
  +     * @param throwable Associated exception
  +     */
  +    private void log(String message, Throwable throwable) {
  +
  +	Logger logger = null;
  +	if (context != null)
  +	    logger = context.getLogger();
  +	if (logger != null)
  +	    logger.log("ApplicationDispatcher[" + context.getPath() + "] "
  +		       + message, throwable);
  +	else {
  +	    System.out.println("ApplicationDispatcher[" + context.getPath()
  +			       + "]: " + message);
  +	    throwable.printStackTrace(System.out);
   	}
   
       }
  
  
  
  1.17      +12 -10    jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/StandardContext.java
  
  Index: StandardContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/StandardContext.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- StandardContext.java	2000/05/03 22:58:24	1.16
  +++ StandardContext.java	2000/05/05 05:59:08	1.17
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/StandardContext.java,v 1.16 2000/05/03 22:58:24 craigmcc Exp $
  - * $Revision: 1.16 $
  - * $Date: 2000/05/03 22:58:24 $
  + * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/StandardContext.java,v 1.17 2000/05/05 05:59:08 craigmcc Exp $
  + * $Revision: 1.17 $
  + * $Date: 2000/05/05 05:59:08 $
    *
    * ====================================================================
    *
  @@ -92,7 +92,7 @@
    * requests directed to a particular servlet.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.16 $ $Date: 2000/05/03 22:58:24 $
  + * @version $Revision: 1.17 $ $Date: 2000/05/05 05:59:08 $
    */
   
   public final class StandardContext
  @@ -1102,7 +1102,9 @@
   	    ((HttpServletRequest) request.getRequest()).getRequestURI();
   	String relativeURI = requestURI.substring(contextPath.length());
   	if (debug > 0)
  -	    log("Mapping relative URI '" + relativeURI + "'");
  +	    log("Mapping contextPath='" + contextPath +
  +		"' with requestURI='" + requestURI +
  +		"' and relativeURI='" + relativeURI + "'");
   
   	// Apply the standard request URI mapping rules from the specification
   	Wrapper wrapper = null;
  @@ -1129,19 +1131,19 @@
   		log("  Trying prefix match");
   	    servletPath = relativeURI;
   	    while (true) {
  -		int slash = servletPath.lastIndexOf("/");
  -		if (slash < 0)
  -		    break;
  -		servletPath = servletPath.substring(0, slash);
   		name = (String) servletMappings.get(servletPath + "/*");
   		if (name != null)
   		    wrapper = (Wrapper) findChild(name);
  -		if (wrapper != null) {
  + 		if (wrapper != null) {
   		    pathInfo = relativeURI.substring(servletPath.length());
   		    if (pathInfo.length() == 0)
   			pathInfo = null;
   		    break;
   		}
  +		int slash = servletPath.lastIndexOf("/");
  +		if (slash < 0)
  +		    break;
  +		servletPath = servletPath.substring(0, slash);
   	    }
   	}
   
  
  
  
  1.3       +9 -6      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.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- InvokerServlet.java	2000/05/01 21:08:53	1.2
  +++ InvokerServlet.java	2000/05/05 05:59:09	1.3
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/servlets/InvokerServlet.java,v 1.2 2000/05/01 21:08:53 craigmcc Exp $
  - * $Revision: 1.2 $
  - * $Date: 2000/05/01 21:08:53 $
  + * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/servlets/InvokerServlet.java,v 1.3 2000/05/05 05:59:09 craigmcc Exp $
  + * $Revision: 1.3 $
  + * $Date: 2000/05/05 05:59:09 $
    *
    * ====================================================================
    *
  @@ -97,7 +97,7 @@
    * in the web application deployment descriptor.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.2 $ $Date: 2000/05/01 21:08:53 $
  + * @version $Revision: 1.3 $ $Date: 2000/05/05 05:59:09 $
    */
   
   public final class InvokerServlet
  @@ -279,8 +279,11 @@
           }
   
   	// Pass this request on to the newly created wrapper
  -	String dispatcherPath =
  -	    request.getServletPath() + "/" + servletClass + pathInfo;
  +	StringBuffer sb = new StringBuffer(request.getServletPath());
  +	sb.append("/");
  +	sb.append(servletClass);
  +	sb.append(pathInfo);
  +	String dispatcherPath = sb.toString();
   	if (debug > 0)
   	    log("serveRequest:  Forwarding to '" + dispatcherPath + "'");
   	RequestDispatcher rd =