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

Tomcat 5 中文亂碼終極解決方案:POST/GET 雙管齊下

     編輯:Java 程式設計入門

問題現象

  1. POST 表單提交:request.getParameter() 回傳亂碼或 ??
  2. GET URL 參數:https://localhost/a.jsp?name=中國 取參數亂碼,Tomcat 4 時代的 Filter/ setCharacterEncoding 失效

根因分析

  • POST:Tomcat 預設用 ISO-8859-1 解碼請求體
  • GET:Tomcat 5 對 Query String 採用與 POST 不同的解碼邏輯,request.setCharacterEncoding() 不生效

解決方案:POST 篇 — Filter 攔截

  1. 所有 JSP 頁首加入:
    <%@ page contentType="text/html;charset=gb2312" %>
  2. 部署 SetCharacterEncodingFilter(Tomcat 自帶範例 webapps/servlets-examples/WEB-INF/classes/filters/)
  3. web.xml 配置:
    <filter>
      <filter-name>Set Character Encoding</filter-name>
      <filter-class>filters.SetCharacterEncodingFilter</filter-class>
      <init-param>
        <param-name>encoding</param-name>
        <param-value>GBK</param-value>
      </init-param>
    </filter>
    <filter-mapping>
      <filter-name>Set Character Encoding</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>

解決方案:GET 篇 — Connector 層面

  1. 編輯 server.xml,找到 <Connector> 元素
  2. 新增屬性 URIEncoding="GBK":
    <Connector 
      port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
      enableLookups="false" redirectPort="8443" acceptCount="100"
      debug="0" connectionTimeout="20000"
      disableUploadTimeout="true"
      URIEncoding="GBK"
    />
  3. 重啟 Tomcat

驗證測試頁

<%@ page contentType="text/html;charset=gb2312"%>
<%
  String q = request.getParameter("q");
  q = (q == null) ? "沒有值" : q;
%>
<form action="tcnchar.jsp" method="post">
  輸入中文:<input type="text" name="q"><input type="submit" value="確定">
</form>
您提交了:<%=q%>

同時測試 GET:tcnchar.jsp?q=測試 與 POST 表單提交,均應正常顯示中文。

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