@いう間に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に関する基礎知識を解説する。
|
|