tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From fsaa <frankste...@yahoo.com>
Subject Re: problem with lost request parameters
Date Wed, 27 Sep 2006 21:34:20 GMT

Hi, Jair!

I experienced a similar trouble and in my case the cause was that there was
an INPUT field whose NAME attribute contained non-ascii characters. Then, I
removed those characters and the problem was solved. So, try this solution
and please let me know about the result.

regards
fsaa.



Jair da Silva Ferreira Jr wrote:
> 
> Hi,
>     I changed all my forms to method GET and the problem disappeared. 
> So, I think there might be a problem with post form data processing in 
> tomcat 5.5.15.
>     I can't keep my forms in GET method because some of them submit the 
> user password.
>     Any new ideas to solve the problem?
> 
> Thanks,
>     Jair Jr
> 
> Jair da Silva Ferreira Jr escreveu:
> 
>> Hi,
>>    Thank you for your reply.
>>    Yes, I thought about that, but using the "get" method would append 
>> the form parameters in the URL. As this is a login form, the user 
>> password would be displayed in the URI. So, I must use the "post" 
>> method for security reasons.
>>    Any other ideas?
>>
>> Thanks,
>>    Jair Jr
>>
>> McClure, James escreveu:
>>
>>>> I have already tried the following:
>>>>   
>>>
>>>
>>> I agree that this could be caused by encoding issues; as you have
>>> already attempted to change in order to rectify the situation. 
>>> Just an idea...  Have you tried changing the method type to "get" and
>>> losing the encoding type?  The name/value pairs (form data set) for your
>>> data in the form submission are assembled differently depending on which
>>> method you choose (see HTML 4.0 spec).
>>>
>>>
>>> james
>>> -----Original Message-----
>>> From: Jair da Silva Ferreira Jr [mailto:j2@amazon.com.br] Sent: 
>>> Thursday, January 19, 2006 10:26 AM
>>> To: users@tomcat.apache.org
>>> Subject: problem with lost request parameters
>>>
>>> Hi,
>>>    I have my web application hosted at brazilian Locaweb. It runs on 
>>> a Linux as40-32bits server with tomcat 5.5.15 and java 5. My 
>>> application runs with many (I don't know exactly how many) others in 
>>> the same tomcat
>>>
>>> server. My application uses postgresql 8 database, hibernate 2.1.7c, 
>>> servlet 2.4, jsp 2.0, jstl 1.1 and tiles without struts.
>>>
>>>    My problem is that I can't get the request parameters submitted by 
>>> some of my users. My form uses the post method to submit its data. 
>>> When I call request.getParameter("validationScheme") in my servlet I 
>>> get null. request.getParametersNames() also returns an empty 
>>> Enumeration. My
>>>
>>> servlet then throws a ServletException because it can't find a mandatory
>>>
>>> parameter. I have never experienced this problem in forms that use 
>>> the "get" method to submit its data. My form has few parameters, they 
>>> are: validationScheme (hidden), email and password. It is a simple 
>>> login form. Here is the relevant html code for my form:
>>>   <form action="<c:url value="v.servlet"/>" method="post" 
>>> style="margin:0"
>>>
>>> enctype="application/x-www-form-urlencoded" accept-charset="ISO-8859-1">
>>>    <table width="153"  border="0" cellspacing="2" cellpadding="0">
>>>        <tr align="left">
>>>        <td width="30%" class="textologin" 
>>> align="right"><strong>e-mail</strong></td>
>>>        <td width="70%"><input name="email" type="text" class="combos"

>>> size="17" maxlength="50"></td>
>>>        </tr>
>>>        <tr align="left">
>>>        <td width="30%" class="textologin" 
>>> align="right"><strong>senha</strong></td>
>>>        <td width="70%"><input name="password" type="password" 
>>> class="combos" size="10">
>>>        <input name="validationScheme" type="hidden" value="loginUsual">
>>>        <input type="submit" value="ok" class="botaook"></td>
>>>        </tr>
>>>    </table>
>>>    </form>
>>>
>>>    I have already tried the following:
>>>       - adding <%@ page contentType="text/html; charset=ISO-8859-1" 
>>> %> declaration in all my jsp pages;
>>>       - adding  <form ... enctype="application/x-www-form-urlencoded" 
>>> accept-charset="ISO-8859-1"> attributes in all my html forms;
>>>       - adding <meta http-equiv="Content-Type" content="text/html; 
>>> charset=ISO-8859-1"> in all my jsp and html pages;
>>>       - adding a filter that sets the request character encoding to 
>>> ISO-8859-1 (request.setCharacterEncoding("ISO-8859-1")). This filter 
>>> is executed for every jsp and servlet in my application;
>>>       - searched the web for "tomcat lost request parameter" and 
>>> "tomcat lose request parameter" using google and found nothing that 
>>> could help me;
>>>
>>>    I asked the support people from Locaweb to execute tcpdump while 
>>> my user tried to submit the form. tcpdump results showed that the 
>>> request parameters are getting to tomcat correctly. So, I think that 
>>> tomcat is losing these parameters for some reason that I don't 
>>> understand.
>>>
>>>    I also noticed that these errors don't happen to all of my users, 
>>> but when it happens to a specific user, it can be easily reproduced 
>>> by that user. Unfortunately, I have never been able to reproduce the 
>>> error in my machines.
>>>
>>>    Here is some user information logged by my error page when the 
>>> problem happens:
>>> =======
>>> user 1
>>> =======
>>> Thu Jan 19 11:45:05 BRST 2006
>>> Request that failed: /v.servlet
>>> Status code: 500
>>> Protocol: HTTP/1.0
>>> Remote Address: 201.9.198.113
>>> Remote Host: 201.9.198.113
>>> Remote Port: 0
>>> Local Address:
>>> Local Name: www.dvdfilme.com.br
>>> Local Port: 80
>>> Server Name: www.dvdfilme.com.br
>>> Server Port: 80
>>> User Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; 
>>> FunWebProducts)
>>> Request Character Encoding: ISO-8859-1
>>> Request Content-type: application/x-www-form-urlencoded
>>> Response Character Encoding: ISO-8859-1
>>> Response Content-type: text/html
>>> Request Locale: pt_BR
>>> Response Locale: pt_BR
>>> Throwable: javax.servlet.ServletException: 'validationScheme' request 
>>> parameter not found
>>> .... (exception stack trace)
>>> request parameters: {}
>>>
>>> =======
>>> user 2
>>> =======
>>> Thu Jan 19 12:13:37 BRST 2006
>>> Request that failed: /v.servlet
>>> Status code: 500
>>> Protocol: HTTP/1.1
>>> Remote Address: 201.29.118.23
>>> Remote Host: 201.29.118.23
>>> Remote Port: 0
>>> Local Address:
>>> Local Name: www.dvdfilme.com.br
>>> Local Port: 80
>>> Server Name: www.dvdfilme.com.br
>>> Server Port: 80
>>> User Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
>>> Request Character Encoding: ISO-8859-1
>>> Request Content-type: application/x-www-form-urlencoded
>>> Response Character Encoding: ISO-8859-1
>>> Response Content-type: text/html
>>> Request Locale: pt_BR
>>> Response Locale: pt_BR
>>> Throwable: javax.servlet.ServletException: 'validationScheme' request 
>>> parameter not found
>>> .... (exception stack trace)
>>> request parameters: {}
>>>
>>>    I also looked at tomcat 5.5.15 source code, class 
>>> org.apache.coyote.tomcat4.CoyoteRequest, method parseRequestParameters()
>>>
>>> and noticed that expections (Throwable) are "swallowed" in request 
>>> parameter processing. So, I think that if any problem happens during 
>>> this process, the code will silently ignore the request parameter. I 
>>> also think that this is what is happening in my case. Here is the 
>>> relevant part of the code:
>>>
>>>    /**
>>>     * Parse request parameters.
>>>     */
>>>    protected void parseRequestParameters() {
>>>        ....
>>>        int len = getContentLength();
>>>
>>>        if (len > 0) {
>>>            try {
>>>                byte[] formData = null;
>>>                if (len < CACHED_POST_LEN) {
>>>                    if (postData == null)
>>>                        postData = new byte[CACHED_POST_LEN];
>>>                    formData = postData;
>>>                } else {
>>>                    formData = new byte[len];
>>>                }
>>>                int actualLen = readPostBody(formData, len);
>>>                if (actualLen == len) {
>>>                    parameters.processParameters(formData, 0, len);
>>>                }
>>>            } catch (Throwable t) {
>>>                ; // Ignore
>>>            }
>>>        }
>>>    }
>>>
>>>    Please, is there anything else I can do to fix this problem? Do 
>>> you have any ideas to help me? Any help would be really appreciated.
>>>    Thank you very much for your help.
>>>
>>> Thanks,
>>>    Jair Jr
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
>>> For additional commands, e-mail: users-help@tomcat.apache.org
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
>>> For additional commands, e-mail: users-help@tomcat.apache.org
>>>
>>>
>>>
>>>  
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
>> For additional commands, e-mail: users-help@tomcat.apache.org
>>
>>
>>
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: users-help@tomcat.apache.org
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/problem-with-lost-request-parameters-tf954370.html#a6535728
Sent from the Tomcat - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message