Hi,
I posted this email in tomcat users list, but no one there could
really help me. So, I decided to post it here in the developers list
because I think there is a problem with tomcat code and maybe a
developer would help me better. I am sorry if I am incovenient in any way.
Here is my problem:
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]