温馨提示×

debian怎么调tomcat编码

小樊
55
2026-10-21 00:27:07
栏目: 智能运维

在 Debian 上调整 Tomcat 的编码(字符集),通常是为了解决中文乱码、请求/响应编码不一致等问题。下面按常见场景说明。


一、设置 Tomcat 自身默认编码(推荐)

1️⃣ 修改 server.xml(最关键)

编辑 Tomcat 的配置文件:

sudo nano /etc/tomcat9/server.xml

(tomcat 版本可能是 tomcat8 / tomcat10,路径也可能是 /opt/tomcat/conf/server.xml)

找到 Connector,加上:

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

✅ 说明:

  • URIEncoding="UTF-8":GET 请求参数编码
  • useBodyEncodingForURI="true":POST 和 GET 统一使用请求体编码

修改后重启:

sudo systemctl restart tomcat9

二、设置 JVM 默认编码(很重要)

Debian 默认 JVM 编码可能不是 UTF-8。

1️⃣ 修改 Tomcat 启动环境

如果是 systemd(Debian 9+)

编辑:

sudo systemctl edit tomcat9

加入:

[Service]
Environment="JAVA_OPTS=-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"

保存后:

sudo systemctl daemon-reload
sudo systemctl restart tomcat9

2️⃣ 或在 setenv.sh 中配置(通用)

sudo nano /opt/tomcat/bin/setenv.sh

添加:

export JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"

三、Web 应用层编码(Java 代码)

1️⃣ Servlet 中(必须)

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");

2️⃣ Spring Boot / Spring MVC

@Bean
public FilterRegistrationBean<CharacterEncodingFilter> encodingFilter() {
    CharacterEncodingFilter filter = new CharacterEncodingFilter();
    filter.setEncoding("UTF-8");
    filter.setForceEncoding(true);
    return new FilterRegistrationBean<>(filter);
}

四、日志编码(防止日志乱码)

修改 logging.properties

sudo nano /etc/tomcat9/logging.properties

确保:

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

五、验证是否生效

locale
java -XshowSettings:properties -version 2>&1 | grep encoding

或在 JSP 中测试:

<%= request.getCharacterEncoding() %>

六、常见坑总结

❌ 只改应用不改 server.xml → GET 乱码
❌ 只改 Tomcat 不改 JVM → 日志/文件名乱码
❌ Debian 默认 LANG=C → 全局乱码

建议同时设置:

sudo apt install locales
sudo dpkg-reconfigure locales
# 选 zh_CN.UTF-8 / en_US.UTF-8

如果你告诉我:

  • Tomcat 版本
  • 是否 Spring Boot
  • 乱码发生在 页面 / 数据库 / 日志 / 上传文件

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

0 踩