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

JSP POST 表單中文亂碼終極解決:request.setCharacterEncoding 位置決定成敗

     編輯:Java 相關知識

問題現場

JSP 頁面接收 POST 表單中文參數,Tomcat 返回亂碼。網上方案嘗試無數(pageEncoding、contentType、Filter),均無效。

關鍵發現:代碼位置至關重要

<% request.setCharacterEncoding("UTF-8"); %> **必須寫在 JSP 頁面最頂端**,在任何標籤、HTML、jsp:useBean 之前。放在 `` 內或中間完全無效。

最小可行完整範例

register.html(表單頁)

<form action="register.jsp" method="post">
  姓名: <input type="text" name="name">
  <input type="submit" value="提交">
</form>

register.jsp(處理頁)

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<% request.setCharacterEncoding("UTF-8"); %><!-- ★★★ 必須在第一行 ★★★ -->
<jsp:useBean id="user" scope="page" class="com.demo.UseBean" />
<jsp:setProperty property="*" name="user" />
<html><body>
  姓名: <jsp:getProperty property="name" name="user" />
</body></html>

UseBean.java

public class UseBean {
    private String name;
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}

為何位置這麼敏感?

Tomcat 解析請求參數時機:首次調用 request.getParameter()(含 jsp:setProperty 內部調用)時解碼。若在此之前未設定編碼,預設 ISO-8859-1 已生成錯誤字串,後續設定無法逆轉。

補充:GET 請求亂碼另行解決

POST 靠 `request.setCharacterEncoding`;GET 需修改 `server.xml` Connector 加 `URIEncoding="UTF-8"`。

避坑清單

  1. JSP 頂行第一句寫 `request.setCharacterEncoding("UTF-8")`
  2. `page` 指令 `contentType="text/html; charset=UTF-8"`
  3. HTML ``
  4. 表單頁同樣聲明 ``
  5. 若用 Filter,確保 `doFilter` 鏈首設定編碼並 `forceEncoding=true`
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved