1. Введение
UTF-8 — наиболее распространенная кодировка символов, используемая в веб-приложениях. Он поддерживает все языки, на которых в настоящее время говорят в мире, включая китайский, корейский и японский.
В этой статье мы демонстрируем всю конфигурацию, необходимую для обеспечения UTF-8 в Tomcat.
2. Конфигурация разъема
Соединитель прослушивает соединения на определенном порту. Нам нужно убедиться, что все наши соединители используют UTF-8 для кодирования запросов.
Давайте добавим параметр URIEncoding="UTF-8"
ко всем коннекторам в TOMCAT_ROOT/conf/server.xml
:
<Connector
URIEncoding="UTF-8"
port="8080"
redirectPort="8443"
connectionTimeout="20000"
protocol="HTTP/1.1"/>
<Connector
URIEncoding="UTF-8"
port="8009"
redirectPort="8443"
protocol="AJP/1.3"/>
3. Фильтр набора символов
После настройки соединителя пришло время заставить веб-приложение обрабатывать все запросы и ответы в кодировке UTF-8.
Давайте определим класс с именем CharacterSetFilter
:
public class CharacterSetFilter implements Filter {
// ...
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain next) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
next.doFilter(request, response);
}
// ...
}
Нам нужно добавить фильтр в файл web.xml
нашего приложения, чтобы он применялся ко всем запросам и ответам:
<filter>
<filter-name>CharacterSetFilter</filter-name>
<filter-class>com.foreach.CharacterSetFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterSetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4. Кодировка страницы сервера
Другая часть нашего веб-приложения, которую нам нужно настроить, — это страницы сервера Java.
Лучший способ обеспечить использование UTF-8 на страницах сервера — добавить этот тег вверху каждой страницы JSP:
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
5. Кодировка HTML-страницы
В то время как кодировка страницы сервера сообщает JVM, как обрабатывать символы страницы, кодировка страницы HTML сообщает браузеру, как обрабатывать символы страницы.
Мы должны добавить этот тег <meta>
в раздел head
всех HTML-страниц:
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
6. Конфигурация сервера MySQL
Теперь, когда наш Tomcat настроен, пришло время настроить базу данных.
Мы предполагаем, что используется сервер MySQL. Файл конфигурации называется my.ini
в Windows и my.cnf
в Linux.
Нам нужно найти файл конфигурации, найти эти параметры и отредактировать их соответствующим образом:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
Нам нужно перезапустить сервер MySQL, чтобы изменения вступили в силу.
7. Конфигурация базы данных MySQL
Конфигурация набора символов сервера MySQL применяется только к новым базам данных. Нам нужно перенести старые вручную. Этого легко добиться с помощью нескольких команд.
Для каждой базы данных:
ALTER DATABASE database_name CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
Для каждой таблицы:
ALTER TABLE table_name CONVERT TO
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Для каждого столбца VARCHAR
или TEXT
:
ALTER TABLE table_name CHANGE column_name column_name
VARCHAR(69) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Если мы передаем данные с символами UTF-8 в запросах к базе данных, нам необходимо убедиться, что любое установленное соединение с базой данных соответствует кодировке UTF-8.
Для соединения на основе JDBC это может быть достигнуто с помощью следующего URL-адреса соединения:
jdbc:mysql://localhost:3306/?useUnicode=yes;characterEncoding=UTF-8
8. Заключение
В этой статье мы продемонстрировали, как убедиться, что Tomcat использует кодировку UTF-8.