參考:http://blog.csdn.net/clam_clam/article/details/6570539html
咱們常常用servlet和jsp, 常常用request.getParameter() 來獲得數據。python
request.getParameter()
request.getInputStream()
request.getReader()
這三個方法都是從request對象中獲得提交的數據,可是用途不一樣。jquery
要根據<form>表單提交數據的編碼方式選擇不一樣的方法。ajax
HTML中的form表單的一個關鍵屬性 enctype:json
1. enctype=application/x- www-form-urlencoded瀏覽器
這種編碼方式是默認的編碼方式。緩存
編碼後的結果一般是field1=value2&field2=value2&… 的形式,如 name=aaaa&password=bbbb。服務器
一般使用的表單也是採用這種方式編碼的,Servlet 的 API 提供了對這種 編碼方式解碼的支持,只須要調用 ServletRequest 類中的 getParameter()方法就能夠獲得用戶表單中的字段和數據。app
不足:dom
這種編碼方式( application/x-www-form-urlencoded )雖然簡單,但對於傳輸大塊的二進制數據顯得力不從心。
2. 對於傳輸大塊的二進制數這類數據,瀏覽器採用了另外一種編碼方式,即 "multipart/form-data" 的編碼方式:
瀏覽器能夠很容易將表單內的數據和文件放在一塊兒發送。這種編碼方式先定義好一個不可能在數據中出現的字符串做爲 分界符,而後用它將各個數據段分開,而對於每一個數據段都對應着 HTML 頁面表單中的一個 Input 區,包括一個 content-disposition 屬性,說明了這個數據段的一些信息,若是這個數據段的內容是一個文件,還會有 Content-Type 屬性,而後就是數據自己,若是以這種方式提交數據就要用request.getInputStream()或request.getReader()獲得 提交的數據,用 request.getParameter()是得不到提交的數據的。
3.須要注意的是:
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()在同一個響應中是不能混合使用的,若是混合使用就會拋異常。
如:
(uname 打印的值爲: uame:null) .
(note :
本人最近作一個項目居然還用jbstring.split("&");jbstring1.split("=");的方法把裏面的name 和password 等一串值單讀出來真是笨死了。
頁面端傳遞數據方式爲:
注意jquery 中的datatype 指的是預期服務器返回的數據類型。 而不是發送的數據類型。如:
而從sevlet 獲得的字符串是(request.getReader())爲:
(uname=aptech1&password=123456&passwordconf=123456&mobile=13277042784&verifycode=0489&domain=163.com&version=regvf1)
不是json 字符串格式。因此 Jquery .ajax {datatype:} 只是服務器返回來的數據類型不要覺得datatype:json 就覺得他也是以json 數據格式發送。
若是不指定,jQuery 將自動根據 HTTP 包 MIME 信息來智能判斷,好比XML MIME類型就被識別爲XML。在1.4中,JSON就會生成一個JavaScript對象,而script則會執行這個腳本。隨後服務器端返回的數據會根據這個值解析後,傳遞給回調函數。可用值:
"xml": 返回 XML 文檔,可用 jQuery 處理。
"html": 返回純文本 HTML 信息;包含的script標籤會在插入dom時執行。
"script": 返回純文本 JavaScript 代碼。不會自動緩存結果。除非設置了"cache"參數。'''注意:'''在遠程請求時(不在同一個域下),全部POST請求都將轉爲GET請求。(由於將使用DOM的script標籤來加載)
"json": 返回 JSON 數據 。
"jsonp": JSONP 格式。使用 JSONP 形式調用函數時,如 "myurl?callback=?" jQuery 將自動替換 ? 爲正確的函數名,以執行回調函數。
"text": 返回純文本字符串
)