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

Tomcat 部署中文亂碼:菜單正常但正文亂碼的排查與修復

     編輯:程式設計綜合問答

現象描述

  • Windows + Tomcat:頁面菜單、標題中文正常,正文顯示亂碼。
  • Linux + WebLogic:同代碼完全正常。

根因定位

項目使用了 SiteMesh 裝飾器框架。SiteMesh 在處理頁面佈局時,可能未正確傳遞或設置響應字符編碼,導致正文部分(由裝飾器合併輸出)編碼錯誤,而直接輸出的菜單/標題不受影響。

解決方案:強制 UTF-8 編碼過濾器

public class EncodingFilter implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
        req.setCharacterEncoding("UTF-8");
        res.setCharacterEncoding("UTF-8");
        res.setContentType("text/html;charset=UTF-8");
        chain.doFilter(req, res);
    }
    // init/destroy 略
}

在 web.xml 中註冊為第一個過濾器:

<filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>com.example.EncodingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

驗證要點

  1. 所有 JSP 頁面頂部聲明 <%@ page contentType="text/html;charset=UTF-8" %>。
  2. 數據庫連接 URL 含 characterEncoding=UTF-8。
  3. Tomcat server.xml 的 <Connector> URIEncoding="UTF-8"。

總結

框架級組件(如 SiteMesh)可能繞過常規編碼設置,導致局部亂碼。全局過濾器強制統一請求/響應編碼是通用且徹底的修復手段,兼容各類容器部署環境差異。

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