JSP入門:中文亂碼

初學JSP,創建了兩個頁面jspForward.jsp與login.jsp

jspForward.jsp裏使用了請求轉發標誌,是一箇中轉頁面:

<jsp:forward page="login.jsp">

<jsp:param name="userName" value="張三" />

</jsp:forward>

login.jsp則是一個簡單的表單用以獲取從jspForward.jsp傳來的param:

<form>

<input name="name" type="text" value="<%=request.getParameter("userName") %>"/>

</form>

結果訪問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中也能正常顯示。

當然,以上內容純屬自己的猜想,我並不清楚其真正的原理,不喜勿噴。不過這裏提到的解決方法是有效無疑的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章