TomcatをUTF-8対応にする

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エンコーディングを使用することを保証する方法を示しました。