はじめに
「Apache Struts」(以下、Struts)とは、サーバサイドJava開発のデファクトスタンダードとしてあまりにも有名な、オープンソースのWebアプリケーション・フレームワークです。本連載では、そのStrutsの次世代バージョンであるStruts 2を、実際に動作するアプリケーションと共に解説していきます。
第5回目の本稿は、MVCモデルで言うところの「V」iewレイヤーについて説明することにします。Viewレイヤーとは、アプリケーションの処理結果を表示するレイヤーにあたります。
対象読者
サーバサイドJava(JSP&サーブレット)について基本的なことは理解している方を対象とします。
Result処理
Struts 2のViewは、URIリクエストから実行されたAction
クラスの処理結果や状態を出力するレイヤーです。デフォルトでは、JSPファイルをテンプレートとして、HTMLが生成されます。またHTMLだけでなく、プレーンなテキストであったり、画像データなどのバイナリデータを指定することもできます。
今までの連載記事のなかでも、Actionの処理結果に応じた出力の指定について、たびたび言及していましたが、ここで整理してみることにします。
Result Type
ちょっとこれまでのサンプルコードをふりかえってみましょう。URIリクエストから実行されるAction
クラスのメソッドでは、処理結果を"success"などの文字列で返すようにしていました。この結果の文字列を受けて、どのような処理をさせるかは、struts.xml の<result>
タグで設定しています。例えば次のように指定すると、結果が"success"のときにindex.jspを用いた出力となります。
<result name="success">/index.jsp</result>
実はこれは既定値を利用した書き方で、タグを省略しないで書くと、次のようになります。
<result name="success" type="dispatcher"> <param name="location">/index.jsp</param> </result>
type
属性で処理のタイプを指定し、<param>
タグでその処理のパラメータを指定します。このtype
属性で指定している"dispatcher"の実体は、struts-default.xmlにて設定されているorg.apache.struts2.dispatcher.ServletDispatcherResult
クラスです。JSPファイルを解釈して、 HTMLを生成する処理を行います。
<result>
タグのtype
属性(Result Type)を変更することで、処理を切り替えることができます。Struts 2で用意されているResult Typeは次の表の通りです。これは、本連載の第3回目でも少しふれていますが、さらに詳しく見ていくことにしましょう。
Result Type | 概要 | 種別 |
chain | 別のActionクラスを呼び出す | 遷移 |
redirect | 指定したURLにリダイレクトする | |
redirectAction | 指定したActionにリダイレクトする | |
dispatcher | JSPファイルをテンプレートとしてHTML を生成する(デフォルト) | データ生成 |
freemarker | 汎用テンプレートエンジンのFreeMarkerを使用してHTMLを生成する | |
velocity | 汎用テンプレートエンジンのVelocityを使用してHTMLを生成する | |
xslt | XSLTを使用してHTML(XML)を生成する | |
httpheader | HTTPのステータスヘッダだけを生成する | |
stream | バイナリデータをそのままクライアントに返す。ファイルのダウンロード等に利用する | |
plainText | プレーンテキストとして、そのままクライアントに返す | |
tiles | Tilesフレームワークを利用してHTMLを生成する | |
jasper | オープンソースの帳票ライブラリJasperReport利用したレスポンスを生成する |