@いう間に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全記事一覧 |
TechTargetジャパン
- Scalaのパッケージ、アクセス修飾子、オブジェクト継承 (2012/5/22)
インポート、パッケージオブジェクト、抽象クラス/抽象メソッド、オーバーライド、final、シールドクラスなども - 基幹系システムでCloud SQLは使えるか試してみた (2012/5/17)
サンプルとしてMRPシステムを作成して動かし、「再帰呼び出し」などのパフォーマンスを測定して検証してみます - アジャイル管理ツール9選+Pivotal Tracker入門 (2012/5/14)
群雄割拠のアジャイルプロジェクト管理ツールを9つ紹介し、特に注目を集めているPivotal Trackerの基本的な使い方を解説します - サーバサイドJSやJavaでWebアプリが作れるXPages (2012/5/11)
Notes/Dominoの資産をサーバサイドJavaScriptやJavaで操作し、HTMLやJavaScript、CSSをUIにできる技術を紹介
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -






