1. 程式人生 > >http get或者post請求獲取引數

http get或者post請求獲取引數

http://www.cnblogs.com/xiancheng/p/5524338.html

1.getQueryString()

只適用於GET,比如客戶端傳送http://localhost/testServlet?a=b&c=d&e=f,通過request.getQueryString()得到的是a=b&c=d&e=f.

2.getParameter()

GET和POST都可以使用
但如果是POST請求要根據<form>表單提交資料的編碼方式來確定能否使用.
當編碼方式是(application/x- www-form-urlencoded)時才能使用.
這種編碼方式(application/x-www-form-urlencoded)雖然簡單,但對於傳輸大塊的二進位制資料顯得力不從心.


對於傳輸大塊的二進位制數這類資料,瀏覽器採用了另一種編碼方式("multipart/form-data"),這時就需要使用下面的兩種方法.

3.getInputStream()
4.getReader()
上面兩種方法獲取的是Http請求包的包體,因為GET方式請求一般不包含包體.所以上面兩種方法一般用於POST請求獲取引數.

需要注意的是:
request.getParameter()、 request.getInputStream()、request.getReader()這三種方法是有衝突的,因為流只能被讀一次。

比如:
當form表單內容採用 enctype=application/x-www-form-urlencoded編碼時,先通過呼叫request.getParameter()方法得到引數後,


再呼叫request.getInputStream()或request.getReader()已經得不到流中的內容,
因為在呼叫 request.getParameter()時系統可能對錶單中提交的資料以流的形式讀了一次,反之亦然。

當form表單內容採用 enctype=multipart/form-data編碼時,即使先呼叫request.getParameter()也得不到資料,
所以這時呼叫request.getParameter()方法對 request.getInputStream()或request.getReader()沒有衝突,
即使已經呼叫了 request.getParameter()方法也可以通過呼叫request.getInputStream()或request.getReader()得到表單中的資料,


而request.getInputStream()和request.getReader()在同一個響應中是不能混合使用的,如果混合使用就會拋異常。