JSP入門 中文亂碼

2021-07-07 05:53:03 字數 1008 閱讀 4606

初學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...