温馨提示×

Debian怎么配置Tomcat编码

小樊
39
2026-07-21 16:57:45
栏目: 智能运维

在 Debian 上配置 Tomcat 编码(字符集),通常是为了解决 中文乱码POST/GET 乱码 等问题。下面按 常见场景 + 推荐做法 给你一个完整说明。


一、核心结论(先看这个)

推荐统一使用 UTF-8
✅ 需要配置的地方主要有:

  1. Tomcat 启动参数(JVM)
  2. server.xml(Connector)
  3. 应用自身(request/response)
  4. 系统环境(Debian 本身)

二、配置 Tomcat JVM 编码(最重要)

1️⃣ 修改 Tomcat 启动参数

Tomcat 的编码由 JVM 启动参数 决定。

Debian + systemd(Tomcat 9/10 常见)

编辑 Tomcat 的 systemd 配置:

sudo systemctl edit tomcat9

或手动编辑:

sudo vim /etc/systemd/system/tomcat9.service.d/override.conf

添加:

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

然后执行:

sudo systemctl daemon-reload
sudo systemctl restart tomcat9

2️⃣ 验证 JVM 编码

ps -ef | grep tomcat

或写个 JSP 测试:

<%= System.getProperty("file.encoding") %>

✅ 输出应为:UTF-8


三、配置 Tomcat server.xml(Connector)

1️⃣ 修改 HTTP 连接器编码

编辑:

sudo vim /etc/tomcat9/server.xml

找到 <Connector>

<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 编码一致

四、应用层编码(必须做)

1️⃣ Servlet / Spring 项目

方式一:过滤器(推荐)

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

方式二:Spring Boot

server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true

2️⃣ JSP 页面

每个 JSP 顶部必须有:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

HTML 中:

<meta charset="UTF-8">

五、Debian 系统编码(不要忽略)

Tomcat 会继承系统编码。

1️⃣ 查看当前编码

locale

2️⃣ 如果不是 UTF-8

sudo dpkg-reconfigure locales

勾选:
zh_CN.UTF-8en_US.UTF-8

然后:

sudo update-locale LANG=zh_CN.UTF-8

重启服务器或重新登录。


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

1️⃣ Tomcat 日志

编辑:

sudo vim /etc/tomcat9/logging.properties

确保:

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

七、常见乱码场景速查表

场景 解决方案
GET 参数乱码 URIEncoding="UTF-8"
POST 乱码 request.setCharacterEncoding("UTF-8")
控制台乱码 JVM + 系统 locale
日志乱码 logging.properties
文件名乱码 sun.jnu.encoding=UTF-8

八、推荐的最终配置(概括)

JVM

-Dfile.encoding=UTF-8

server.xml

URIEncoding="UTF-8"
useBodyEncodingForURI="true"

应用

request/response UTF-8

系统

LANG=zh_CN.UTF-8

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

  • Tomcat 版本(8 / 9 / 10)
  • 是否 Spring Boot
  • 乱码是 GET / POST / 日志 / 数据库

我可以给你 精确到配置文件路径 的方案。

0