表單提交編碼及相關問題

2021-08-01 19:00:36 字數 2055 閱讀 6735

表單提交編碼即content-type,內容型別,是指定請求和響應的http內容型別。如果未指定 contenttype,預設為text/html。

text/html

文字方式的網頁檔案。

text/plain

窗體資料以純文字形式進行編碼,其中不含任何控制項或格式字元。空格轉換為 「+」 加號,但不對特殊字元編碼。

text/xml

文字方式的xml檔案,text/xml忽略xml頭所指定編碼格式而預設採用us-ascii編碼。

http協議大家都知道是規定了以ascii碼傳輸,建立在tcp、ip協議之上的應用層規範。

規範內容把http請求分為3個部分:狀態行,請求頭,請求體。

所有的方法、實現都是圍繞如何運用和組織這三部分來完成的。換句話來說就是萬變不離其中,只要我們了解了http請求的組成部分後,自然就可以應變任何實際工作中的需求和問題了。

我們的請求方式只有options、get、head、post、put、delete、trace等,既然http協議本身的原始方法不支援multipart/form-data請求,那這個請求自然就是由這些原始的方法演變而來的,具體如何演變且看下文:

1、multipart/form-data 的基礎方法是 post,也就是說是由post方法來組合實現的。

2、multipart/form-data 與 post 方法的不同之處:請求頭,請求體。

3、multipart/form-data 的請求頭必須包含乙個特殊的頭資訊:content-type,且其值也必須規定為 multipart/form-data,同 時還需要規定乙個內容分割符用於分割請求體中的多個post的內容,如檔案內容和文字內容自然需要分割開來,不然接收方就無 法正常解析和還原這個檔案了。

1.get方式

get方式提交的話,表單項都儲存在http header中,格式是

http://localhost:8080/hello.do?name1=value1&name2=value2這樣的字串。server端通過request.getparameter是可以取到值的。

name1=value1&name2=value2

3.post方式(enctype為multipart/form-data,多用於檔案上傳)

表單資料都儲存在http的正文部分,各個表單項之間用boundary隔開。格式類似於下面這樣:用request.getparameter是取不到資料的,這時需要通過request.getinputstream來取資料,不過取到的是個inputstream,所以無法直接獲取指定的表單項(需要自己對取到的流進行解析,才能得到表單項以及上傳的檔案內容等資訊)。這種需求屬於比較共通的功能,所以有很多開源的元件可以直接利用。比如:apache的fileupload元件,smartupload等。通過這些開源的upload元件提供的api,就可以直接從request中取得指定的表單項了。

「org.apache.commons.fileupload.fileuploadbase$invalidcontenttypeexception」該異常是表單上傳檔案時伺服器端通過普通方式request.getparameter()無法獲取檔案的原因。

解決辦法:

傳檔案就是form-data格式而不傳檔案就是x-www-form-unlencoded格式 通過提前使用request.getcontenttype()來判斷格式。

/** 

* 判斷是否是multipart/form-data請求

string contenttype = request.getcontenttype(); //獲取content-type

if((contenttype != null) && (contenttype.tolowercase().startswith("multipart/"))) else

}

表單提交相關問題

第一種情況 頁面大致結構 js function isread click function if true return false return true 第二種情況 頁面大致結構 js function fnsubmit if true return false return true 第三種...

ajax 提交及表單提交報錯

呼叫方法提交 function upload event,type datatype json timeout 2000,url uploadcom success function result else if result false error function 提交表單 zhaopinfor...

表單資料提交時的字元編碼問題

人老了,以前研究過的東西都忘記了。所以還是記錄下來比較好。廢話不說,url 翠花 url 上 如果你總是使用utf 8編碼,則基本不用為編碼問題傷腦筋。但是總有些時候,事情超出了你的掌控範圍。通常表單提交時將按照文件本身的編碼進行編碼。如果是乙個gb2312的文件,如何按照utf 8編碼提交呢?此外...