TomcatをUTF-8対応にする
1前書き
UTF-8はWebアプリケーションで使用される最も一般的な文字エンコーディングです。中国語、韓国語、日本語など、現在世界で話されているすべての言語をサポートします。
この記事では、TomcatでUTF-8を保証するために必要なすべての構成を説明します。
** 2コネクタ構成
コネクターは特定のポートで接続をlistenします。 ** 私たちのすべてのConnectorがリクエストをエンコードするためにUTF-8を使うようにする必要があります。
TOMCAT
ROOT/conf/server.xml
内のすべてのコネクターに、パラメーター
URIEncoding =” UTF-8 ” __を追加します。
<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文字セットフィルタ
コネクタを設定したら、Webアプリケーションですべての要求と応答を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.baeldung.CharacterSetFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterSetFilter</filter-name>
<url-pattern>/** </url-pattern>
</filter-mapping>
4サーバーページエンコーディング
私達が設定する必要がある私達のWebアプリケーションの他の部分はJavaサーバーページです。
サーバーページで確実にUTF-8を確保する** 最善の方法は、各JSPページの先頭にこのタグを追加することです。
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
5 HTMLページエンコーディング
サーバーページエンコーディングはJVMにページ文字の処理方法を指示しますが、HTMLページエンコーディングはブラウザにページ文字の処理方法を指示します。
すべてのHTMLページの
head
セクションにこの
<meta>
タグを追加する必要があります。
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>
6. MySQLサーバーの設定
これで、Tomcatの設定は完了しました。次にデータベースを設定します。
MySQLサーバーが使用されていると仮定します。設定ファイルは、Windowsでは
my.ini
、Linuxでは
my.cnf
という名前です。
設定ファイルを見つけ、これらのパラメータを検索し、それに従って編集する必要があります。
----[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エンコーディングを確実に使用する方法を説明しました。