I. Basic knowledge about HTTP upload
In the form Element syntax, enctype indicates the encoding type used by the browser when the data is sent back to the server using the enctype attribute. Application/X-WWW-form-urlencoded: the form data is encoded as a name/value pair. This is the standard encoding format. Multipart/form-data: the form data is encoded as a message. Each control on the page corresponds to a part of the message. Text/plain: the form data is encoded in plain text format, which does not contain any controls or format characters.
Supplement
The enctype attribute of form is encoded in two ways: Application/X-WWW-form-urlencoded and multipart/form-data, the default value is application/X-WWW-form-urlencoded.
When the action is get, the browser uses the X-WWW-form-urlencoded encoding method to convert form data into a string (name1 = value1 & amp; name2 = value2 ...), then append the string to the end of the URL, using? Load the new URL.
When the action is post, the browser encapsulates form data into the HTTP body and sends it to the server.
If there is no type = file control, use the default application/X-WWW-form-urlencoded. However, if type = file exists, you need to use multipart/form-data. The browser splits the entire form into controls and adds content-disposition (Form-data or file) and Content-Type (text/plain by default) to each part ), name (Control name) and other information, plus the delimiter (Boundary ).
2. Notes for use
When Ajax uploads data to the server, the Content-Type is set to application/X-WWW-form-urlencoded, and the entire sent content is encoded, it does not encode the value corresponding to the name. Therefore, on the server side, the request. getparameter ("name") method is incorrect.
There are two solutions:
1) Change the server side: Use stream-based hard Encoding
Inputstream stream = request. getinputstream ();
Inputstreamreader ISR = new inputstreamreader (Stream );
Bufferedreader BR = new bufferedreader (ISR );
String STR = Br. Readline ();
System. Out. println (STR );
STR = urldecoder. Decode (STR, "gb2312 ");
System. Out. println (STR );
BR. Close ();
2) Change the client: change the data sending Structure
When sending data to the server, use name = escape (value) to group
In the server code, the value obtained through request. getparameter ("name") does not need to be encoded.