WEBアプリケーション開発フレームワーク

アプリケーションの開発は、フレームワークを利用することで効率化することができます。

フレームワークとはアプリケーションの土台となるソフトウェアです。
フレームワークはアプリケーションの枠組みを定義し、その枠組みにあわせたクラス・インタフェース群を提供します。
アプリケーションの開発者はフレームワークが提供するクラス・インタフェースを実装することでアプリケーションを実現します。

このように枠組みを定義し、アプリケーションごとに共通の部分をフレームワークが提供することにより、 開発者が記述すべきコード量を減らすことができるなどのメリットがあります。

世の中には多くのフレームワークがあり、 開発したいアプリケーションの構造に応じてフレームワークを選択することが重要です。
今回は、有名なWEBアプリケーション開発フレームワークの1つであるStruts2について説明します。

Struts2の概要

Struts 2は以下のような構造のフレームワークです。
(なお、Struts 1とStruts 2は全く違う構造です。以下の説明はStruts 1には適用できませんのでご注意ください。)

Struts 2構造

Struts2はMVCという考え方に基づいて設計されています。
MVCとは、以下のようにアプリケーションをModel,View,Controllerの3種類に分割して考えるモデルです。

名称 役割
Model アプリケーションのうちデータを保持・管理する部分を指し、Controllerからの呼び出しに応じて内部状態を変化する機能を実装する。
View アプリケーションの外観を作成する部分を指し、Modelの内容に応じて外観を作成する機能を実装する。
Controller アプリケーションのうち、ユーザからの制御を処理する部分を指し、ユーザからの入力をModelに対して通知する機能を実装する。

Struts 2においては、Controllerのうち基本的なクラスはStruts 2から提供されます。
したがって、アプリケーション開発者はModel、Viewのみを実装すればアプリケーションを実現することができます。

対象 実装方法
Model setter/getterメソッドを持つクラスとして実装する。Struts 2では、Modelの規約に則ったクラスをActionクラスと呼ぶ。
リクエストパラメータはControllerからsetterを通じてActionクラスに提供され、 ビューに表示すべきデータはActionクラスからgetterを通じてViewに提供される。
View JSP/Velocity用テンプレートなどの形式で実装する。
JSPの場合、Struts2が提供するカスタムタグライブラリを通じてActionクラスから値を取得する。

これらのクラスおよびファイルを実装し、Struts 2の規約に従った設定ファイルによって関連付けることでアプリケーションを実現することができます。


Struts2によるサンプルWEBアプリケーションの仕様

では、具体的にTODO管理アプリケーションをStruts 2上に再構築することでStruts 2での開発作業を確認していきましょう。
この中で、実際に書くべきコードの量が減ったり、アプリケーションの柔軟性が向上することを実感してください。

サンプルは以下のような構造とします。

項目 説明
コンテキストパス struts2todo コンテキストパスとは、アプリケーションサーバがWEBアプリケーションを識別するためのパスです。

URLでは、以下のようになります。
http://(サーバ名:ポート番号)/(コンテキストパス)/


ActionクラスおよびJSPファイルは以下のものを用意するものとします。
原則として、各アクションはServletの実装 に示した仕様に従います。

アクション名 Actionクラス Actionメソッド 結果 転送先(JSPファイル/アクション) 役割
login test.LoginAction show success /WEB-INF/jsp/login.jsp ログイン画面を表示します。
成功した場合はsuccessに転送し、
エラーが発生した場合はerrorに転送します。
error /WEB-INF/jsp/error.jsp
login_action test.LoginAction execute success list ログイン処理を実行します。
成功した場合はsuccessに転送し、
エラーが発生した場合はerrorに転送します。
error /WEB-INF/jsp/error.jsp
list test.ListAction execute success /WEB-INF/jsp/list.jsp 一覧画面を表示します。
成功した場合はsuccessに転送し、
エラーが発生した場合はerrorに転送します。
error /WEB-INF/jsp/error.jsp
add test.AddAction show success /WEB-INF/jsp/add.jsp 作業項目追加画面を表示します。
成功した場合はsuccessに転送し、
エラーが発生した場合はerrorに転送します。
error /WEB-INF/jsp/error.jsp
add_action test.AddAction execute success list 作業項目追加処理を実行します。
成功した場合はsuccessに転送し、
エラーが発生した場合はerrorに転送します。
error /WEB-INF/jsp/error.jsp
edit test.EditAction show success /WEB-INF/jsp/edit.jsp 作業項目編集画面を表示します。
成功した場合はsuccessに転送し、
エラーが発生した場合はerrorに転送します。
error /WEB-INF/jsp/error.jsp
edit_action test.EditAction execute success list 作業項目編集処理を実行します。
成功した場合はsuccessに転送し、
エラーが発生した場合はerrorに転送します。
error /WEB-INF/jsp/error.jsp
delete test.DeleteAction show success /WEB-INF/jsp/delete.jsp 作業項目削除画面を表示します。
成功した場合はsuccessに転送し、
エラーが発生した場合はerrorに転送します。
error /WEB-INF/jsp/error.jsp
delete_action test.DeleteAction execute success list 作業項目削除処理を実行します。
成功した場合はsuccessに転送し、
エラーが発生した場合はerrorに転送します。
error /WEB-INF/jsp/error.jsp
finish test.FinishAction execute success list 完了/未完了切替処理を実行します。
成功した場合はsuccessに転送し、
エラーが発生した場合はerrorに転送します。
error /WEB-INF/jsp/error.jsp
search test.SearchAction execute success /WEB-INF/jsp/search.jsp 検索結果画面を表示します。
成功した場合はsuccessに転送し、
エラーが発生した場合はerrorに転送します。
error /WEB-INF/jsp/error.jsp


ログイン-一覧画面のStruts2による実装

まず、ログイン-一覧画面の一連の流れを実装してみましょう。

ログイン-一覧画面のStruts2による実装


演習:その他の機能の実装

ログイン画面・一覧画面以外をStruts 2上で実装してみましょう。

演習:その他の機能の実装