文件的上傳
1、怎樣獲取請求消息中的實體內容?
借助流的操作。用()或者()取決于讀取請求消息中發來的實體內容。
(1)通過調用() 獲取字節的輸入流,和請求消息中的實體內容相關聯。一讀一寫,中間沒有任何處理的情況下,用()。
(2)()獲取字符的數輸入流,用于返回一個代表實體內容的對象,返回的對象將實體內容中的字節數據按照請求消息中指定的字符集編碼轉換成文本字符串。
(3)在調用方法之前,可以調用的方法指定其返回的對象所使用的字符集編碼。
2、分析文件上傳的請求消息結構:
課上老師講的代碼及分析如下:
3、獲取參數的代碼和界面如下:
通過上傳一個文件,可獲取到的信息如下:
這是表中的第一個參數值
這是結束的分割線,表示內容結束了。
這是上傳的文件的名字。
4、讀取實體內容時可能出錯的一種代碼:
sis = .();
= ().("/body.out");
fos = new ();
int = .();
byte[] buf = new byte[];
for(int =0,=0; < ;
+= )
{
= sis.read(buf,,-);
}
fos.write(buf,0,);
fos.close();
sis.close();
11,10,20
請求參數的中文亂碼問題
1、出現404錯誤:說明找不到資源,看看映射是否正確。
出現異常:說明代碼有問題。
2、響應消息:中文正確的顯示:
響應消息發送回客戶端,
響應頭字段 ,用.("","")設置響應消息的頭字段;。
Html文檔設置響應消息頭字段,用meta標簽,它有一個屬性是http-equiv設置頭字段。 =utf-8,編碼方式;
***了解中文字符的URL編碼:
瀏覽器對請求參數中的字符(中國)的某種字符集編碼(utf-8)進行了url編碼
把請求信息發送到web服務器
web服務器先要從請求消息中把每一個參數名和參數值分離出來。
web服務器需要對每一個參數名和參數值進行url解碼,也需要針對某種字符集編碼進行url解碼--------字節數組----------按照某種字符集編碼(utf-8)進行編碼。
亂碼問題,代碼如下:
***瀏覽器怎樣進行URL編碼:
(1)瀏覽器對FORM表單中輸入的中文字符都會進行URL編碼后再傳送給WEB服務器。
(2)對于頁面中的FORM表單中輸入的內容,瀏覽器將按照當前顯示頁面時所采用的字符集編碼來進行URL編碼。
***方法的中文問題:
(1)等方法在讀取的參數信息時瀏覽器請求中文參數亂碼的問題,需要進行URL解碼。
(2)對于HTTP請求消息的請求行中的URL地址后的參數,等方法進行URL解碼時所采用的字符集編碼在規范中沒有明確規定中的對象的等方法默認采用-1字符集編碼進行URL解碼,因此無法返回正確的中文參數信息 。
(3)對于POST方式下的“/x-www-form-”編碼格式的實體內容,等方法以對象的()方法返回的字符集編碼對其進行URL解碼。
(4)()方法的返回值通常為null,對于這種情況,對象的等方法將使用默認的-1字符集編碼對實體內容中的參數進行URL解碼,因此也將無法返回正確的中文參數信息。
(5)接口中定義了一個方法來設置請求消息中的實體內容的字符集編碼名稱瀏覽器請求中文參數亂碼的問題,方法將以該方法設置的字符集編碼對實體內容進行URL解碼。
(6)方法設置的是請求消息中的實體內容的字符集編碼名稱,它只影響方法對POST方式下的“/x-www-form-”編碼格式的實體內容進行URL解碼的結果,而不能影響方法對HTTP請求消息的請求行中的URL地址后的參數進行URL解碼的結果。