最近在做網頁時遇到了一些坑,對於http協議沒有深入了解,以及對httpservletrequest類的理解尚淺,造成一些困擾,分析下請求型別,取值的方法四種常見的 post 提交資料方式值描述
在傳送前編碼所有字元(預設)
multipart/form-data
不對字元編碼。在使用包含檔案上傳控制項的表單時,必須使用該值
作為請求頭告訴服務端訊息主體是序列化的json字串。除低版本的ie,基本都支援
text/plain
空格轉換為 「+」 加號,但不對特殊字元編碼
http 協議是以 ascii 碼傳輸。他是建立在 tcp/ip 協議之上的應用層規範, 規定http 請求分為三個部分:
post型別請求時,其你去引數放在entity-body中,服務端通常是根據請求頭(headers)中的content-type 欄位來獲知請求中的訊息主體是用何種方式編碼,再對主體進行解析。所以 post 提交資料報含了 content-type 和訊息主體編碼方式兩部分
• 瀏覽器預設提交資料的方式;提交的資料按照 key1=val1&key2=val2 的方式進行編碼,key 和 val 都進行了 url 轉碼。
• 通過debug可以看到此時request是requestfacade
也可以使用@requestbody獲取key1=val1&key2=val2 編碼方式的請求資料
@requestbody和@requestparam可以混合使用,但不建議這麼做
值得注意:request請求體只能讀取一次
2. multipart/form-data
一種常見的post方式表單上傳檔案的方式,必須將 form 表單的資料 enctype 設為 multipart/form-data。
對於服務端處理接受的檔案,目前掌握的以下兩種:
a. 使用org.apache.commons.fileupload依賴包
}b. 使用spring註解獲取引數
("/upload"
)@responsebody
public string upload
(@requestpart
("file"
) multipartfile file)
string filename = file.
getoriginalfilename()
; string filepath =
"儲存檔案的位址"
; file dest =
newfile
(filepath + filename)
;try
catch
(ioexception e)
return
"上傳失敗!";}
public
void test
public
static string readlinestring
(servletinputstream in,string encodeing)
throws ioexception
}while
(result !=-1
);// loop only if the buffer was filled
if(sbuf.
length()
==0)return sbuf.
tostring()
;}
(value =
"/user"
, method = requestmethod.post, consumes =
)public responseentity
killquery
(@requestbody user user)
注意接收時必須用@requestbody來修飾接收到的post body內的物件。
• 傳送
(value =
"/user/"
, method = requestmethod.get, produces=
)@responsebody
public user getuser
(@pathvariable string userid, model model)
4. text/xml
xml 作為編碼方式的遠端呼叫規範
5. 總結參考:
四種常見的 post 提交資料方式
前端小白 web前端ajax請求
本文主要介紹web前端發起ajax請求,動態新增新資料。html頁面的js ajax 請求路徑 datatype json 資料型別 async true,請求是否非同步,預設為非同步,這也是ajax重要特性 success function res error function res ajax ...
表單前端驗證 ajax非同步請求
今天做了乙個登錄檔單的各個欄位的前端的驗證,感覺能用,但不知道還有沒有更好的方法,特別是阻止表單提交那塊,用了4個變數,感覺有點麻煩,明天要後台驗證,用到正規表示式,之前沒用過,又可以嘗試新的東西了 function else if phone attr value length 11 else 非...
ajax請求時前端報400
報錯資訊 bad request the browser or proxy sent a request that this server could not understand.post請求 引數是否一致 post請求 引數型別是否一致 例如上圖 uuid和user都是必填項,值傳遞乙個引數肯定...