@いう間にWebアプリを作れる「Struts 2」入門
【特集】Strutsは“2”を使えば、サルでも幸せに
ヤスダネットワーク
関川 晶子
2009/1/8
 4種類のResultアノテーションを使い分ける
        ここからは、Webアプリケーション開発においてよく使われるであろう4種類の@Resultについて説明していきます。以下のような画面(index.jsp)から、4つの画面に遷移するサンプルを解説しながら、Struts 2の強力さを見ていきます。
![]()  | 
          
| 図8 サンプルのスタート画面 | 
<%@ page language="java" contentType="text/html; charset=UTF-8"  | 
          
■ 【1】表示するページをファイル名で指定
@Result(name = "hello1", value = "index.jsp")  | 
          
最初の@Resultは、表示するページをファイル名で指定するものです。nameとvalue属性だけを設定すると、指定のページでメソッドの実行結果を表示します。「こんにちは1」を押すと、「index.jsp」に「こんにちは!」を表示させるメソッド「hello1」を実行しています。
![]()  | 
          
| 図8 「こんにちは1」ボタンの実行結果 | 
以下のコードはindexAction.javaから一部抜粋したものです。
package test; | 
          
■ 【2】ほかのページにリダイレクトしたい場合
@Result(name = "hello2", value = "jump.jsp",  | 
          
単純に、ほかのページにリダイレクトしたい場合は、typeにServletRedirectResult.classを指定します。「こんにちは2」を押すと、jump.jspに遷移します。
![]()  | 
          
| 図9 「こんにちは2」ボタンの実行結果 | 
<%@ page language="java" contentType="text/html; charset=UTF-8"  | 
          
以下のコードはindexAction.javaから一部抜粋したものです。
package test; | 
          
■ 【3】リダイレクトした後、さらにActionクラスで処理を行う場合
@Result(name = "recipe", value = "jump!recepi",  | 
          
ちょっと複雑に、リダイレクトした後、さらにActionクラスで処理を行う場合はtypeに「ServletActionRedirectResult.class」を指定します。「今日のレシピ」を押すと、jumpAction.java内のrecepiメソッドを実行し、その結果を表示します。
![]()  | 
          
| 図10 「今日のレシピ」ボタンの実行結果 | 
package test; | 
          
以下のコードはindexAction.javaから一部抜粋したものです。
@Results({ | 
          
■ 【4】ファイルをダウンロードさせたい場合
@Result(name = "download", value = "inputStream",  | 
          
ページ遷移以外にも、ファイルをダウンロードさせたい場合もあります。そのようなときは、typeに「StreamResult.class」を指定すると、設定したパラメータに従ってストリームをダウンロードできます。
Value属性に設定する値は、ストリームを保管しているフィールド名を指定します。Getterが定義されていれば、getterを参照してくれるので、ここではvalue値に「inputStream」を設定し、getInputStreamを定義しています。そのほかのパラメータは、contentTypeでファイル形式、contentDispositionでダウンロードするときのファイル名を指定しています。
contentLengthの指定は、ちょっと変則的ですがOGNL式を利用して、indexActionのcontentLengthフィールドの中身を参照するように指定しています。
コラム 「式言語OGNLとは?」 | 
          
| OGNL(Object Graph Navigation Language)は、Javaオブジェクトのフィールドを取得/設定するための式言語です。直接メソッドを呼び出すこともできることが特徴です。 | 
![]()  | 
          
| 図11 「今日のレシピのダウンロード」ボタンの実行結果 | 
以下のコードはindexAction.javaから一部抜粋したものです。
package test; | 
          
■ @Resultサンプルの動き
このサンプルの@Resultの挙動を図示すると、以下のようになります。
![]()  | 
          
| 図12 @Resultサンプルの動き | 
 潜在的な可能性を秘めたStruts 2
        Struts 2は、まだまだ日本語の資料が乏しい状態ですが、インストール手順もシンプルでさまざまなほかのフレームワークとの連携も積極的に行われていて、潜在的な可能性を秘めています。ぜひ皆さんもStruts 2で幸せな開発を体験してみてください。
今回のサンプルはこちらからダウンロードできます。
※編集部注:URLは小文字の方が見やすいため、本稿のクラス名は先頭が小文字で表記していますが、Javaの文法上クラス名は先頭が大文字でないと警告メッセージが出ますので、ご注意ください。
■ @IT関連記事
| Strutsを使うWebアプリケーション構築術 ステップ・バイ・ステップの解説で誰にも分かるStruts講座。効率の高いWebアプリケーション開発をマスターしよう  | 
          ||
| Webアプリの常識をJSPとStrutsで身につける JSP/サーブレット+StrutsのWebアプリケーション開発を通じて、Java言語以外の開発にも通用するWebアプリケーション全般の広い知識・常識を身に付けるための連載です。初心者・中堅・ベテランも大歓迎!  | 
          ||
| Java初心者が超俊敏にWebアプリを作る方法 Eclipseプラグイン「Dolteng」のScaffoldという自動生成機能やSeasar 2.4のHOT deploy機能を利用して、DBの参照・更新・削除ができるSAStrutsのWebアプリを作ります。Java初心者だけでなくStrutsに慣れた開発者も必見です  | 
          ||
| オープンソースTERASOLUNAで作るWebアプリ WebアプリをStrutsで構築する際の種々の問題点。そして、それを解決するSpring、iBATIS連携のオープンソースフレームワークTERASOLUNAのさまざまな機能を紹介していく  | 
          ||
|                | 
            1-2-3 | 
| INDEX | ||
| Page1 | ||
| Strutsに“2”が存在することを知ってましたか?  コラム 「サルが知りたいStruts 2の疑問」 Struts 2をインストールしてみよう  | 
          ||
| Page2 | ||
| @(あっと)いう間に「こんにちは! Struts 2」 「こんにちは! Struts 2」の動作原理  | 
          ||
| Page3 | ||
| 4種類のResultアノテーションを使い分ける コラム 「式言語OGNLとは?」 潜在的な可能性を秘めたStruts 2  | 
          ||
| Java Solution全記事一覧 | 
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。 
 
  | 
 |










