關於Content-Type中application/x-www-form-urlencoded 和 multipart/form-data的區別及用法

1、表單

在Form元素的語法中,EncType代表提交數據的格式 用 Enctype 屬性指定將數據回發到服務器時瀏覽器使用的編碼類型。 例如: application/x-www-form-urlencoded: 窗體數據被編碼爲名稱/值對。這是標準的編碼格式。 multipart/form-data: 窗體數據被編碼爲一條消息,頁上的每一個控件對應消息中的一個部分,這個通常文件上傳時用。 text/plain: 窗體數據以純文本形式進行編碼,其中不含任何控件或格式字符。
瀏覽器

2、Form表單語法

在Form元素的語法中,EncType代表提交數據的格式 用 Enctype 屬性指定將數據回發到服務器時瀏覽器使用的編碼類型。 例如: application/x-www-form-urlencoded: 窗體數據被編碼爲名稱/值對。這是標準的編碼格式。 multipart/form-data: 窗體數據被編碼爲一條消息,頁上的每一個控件對應消息中的一個部分,這個通常文件上傳時用。 text/plain: 窗體數據以純文本形式進行編碼,其中不含任何控件或格式字符。 
補充
服務器

3、經常使用的編碼方式

form的enctype屬性爲編碼方式,經常使用有兩種:application/x-www-form-urlencoded和multipart/form-data,默認爲application/x-www-form-urlencoded。app

1.x-www-form-urlencoded

當action爲get時候,瀏覽器用x-www-form-urlencoded的編碼方式把form數據轉換成一個字串(name1=value1&name2=value2…),而後把這個字串append到url後面,用?分割,加載這個新的url。post

2.multipart/form-data

當action爲post時候,瀏覽器把form數據封裝到http body中,而後發送到server。 若是沒有type=file的控件,用默認的application/x-www-form-urlencoded就能夠了。 可是若是有type=file的話,就要用到multipart/form-data了。瀏覽器會把整個表單以控件爲單位分割,併爲每一個部分加上Content-Disposition(form-data或者file),Content-Type(默認爲text/plain),name(控件name)等信息,並加上分割符(boundary)。編碼

 

每一段------WebKitFormBoundaryh2rFWhmmPZSuKvgf--爲對應一部分消息url

enctype="multipart/form-data"是上傳二進制數據;它告訴咱們傳輸的數據要用到多媒體傳輸協議,因爲多媒體傳輸的都是大量的數據,因此規定上傳文件必須是post方法,<input>的type屬性必須是file。form裏面的input的值以2進制的方式傳過去,因此request就得不到值了。傳輸到你的servlet裏是二進制數據,包括那個title,因此你用request.getParameter("title")是得不到值的,必須把數據再換爲String的。而struts2裏就能夠了,由於它自動給你轉換了。spa

相關文章
相關標籤/搜索