初學jsp,建立了兩個頁面jspforward.jsp與login.jsp
jspforward.jsp裡使用了請求**標誌,是乙個中轉頁面:
login.jsp則是乙個簡單的表單用以獲取從jspforward.jsp傳來的param:
結果訪問jspforward.jsp自動跳轉之後,login.jsp獲得的使用者名稱亂碼
最終在嘗試了多重方法之後發現,在jspforward.jsp(也就是請求傳遞引數的jsp)裡設定request.setcharacterencoding("utf-8");
login.jsp獲得的使用者名稱才正常顯示為「張三」
不過我還是自己認真研究分析了一下:
感覺 jsp:param 傳遞引數的方式與 url?param=value 的形式差不多,但是jsp:param傳遞的引數並不會跟後者一樣在url顯示出來。
所以後者解決亂碼既可以在傳遞引數的頁面設定,也可以在接收引數的頁面設定request.setcharacterencoding("utf-8");
而jsp:param解決亂碼卻只能跟我剛剛說的一樣,只能在傳遞引數的頁面設定,也許是使用jsp:param傳遞引數在傳遞的過程中改變了其request物件的性質,卻依然保留著request的命名,所以在login.jsp(也就是已經獲取引數的jsp中)中雖然你已經獲取了這個名為request,但實質上已經變質的東西。所以這個時候設定request.setcharacterencoding("utf-8")已經無意義了(因為這是未變質前的方法),但是你仍然能獲取到這個值(也就是說request.getparameter("username")),儘管它顯示為亂碼。所以你需要在傳遞值之前也就是在jspforward.jsp設定request.setcharacterencoding("utf-8");這個時候才能成功改變你傳的值的編碼,這樣的話,儘管jsp:param在傳遞過程中已經變質,但實際上內容已經改變了。所以在login.jsp中也能正常顯示。
當然,以上內容純屬自己的猜想,我並不清楚其真正的原理,不喜勿噴。不過這裡提到的解決方法是有效無疑的。
jsp中文亂碼
一 page 指定contenttype屬性時,做如下指定 page contenttype text html charset gb 2312 charset中首字母c要大寫。二 page 指定contenttype屬性時,做如下指定 page contenttype text html char...
jsp中文亂碼
以 get 方式提交資料時 讀取使用者名稱和密碼 string name request.getparameter name 對請求資料進行字元編碼 name new string name.getbytes iso 8859 1 utf 8 以 post 方式提交資料時 設定讀取請求資訊的字元編碼...
jsp中文亂碼2
1.單獨的html頁面指定編碼為 2.單獨的jsp頁面設定編碼為 page pageencoding utf 8 3.request請求過來的引數設定編碼為 表單提交亂碼問題 request.setcharacterencoding utf 8 4.如果使用了獲取response物件的printwr...