1. 程式人生 > >我遇到的jsp表單提交亂碼問題

我遇到的jsp表單提交亂碼問題

jsp表單以get方式提交不出現亂碼,以post方式提交出現了亂碼。

el.jsp檔案主要程式碼如下:


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

del.jsp程式碼如下:


get方式提交時資料直接接在url位址列之後,在del.jsp中寫不寫request.setCharacterEncoding("utf-8");都不會出現亂碼。

但是把提交方式換成post提交後,request.getParameter("name");就出現了亂碼。細思jsp表單提交的執行原理,客戶端的請求某jsp檔案,伺服器將jsp檔案以pageEncoding編碼方式(使用者可設定)將jsp檔案轉變成servlet檔案,然後在轉成位元組碼檔案(使用者不可設定),最後在執行位元組碼檔案以charset設定的編碼方式展現給客戶端。

按照這個思路,第一步:我把請求頁面el.jsp的pageEncoding設為utf-8,讓容器以utf-8的編碼方式將其轉變為servlet檔案,我去檢視el_servlet.java,


因為我的java檔案裡的漢字不是亂碼,我也沒設定其他編碼方式,所以容器以我設定的pageEncoding方式(utf-8)將jsp檔案轉換成java檔案,。

至於容器將該java檔案以**編碼方式變成位元組碼檔案我不管,反正最後它都會**解碼然後以我設定的charset方式展現,charset就是 response.setContentType("text/html; charset=utf-8");,伺服器對客戶端的響應編碼為utf-8。最後el.jsp執行後如下:


沒問題,沒亂碼,但是我點提交後結果如下:

是個亂碼!

第二步:我就去檢視我提交的頁面del.jsp,看看容器是怎麼幫我轉的啊(這時del.jsp中並未設定request.setCharacterEncoding("utf-8"))?我明明設定pageEncoding和Charset都是utf-8了啊,想想pageEncoding和Charset只是將del.jsp以utf轉成java檔案後再編譯成class檔案最後在變成utf-8格式,del.jsp載入到顯示整個過程(utf-8)是以什麼編碼進去就以什麼編碼出來,是完整的。但是對於el.jsp表單的提交請求並沒有設定以什麼編碼方式提交,也只有這個過程是會導致亂碼問題了。因為請求的編碼格式和del.jsp的編碼格式不一,造成了亂碼,所以在del.jsp加上request.setCharacterEncoding("utf-8"),


提交,但是還是出現亂碼,我納悶了,又去翻看del_servlet.java,這一看我笑了,


很明顯嘛!我request.setCharacterEncoding("utf-8")設定的位置不對,這一句應該設定在最前面!


然後在回頭看del_servlet.java


這句request.setCharacterEncoding("utf-8");的位置發生了改變,在資料初始化之前了。然後在,提交,結果如下: