TomcatをUTF-8対応にする
1. 前書き
UTF-8は、Webアプリケーションで使用される最も一般的な文字エンコーディングです。 中国語、韓国語、日本語など、世界で現在話されているすべての言語をサポートしています。
この記事では、TomcatでUTF-8を確保するために必要なすべての構成を示します。
2. コネクタ構成
コネクターは、特定のポートで接続をlistenします。 all of our Connectors use UTF-8 to encode requests.を確認する必要があります
パラメータURIEncoding=”UTF-8″をTOMCAT_ROOT/conf/server.xmlのすべてのコネクタに追加しましょう。
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にフィルターを追加する必要があります。
CharacterSetFilter
com.example.CharacterSetFilter
CharacterSetFilter
/*
4. サーバーページのエンコーディング
構成する必要があるWebアプリケーションの他の部分は、Javaサーバーページです。
best way to ensure UTF-8 in server pages is to add this tag at the top of each JSP page:
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
5. HTMLページエンコーディング
サーバーページエンコーディングはJVMにページ文字の処理方法を指示しますが、HTMLページエンコーディングはブラウザにページ文字の処理方法を指示します。
この<meta>タグをすべてのHTMLページのheadセクションに追加する必要があります。
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エンコーディングを使用することを保証する方法を示しました。