Javaに関する様々な情報をご紹介します。

8アクション・フォームBeanの日本語処理

Javaに関する様々な情報をご紹介します。

アクション・フォームBeanの日本語処理

ここでは、Strutsアクション・フォームBeanで、日本語を処理する方法について解説します。

実行環境
  • ・WindowsXP Home Edition
  • ・J2SDK 1.4.2_04
  • ・Tomcat 5.0.18
  • ・Struts 1.2.4

概要

アクション・フォームBeanでは、ブラウザからのリクエストデータを格納する際、どのエンコード方式を使用しているかの情報を得る(setCharacterEncodingメソッドなど)前にリクエストデータを格納します。そのため、日本語を扱う際、文字化けが起こります。

アクション・フォームBeanで日本語処理を行う際は、Servlet2.3から導入されたフィルタ機能を利用します。フィルタ機能でリクエストデータのエンコード処理を行います。フィルタ機能が使えない場合は、アクション・フォームBeanにデータが格納される前に呼び出されるresetメソッド内でsetCharacterEncodingメソッドを呼び出す、アクセスメソッド内でエンコード処理を行うなどの対応を行います。

ここでは、フィルタ機能を利用したエンコード処理について解説します。フィルタ機能の詳細に関しましてはJavaの道:フィルタを参照してください。

使用例

フィルタ処理の際、実行されるプログラムにはTomcatのサンプルプログラムとして提供されているSetCharacterEncodingFilterクラスを利用します。SetCharacterEncodingFilterクラスを持っていない場合は、以下よりダウンロードしてください。

ソースファイル:SetCharacterEncodingFilter.java
クラスファイル:SetCharacterEncodingFilter.class
※ 右クリック、「対象をファイルに保存」でダウンロードできます。

web.xmlにフィルタ処理を行う際の記載を行います。

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

    <filter>
          <!-- フィルタ名を記載します。 -->
        <filter-name>EncodeFilter</filter-name>
          <!-- フィルタ処理の際のクラスを指定します。
            SetCharacterEncodingFilterクラスは
            filtersパッケージ内にあります。 -->
        <filter-class>filters.SetCharacterEncodingFilter</filter-class>
          <!-- パラメータ値にエンコード方式を指定します。 -->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>Shift_JIS</param-value>
        </init-param>
    </filter>
    <!-- すべてのURLパターンでフィルタ処理が
         行われるように指定します。 -->
    <filter-mapping>
        <filter-name>EncodeFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <servlet>
        ・・・・・・・・・・・・
        ・・・・・・・・・・・・

【実行結果】以下は、前頁(Javaの道:アクション・フォームBean)のサンプルプログラムに日本語処理を適用した例です。SetCharacterEncodingFilterクラスは、WEB-INF\classes\filtersディレクトリに設置します。
Strutsの実行方法に関してはJavaの道:Struts(基本操作)を参照してください。

Struts実行結果_1

日本語が文字化けせず表示されているのがわかります。

Struts実行結果_2

8アクション・フォームBeanの日本語処理