温馨提示×

debian tomcat如何配置编码

小樊
45
2026-09-21 17:35:00
栏目: 智能运维

在 Debian 上配置 Tomcat 的编码(字符集),通常需要从 Tomcat 自身、连接器(Connector)、应用、系统环境 几个方面入手。下面以 Tomcat 9 / 10 / 11(Debian 常见版本) 为例说明。


一、配置 Tomcat 连接器编码(最重要)

Tomcat 默认使用 ISO-8859-1,必须显式改为 UTF-8

1. 修改 server.xml

编辑 Tomcat 配置文件:

sudo nano /etc/tomcat9/server.xml

(根据版本可能是 tomcat9 / tomcat10

找到 HTTP Connector(通常是 8080 端口):

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

改为:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           URIEncoding="UTF-8"
           useBodyEncodingForURI="true" />

✅ 说明:

  • URIEncoding="UTF-8":GET 请求参数编码
  • useBodyEncodingForURI="true":POST 与 GET 编码一致

二、配置 JVM 默认编码(推荐)

1. 设置 JAVA_OPTS

编辑 Tomcat 环境配置文件:

sudo nano /etc/default/tomcat9

添加或修改:

JAVA_OPTS="-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"

或(Tomcat 10+):

CATALINA_OPTS="-Dfile.encoding=UTF-8"

重启 Tomcat:

sudo systemctl restart tomcat9

三、Web 应用层编码配置

1. Servlet / Filter 强制 UTF-8

web.xml 中配置编码过滤器(推荐):

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

四、日志编码(可选但重要)

1. logging.properties

sudo nano /var/lib/tomcat9/conf/logging.properties

确保:

java.util.logging.ConsoleHandler.encoding = UTF-8

五、系统环境编码检查(Debian)

locale

如果不是 UTF-8:

sudo dpkg-reconfigure locales

选择:

en_US.UTF-8

或中文:

zh_CN.UTF-8

六、验证是否生效

1. 写测试 JSP

<%= request.getCharacterEncoding() %>

应为:

UTF-8

2. 测试中文 GET/POST


七、常见问题总结

问题 原因
中文乱码 未配置 URIEncoding
日志乱码 JVM 或 logging 编码错误
控制台乱码 Debian locale 非 UTF-8
Spring 项目乱码 缺少 CharacterEncodingFilter

如果你愿意,可以告诉我:

  • ✅ Tomcat 版本(9 / 10 / 11)
  • ✅ 是否 Spring Boot / 原生 Servlet
  • ✅ 乱码出现在 GET 还是 POST

我可以给你 更精确的配置方案

0