deniak wrote:
Actually, it's a POST request:
http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1

When I receive the request, I want to deal with an input stream.


David Smith-2 wrote:
Forgive me if I'm wrong, but this looks like the browser should send a GET request. Why would you expect an input stream?

--David


I believe there is some confusion here.
This is what I understand from the specs (the various relevant RFCs) :

1) the HTTP protocol supports several types of requests (verbs) from the client to the server. (This is what you specify in the "method" attribute of the <form> tag, and by default I believe it is GET).

- one type of request is a GET. This should be used for requests that merely *retrieve* information from the server, without changing anything on the server. In other words, several consecutive GETs to the server for the same thing should have the same result, and one GET should not influence the result of a subsequent GET. That is wat the RFCs call "idempotent". - another type of request is a POST. A POST should be used when the request may change things on the server. For example, you would use a POST to update a database record, or put some new data or new file onto the server, which will result in a subsequent GET or POST to retrieve possibly different data from the server.

(In the practice, you can get away with either one. But that is because usually servers are not picky between GETs and POSTs.)

2) separate and distinct from the above, is how your browser and html form send the <form> input field values to the server. - If your <form> specifies an attribute "enctype" of "application/x-www-form-urlencoded", then, as the name indicates, the form input field values are sent as part of the request URL.
Like "http://myhost/something?field1=value1&field2=value2..";
(and any character in the field values that is not iso-latin-1 should be encoded as a "%xx" substitute, and there is no way to specify a character set other than the default, and there may be a limit to the size of such a URI etc.. etc..) - if your form specifies an "enctype" of "multipart/form-data", then the form field values are not sent as part of the URL. Instead, the HTTP request to the server now will consist of a "header" and a "body". And the body will consist of a multi-part MIME-like body (much like an email), consisting of one part per form parameter. Each of these parts will have in turn a header and a body, the header containing header fields such a "Content-type" and "Content-length" etc.., and the body being the value of the form input field. That is much more "powerful", as it allows to send field values which are (theoretically) in different character sets, of unlimited size, zipped and whatnot. You can even send a whole file as a field, which is why the RFC quoted before mentions this specifically.

I further believe that the default, for a browser, if you do not specify an explicit "enctype" attribute in the <form> tag, is to send the request as "application/x-www-form-urlencoded". (I would not a-priori discount the possibility that some sub-version of Internet Explorer would do otherwise).


Now on the server side, something receives the HTTP request and decodes it.
Either this receiving side is smart enough to decode the request parameters (the form field values) and provide them to the application with one single interface, no matter how the request has been sent (as parts of the URL or as parts of the request body, or even both), or it is not.

If it is, then from within the application, you can issue calls like "var1 = HttpRequest.getParameter("field1")", and this will return the value of the form field, whether it was sent as part of the URL or as part of the request body. With luck, it may even be smart enough to handle character encoding matters too.

If it is not, then it falls to the application to check the request and determine if it should parse the request URL to get at the parameters, or read and parse the body (with something like an InputStream and some MIME-decoding logic) to get at the parameter values.

I honestly don't know how smart Tomcat is in that respect, but I guess it is smart enough to provide a smooth generic interface. (If you are using Apache and perl, that's what the CGI module does : no matter how the request is sent, you can get a form field value using the param("name") function. Your mileage may vary.)

But anyway, this is I believe the reason why, if the form specifies an 'enctype="application/x-www-form-urlencoded"' attribute, you would not find any request body to read with an InputStream.
And it probably has nothing to do with the Coyote connector.

André

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

Reply via email to