JSP 頁面接收 POST 表單中文參數,Tomcat 返回亂碼。網上方案嘗試無數(pageEncoding、contentType、Filter),均無效。
<% request.setCharacterEncoding("UTF-8"); %> **必須寫在 JSP 頁面最頂端**,在任何標籤、HTML、jsp:useBean 之前。放在 `
<form action="register.jsp" method="post">
姓名: <input type="text" name="name">
<input type="submit" value="提交">
</form>
<%@ 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>
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 已生成錯誤字串,後續設定無法逆轉。
POST 靠 `request.setCharacterEncoding`;GET 需修改 `server.xml` Connector 加 `URIEncoding="UTF-8"`。