Do you do any request processing before invoking request.getParameter in
your servlet (e.g. getting and reading the input stream)?  Do you use
any filters in your web app?

ND

-----Original Message-----
From: Jair da Silva Ferreira Jr [mailto:[EMAIL PROTECTED] 
Sent: Thursday, January 19, 2006 11: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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to