Strutsは、MVCフレームワークの一種で、2000年代にJavaのWebアプリケーションフレームワークとして、一世を風靡しました。
なお、Strutsには、1系と2系があります。
今は、1系はもうサポート停止されていますが、2000年の初期ごろに作られたシステムだと、未だに1系で実装されているケースは少なくないです。
1系と2系は全く別物
基本的に、1系と2系は名前は同じですが、全く別のフレームワークであるという点には注意しましょう。
1系は、元々Jakarutaというプロジェクトが作成していた純正のStrutsなのですが、2系は、「WebWork2」という全く別のフレームワークをベースにして、Struts1系の考え方を取り込んで作られたフレームワークになるので、「1系を理解していたら、2系もそんなには違わないのでは?」と安易に思われて開発すると痛い目に合うので注意です。
Struts1系
バージョン
バージョン | リリース日 | 特徴 |
---|---|---|
1.3.10 | 20008年12月 | 1系はこのバージョンが最終版になります。 |
Struts2系
特徴
Springフレームワークに先越される形となった下記の機能を実装した。
- DI(依存性の注入)
- AOP(アスペクト指向プログラミング)
- Actionクラスが、POJO(Plain Old Java Object)になった。
バージョン
バージョン | リリース日 | 特徴 |
---|---|---|
2.0 | 2007年2月 | |
2.1 | 2009年1月 | |
2.2 | 2010年8月 | |
2.3 | 2011年12月 | |
2.5 | 2016年5月 |
動作の仕組み
Struts2は図にすると、下記のような仕組みになっています。
web.xml
まずは、ブラウザからのリクエストはTomcat等のアプリケーションサーバーのフィルターで受けます。そこから、Struts2のディスパッチャー・フィルターに行くように設定します。
コントローラー
ディスパッチャーフィルター
Sturts2で全体を制御する中心的な役割です。
クライアント(Webブラウザ)からリクエストがあると、一番最初にこれが受け取ります。
動作原理
struts.xmlのURLマッピングの設定に基づいて、Actionを選択して、そのクラスをインスタンス化します。
インターセプター
ディスパッチャーフィルターが受け取ったリクエストの実際の処理を行います。
モデル
アクション
Struts1で言えば、「アクションクラス」と「アクションフォーム」がひとまとまりになったもののイメージです。
POJOとして作成が可能です。POJOについては下記の記事で解説しています。
役割
- 各種パラメータの保管
- 必要なアクションの実行
勉強する際の参考書籍
「Eclipseではじめる Javaフレームワーク入門 第4版 クラウド開発対応」
Strutsだけでなく、Spring、Seasar2等多岐に渡るフレームワークの解説本になっていますが、数少ないStruts2向けの参考書籍です。
「Struts2 フルスタック化&Webアプリケーション開発 ~Struts2+Spring 2+Tiles+iBATIS+GWTで作るショッピングサイト~」
書籍タイトルに、Struts2と書いてあるだけあって、参考書だとはわかりますが、あくまでSpring2だったりと連携すること前提の解説書なので、Struts2だけに着目した内容ではありません。
「サーブレット&JSPエッセンシャル逆引き大全500の極意」
本のタイトルからして、「JSP、サーブレット」に関する内容しかないのでは?と思われるかもしれませんが、後ろの方にStruts2についてのまとまった情報が載っているので、下手な参考書よりは参考になると思います。(2012年に発行されたということもあり、Struts2のバージョンは、2.3を扱っています。)
Struts.xmlの書き方
設定ファイルのタグの意味
タグ名 | 説明 |
<package> | パッケージに関する設定を指定する。 |
<action> | アクションに関する設定を指定する。 |
<result> | アクションの戻り値に応じて実行されるJSPファイルを指定します。 |
<package>(パッケージタグ)で使える属性
属性 | 必須/任意 | 説明 |
name | 必須 | パッケージ名を表す。 |
namespace | 任意 | |
extends | struts.xmlが継承でき、Struts2がデフォルトで用意している親のxmlを示す。 |
<action>(アクションタグ)で使える属性
タグ | 必須/任意 | 説明 |
name | 必須 | name属性は、URLの最後に現れる「.action」を除いた部分を指定する。 |
class | 実際のアクションの完全修飾子 |
<result>(結果タグ)で使える属性
タグ | 必須/任意 | 説明 |
name | 任意 | 省略した場合は、「success」が自動で入る。 |
この記事へのコメントはありません。