首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> JSP 程式設計 >> 關於JSP

JSP 中文亂碼統一解決方案:request.setCharacterEncoding 與 application 域傳值實戰

     編輯:關於JSP

JSP 處理中文亂碼核心在於「編碼統一、設置及時」。本文梳理 POST 表單、跨頁傳值兩大高頻場景,給出最小代價修復方案。

場景一:POST 表單提交亂碼

<%@ page pageEncoding="UTF-8" %>
<%
  // 必須在 request.getParameter() 之前調用
  request.setCharacterEncoding("UTF-8");
%>
<form method="post">
  姓名:<input name="name" /><br/>
  性別:<input name="sex" />
  <button type="submit">提交</button>
</form>
<%
  String name = request.getParameter("name");
  String sex = request.getParameter("sex");
  out.println("姓名:" + name + ",性別:" + sex);
%>

三要素:

  1. pageEncoding="UTF-8" —— JSP 編譯/輸出編碼
  2. request.setCharacterEncoding("UTF-8") —— 請求體解碼
  3. method="post" —— 參數在請求體,而非 URL

場景二:跨頁面共享用戶信息(application 域)

登入後將用戶名、密碼存入 application 域,全局可讀:

<!-- login.jsp 處理登入 -->
<%@ page pageEncoding="UTF-8" %>
<%
  request.setCharacterEncoding("UTF-8");
  String name = request.getParameter("name");
  String pwd  = request.getParameter("password");
  // 寫入 application 域(全局單例,慎用!)
  application.setAttribute("globalUser", name);
  application.setAttribute("globalPwd", pwd);  // 明文密碼極不安全,僅示範
%>

<!-- other.jsp 任意頁面讀取 -->
<%@ page pageEncoding="UTF-8" %>
歡迎:<%=application.getAttribute("globalUser")%>

⚠️ 關鍵安全警示

  • application 域屬全局共享:所有用戶可見,絕不可存放敏感信息(密碼、Token、隱私)
  • 正確做法:登入成功存入 session 域(用戶級隔離),或簽發 JWT Token 客戶端攜帶
  • 示例代碼僅演示「域對象存取語法」,生產環境請替換為安全方案

亂碼診斷速查表

現象檢查項修正
POST 亂碼缺 request.setCharacterEncoding在首個 getParameter 前加上
GET 亂碼Tomcat 無 URIEncodingserver.xml Connector 加 URIEncoding="UTF-8"
頁面顯示亂碼缺 pageEncoding 或 contentType charsetJSP 指令雙設置 UTF-8
資料庫存入亂碼JDBC URL 缺編碼參數加 ?useUnicode=true&characterEncoding=UTF-8

最佳實踐:全鏈路 UTF-8 一次配置


<%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" %>



  EncodingFilter
  org.springframework.web.filter.CharacterEncodingFilter
  encodingUTF-8
  forceEncodingtrue

EncodingFilter/*





jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai

採用過濾器統一編碼,配合容器與數據庫層面 UTF-8,從源頭杜絕亂碼,業務代碼零侵入。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved