http頭部content-type與資料格式
阿新 • • 發佈:2018-12-26
http 頭部中的 content-type 和我們傳遞的資料是息息相關的,不同的取值,伺服器解析處理方式不同,
介紹一下幾種常見的方式
text/plain:ajax預設方式,將檔案設定為純文字的形式,瀏覽器在獲取到這種檔案時並不會對其進行處理(最原始的流)
application/x-www-form-urlencoded : form表單預設的方式,在$.ajax中如果未設定contentType預設也會以這種方式, 在servlet中的把對應的key、value進行相應的處理新增到Map中,所有才能通過request.getParameter()獲取,在servlet中的request.getParameter()只能取到 在url 後面的引數與 這種方式提交的資料,
注意: 這種方式傳遞的資料千萬不能亂用JSON.Stringify()格式化,只能傳入原始物件(LZ開始就犯了這樣的錯,導致取不到值)
multipart/form-data :多用於檔案上傳,html5伴隨出現的formdata 也正用於此(支援普通表單、檔案上傳,若是傳檔案則伺服器採用特有formdata的解析方式),傳遞的時候通過流的形式,資料包的格式也有所不同var info={ "name":"yhy", age:22 } $.ajax({ url: 'ddds' , type: 'post', data: info, async: true, dataType:'json', success: function (data,state) { }, error: function (data,state) { } , });
注意:這裡 傳入的資料必須格式化JSON.stringify(),不能直接傳入原始物件,servlet中解析的時候通過讀流的方式(不包含formdata格式)
application/json :這是現在比較常用的方式,在傳送資料之前需格式化資料JSON.stringify(),確保格式的正確性,伺服器解析方式和上面第二種一樣,先獲取json字串在轉為JSON物件StringBuffer json = new StringBuffer(); String line = null; try{ BufferedReader reader = request.getReader(); while((line=reader.readLine())!=null){ json.append(line); } } catch(Exception e){ System.out.println(e.toString()); } System.out.println(json.toString());
y
資料傳輸通過chrom開發工具可獲取到的資料
1、get方式,會在url後面新增引數,並在包含在 Query String parameters
2、post方式
a、form-data, 這種設定conten-type為application/x-www-form-urlencoded ,servlet 中可通過request.getParameter()獲取
b、Request-Payload,通過輸入流來獲取,在上面已介紹。