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エンコーディングを確実に使用する方法を説明しました。