You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by lu...@apache.org on 2003/02/12 18:39:12 UTC

cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core ApplicationDispatcher.java ApplicationHttpRequest.java

luehe       2003/02/12 09:39:11

  Modified:    catalina/src/share/org/apache/catalina/core
                        ApplicationDispatcher.java
                        ApplicationHttpRequest.java
  Log:
  According to SRV.4.1.1 ("When Parameters Are Available"), post form
  data must be available to the servlet via the request object's input
  stream until the first call to a method of the "getParameter" family.
  
  Post form data used to be consumed from the input stream and added to
  the parameter set *before* any such method call.
  It is now read from the input stream as part of the method call.
  
  Revision  Changes    Path
  1.9       +5 -9      jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationDispatcher.java
  
  Index: ApplicationDispatcher.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationDispatcher.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- ApplicationDispatcher.java	29 Jan 2003 01:42:38 -0000	1.8
  +++ ApplicationDispatcher.java	12 Feb 2003 17:39:11 -0000	1.9
  @@ -466,11 +466,7 @@
               if (queryString != null) {
                   wrequest.setAttribute(Globals.FORWARD_QUERY_STRING_ATTR,
                                         queryString);
  -            }
  -            
  -            if (queryString != null) {
                   wrequest.setQueryString(queryString);
  -                wrequest.mergeParameters(queryString);
               }
   
               // only set the Dispatcher Type to Forward if it has not been set. It will have
  @@ -631,7 +627,7 @@
               if (queryString != null) {
                   wrequest.setAttribute(Globals.INCLUDE_QUERY_STRING_ATTR,
                                         queryString);
  -                wrequest.mergeParameters(queryString);
  +		wrequest.setQueryString(queryString);
               }
               
               wrequest.setAttribute(ApplicationFilterFactory.DISPATCHER_TYPE_ATTR,
  
  
  
  1.3       +74 -51    jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationHttpRequest.java
  
  Index: ApplicationHttpRequest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationHttpRequest.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ApplicationHttpRequest.java	17 Dec 2002 20:06:20 -0000	1.2
  +++ ApplicationHttpRequest.java	12 Feb 2003 17:39:11 -0000	1.3
  @@ -190,6 +190,12 @@
           StringManager.getManager(Constants.Package);
   
   
  +    /**
  +     * Have the parameters for this request already been parsed?
  +     */
  +    private boolean parsedParams = false;
  +
  +
       // ------------------------------------------------- ServletRequest Methods
   
   
  @@ -276,6 +282,7 @@
        */
       public String getParameter(String name) {
   
  +	parseParameters();
           synchronized (parameters) {
               Object value = parameters.get(name);
               if (value == null)
  @@ -297,6 +304,7 @@
        */
       public Map getParameterMap() {
   
  +	parseParameters();
           return (parameters);
   
       }
  @@ -308,6 +316,7 @@
        */
       public Enumeration getParameterNames() {
   
  +	parseParameters();
           synchronized (parameters) {
               return (new Enumerator(parameters.keySet()));
           }
  @@ -323,6 +332,7 @@
        */
       public String[] getParameterValues(String name) {
   
  +	parseParameters();
           synchronized (parameters) {
               Object value = parameters.get(name);
               if (value == null)
  @@ -389,7 +399,6 @@
       // -------------------------------------------------------- Package Methods
   
   
  -
       /**
        * Return descriptive information about this implementation.
        */
  @@ -423,47 +432,6 @@
   
   
       /**
  -     * Merge the parameters from the specified query string (if any), and
  -     * the parameters already present on this request (if any), such that
  -     * the parameter values from the query string show up first if there are
  -     * duplicate parameter names.
  -     *
  -     * @param queryString The query string containing parameters to be merged
  -     */
  -    void mergeParameters(String queryString) {
  -
  -        if ((queryString == null) || (queryString.length() < 1))
  -            return;
  -
  -        HashMap queryParameters = new HashMap();
  -        String encoding = getCharacterEncoding();
  -        if (encoding == null)
  -            encoding = "ISO-8859-1";
  -        try {
  -            RequestUtil.parseParameters
  -                (queryParameters, queryString, encoding);
  -        } catch (Exception e) {
  -            ;
  -        }
  -        synchronized (parameters) {
  -            Iterator keys = parameters.keySet().iterator();
  -            while (keys.hasNext()) {
  -                String key = (String) keys.next();
  -                Object value = queryParameters.get(key);
  -                if (value == null) {
  -                    queryParameters.put(key, parameters.get(key));
  -                    continue;
  -                }
  -                queryParameters.put
  -                    (key, mergeValues(value, parameters.get(key)));
  -            }
  -            parameters = queryParameters;
  -        }
  -
  -    }
  -
  -
  -    /**
        * Set the context path for this request.
        *
        * @param contextPath The new context path
  @@ -522,11 +490,6 @@
               }
           }
   
  -        // Initialize the parameters for this request
  -        synchronized (parameters) {
  -            parameters = copyMap(request.getParameterMap());
  -        }
  -
           // Initialize the path elements for this request
           contextPath = request.getContextPath();
           pathInfo = request.getPathInfo();
  @@ -561,6 +524,26 @@
       }
   
   
  +    /**
  +     * Parses the parameters of this request.
  +     *
  +     * If parameters are present in both the query string and the request
  +     * content, they are merged.
  +     */
  +    void parseParameters() {
  +
  +	if (parsedParams) {
  +	    return;
  +	}
  +
  +        synchronized (parameters) {
  +            parameters = copyMap(getRequest().getParameterMap());
  +	    mergeParameters();
  +	    parsedParams = true;
  +        }
  +    }
  +
  +
       // ------------------------------------------------------ Protected Methods
   
   
  @@ -619,4 +602,44 @@
       }
   
   
  +    // ------------------------------------------------------ Private Methods
  +
  +
  +    /**
  +     * Merge the parameters from the saved query parameter string (if any), and
  +     * the parameters already present on this request (if any), such that the
  +     * parameter values from the query string show up first if there are
  +     * duplicate parameter names.
  +     */
  +    private void mergeParameters() {
  +
  +        if ((queryString == null) || (queryString.length() < 1))
  +            return;
  +
  +        HashMap queryParameters = new HashMap();
  +        String encoding = getCharacterEncoding();
  +        if (encoding == null)
  +            encoding = "ISO-8859-1";
  +        try {
  +            RequestUtil.parseParameters
  +                (queryParameters, queryString, encoding);
  +        } catch (Exception e) {
  +            ;
  +        }
  +        synchronized (parameters) {
  +            Iterator keys = parameters.keySet().iterator();
  +            while (keys.hasNext()) {
  +                String key = (String) keys.next();
  +                Object value = queryParameters.get(key);
  +                if (value == null) {
  +                    queryParameters.put(key, parameters.get(key));
  +                    continue;
  +                }
  +                queryParameters.put
  +                    (key, mergeValues(value, parameters.get(key)));
  +            }
  +            parameters = queryParameters;
  +        }
  +
  +    }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org