日本語化
これまで、全て表示を英語で扱っていました。しかし、我々日本人はJSP内の記述やメッセージで日本語を扱う必要があります。Sturts2のアプリケーションにおいて日本語を意識する必要があるポイントは
- 日本語を定義したメッセージリソース
- 入力フォーム内の日本語入力
でしょう。
アプリケーションで日本語を扱う場合、まずアプリケーションの表示文字コードを何にするかを決定する必要があります。今回、各サンプルではUTF-8を利用していましたが、今回はWindows-31J(シフトJISやMS932とも呼ぶことがあります。ただし、正確にはシフトJISとは異なります)を表示文字コードとして扱う場合を紹介します。
まず、メッセージリソースファイルに日本語を記述する方法ですが、これは、表示文字コードには依存せずに、メッセージを定義しているpropertiesファイルを、unicodeでエンコーディングした日本語のファイルとして用意します。エンコーディングする方法はJDKに含まれているnative2asciiコマンドなどを用いて実行します。native2asciiコマンドの場合、
native2ascii 入力ファイル名 出力ファイル名
と実行することで、入力ファイルに指定したファイル内の全ての文字列がunicodeでエンコーディングされて出力ファイルに書き出されます。この出力ファイルをアプリケーションで利用するメッセージリソースファイル(MessageResource.propertiesなど)とすれば問題ありません。これによって、Struts 2はメッセージの日本語文字列を正しく読み込めるようになります。日本語の文字列をJSPで表示する場合は、ご存知の通り、JSP pageディレクティブを用いて
<%@ page contentType="text/html; charset=Windows-31J" %>
<%@ page pageEncoding="Windows-31J" %>
のようにJSPに記述することで、JSPファイル自身のエンコーディングと、表示のエンコーディングを指定する事ができます。例ではJSP、表示ともにWindows-31Jを用いる事を定義しています。このようにすることで、メッセージリソースを含めた日本語の文字列の表示が行えます。
続いて、入力フォームに日本語が入力される場合に、正しく日本語を扱えるようにする方法を紹介します。これは、アプリケーションのエンコーディングをStruts 2へ指定する事で行います。指定は、sturts.xmlに<constant>要素を用いて下記のように行います。
リスト25: アプリケーションのエンコーディング定義
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.i18n.encoding" value="Windows-31J" />
....略....
例では、Windows-31Jを指定しています これらの指定によって、Struts 2にて日本語を正しく扱えるようになります。
Struts 1との対比
最後に、Sturtsのバージョン1を利用している方向けに、Struts 1とSturts 2での各種機能の実装方法や概念の違いを紹介しますので、参考にしてください。
Struts 1の機能/概念 | Sturts 2での機能/概念 |
---|---|
アクションサーブレット | Dispatcher Filterが同等の機能を提供 |
リクエストプロセッサ | インターセプタ群が同等の機能を提供 |
struts-config.xml | struts.xml に同等の定義を記述 |
アクションマッピング | ほぼ同じ(XMLの記述が異なる) |
アクションクラス | POJOで記述できる |
アクションフォームビーン | アクションクラスに集約された |
アクションフォワード | ほぼ同じ(outcomeとして文字列で扱う) |
Sturtsカスタムタグ | まったく別のカスタムタグのセットが用意され、OGNLが利用できる |
メッセージリソース | ほぼ同じ(ファイルを分割定義できる) |
メッセージ操作 | ほぼ同じ(アクションクラスでのAPIが異なる) |
入力検証 | ほぼ同じ(XML記述やAPIが異なる) |
Session/Requestコンテキスト | 直接アクセスする事は、ほぼない(本文参照) |
以上の機能説明で、かなりの本格的なアプリケーションが作成できるのではないでしょうか。
ここまで紹介した機能以外にもStruts 2にはDIを用いて「ビジネスロジックのオブジェクトを入手する機能(この機能は Spring Frameworkを利用可能です)」や「各種定義ファイルの記述を省略し、アノテーションによって指定する機能」「アクションのパス定義にワイルドカードを利用する機能」など、便利で魅力的な機能が多く提供されています。また、多くの機能はカスタマイズが可能となっています。これら機能の利用方法については、機会があればまたご紹介したいと思います。