@いう間にWebアプリを作れる「Struts 2」入門
【特集】Strutsは“2”を使えば、サルでも幸せに
ヤスダネットワーク
関川 晶子
2009/1/8
@(あっと)いう間に「こんにちは! Struts 2」
動作を確認するために、以下のようなアプリケーションを作ってみましょう。
図4 「こんにちは! Struts 2」サンプル |
- index.actionを表示する
- サブミットボタンを選択すると、index-hello.jspの内容を表示する
■ 文字コードはUTF-8
文字コードによるトラブルに出会わないように、作成するファイルの文字コードはすべて「UTF-8」に統一します。Eclipseの設定をしていない場合は以下の手順で、ファイルの文字コードを設定してください。
[メニュー]の[プロジェクト]→[プロパティー]を開き、[リソース]のなかにある[テキスト・ファイル・エンコード]の[その他]で「UTF-8」を選択します。
■ Struts 2アプリの作り方
Struts 2では、1画面作るのに必要なファイルは、たったの2つです。「index.jsp」「indexAction.java」を作成します。[メニュー]の[ファイル]→[新規]→[その他]よりJSPを選択し、WebContentフォルダに、index.jspを作成します。
※編集部注:URLは小文字の方が見やすいため、本稿のクラス名は先頭が小文字で表記していますが、Javaの文法上クラス名は先頭が大文字でないと警告メッセージが出ますので、ご注意ください。
<%@ page language="java" contentType="text/html; charset=UTF-8" |
JSPファイルには以下のコードを追加して、Struts 2のカスタムタグを使えるようにしています。
<%@ taglib prefix="s" uri="/struts-tags" %> |
カスタムタグを使わないでもStruts 2の開発は可能ですが、ほかのカスタムタグと違い、Struts 2のカスタムタグはシンプルで使い勝手が良いので、すぐに習得でいるでしょう。ここでは、FORMタグの替わりに使う<s:form>タグと、サブミットボタンを表す<s:submit>タグを利用します。<s:submit>タグでは、実行するActionクラスのメソッドを、method属性で指定しています。
次は、ActionクラスindexAction.javaを作ります。Actionクラスとは、JSPに記述されている入力フォームの値を設定/取得したり、データベースへの操作を行ったりする役割を持ったクラスのことです。testパッケージを追加し、indexAction.javaを作成します。
import com.opensymphony.xwork2.ActionSupport; |
Actionクラスは、POJOで書くこともできますが、実際にはリクエストパラメータやセッションの取得、バリデーション機能の有効化のためにActionSupportクラスを継承する形になります。
最後に、サブミットボタンを押されたときに表示されるJSPページindex-hello.jspを作成します。
<%@ page language="java" contentType="text/html; charset=UTF-8" |
このJSPは、Actionクラスから渡されたメッセージを表示するだけの簡単なファイルです。
■ 動かしてみよう
サーバを起動し、「http://localhost:8080/sample/index.action」にアクセスします。以下のような画面が出れば、成功です(拡張子が.actionであることに注意しましょう)。
図5 「こんにちは! Struts 2」サンプルの実行結果 |
「こんにちは! Struts 2」の動作原理
このサンプルでは、indexActionクラスは以下のように動作します。
図6 index.actionにアクセスしたときの動作 |
ユーザーからindex.actionの表示要求を受けて、Struts 2はindexActionのインスタンスを生成します。特に実行するメソッドの指定がない場合は、executeメソッドを実行することになっているので、executeメソッドを実行し、結果「success」を得ます。
すると、後述のStruts 2の機能により、結果を表示するページをindex-success.jsp→index.jspの順で探します。index-success.jspは今回作成していないので、次の候補index.jspを結果として表示します。
図7 サブミットボタンを押したときの動作 |
次に、ユーザーがサブミットボタンを選択して、helloメソッドを呼び出すと、Strus 2の内部では、再度indexActionのインスタンスを生成し、helloメソッドを実行します。結果として「hello」を得るので、先ほどと同様、index-hello.jsp→index.jspの順で表示するページを探します。今回は、index-hello.jspが存在するので、index-hello.jspの内容が表示されます。
■ 注意
Struts 2では、リクエストがあるたびにActionクラスが再生成されることを、しっかり覚えておきましょう。再生成されるということは、図6で行ったActionクラス内のフィールドへの変更は、(何も対処しなければ)初期化されているのです。
■ Struts 2の新機能「CodeBehind」による画面遷移のルール
この、一見不思議な画面遷移のルールは、「コードビハインド(CodeBehind)」と呼ばれるStruts 2の新しい機能です。この機能によって、CodeBehindのシンプルなルールを覚えるだけで画面遷移の設定ファイルを書く必要がなくなります。
1つのActionクラスに多くの遷移先が存在する場合、それを設定ファイルに記述するのも、メンテナンスするのもわずらわしくなることがあります。複数の遷移先がある場合は、以下のようなルールに沿って遷移先を探してくれます。
- 「/」+【名前空間】+「/」+【Actionクラス名からActionを除いたもの】+「-」+【メソッド実行時に返される文字列】+「.jsp」、または「.vm」、または「.ftl」
- 「/」+【名前空間】+「/」+【Actionクラス名からActionを除いたもの】+「.jsp」、または「.vm」、または「.ftl」
サンプルを例にすると、上記の【】で指定した値は、以下になります。
表 サンプルの場合 | ||||||
|
よって、サンプルでは以下のような順番でファイルを検索します。
- /test/index-success.jsp
- /test/index.jsp
- /test/index-success.vm
- /test/index.vm
- /test/index-success.ftl
- /test/index.ftl
遷移先は、明示的に指定したい場合は後述するResultアノテーションを利用することでも制御できます。
なんと、一番最初のサンプルで、画面遷移を伴うWebアプリケーションを作る必要な機能を説明できてしまいました。簡単な遷移であれば、設定ファイルも何もいりません。
しかし、遷移先を自分で指定したい場合や、JSP以外のコンテンツに遷移したい場合もあります。このようなときは、Resultアノテーション(以下、@Result)を使って、設定ファイルのわずらわしさから解放されます。次ページでは、@Resultを使ったサンプルについて説明します。
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に関する基礎知識を解説する。
|
|