Struts2を始めよう!
-
Upload
shinpei-ohtani -
Category
Documents
-
view
14.642 -
download
3
Transcript of Struts2を始めよう!
Struts2 を始めよう
大谷 晋平 (shot6)
http://twitter.com/shot6/
アジェンダ自己紹介Struts とは全体像重要なコンポーネントプラグインStruts2 のメリット・デメリットベストプラクティスリソース
自己紹介
大谷 晋平 (Shinpei Ohtani)HN : shot6 or shotISID 勤務Web 開発者 / オープンソース開発
Java/ActionScript/JavaScript/Silverlight/C#
コンタクト先ブログ : http://d.hatena.ne.jp/shot6/Twitter : shot6Skype : shot_6
自己紹介 ( 続き )オープンソース
T2 フレームワーク近代的な Web アプリに向いたシンプルなフレーム
ワークhttp://code.google.com/p/t-2/wiki/Index
Struts とは ?
StrutsJava の Web フレームワーク
Servlet と JSP をベースにしているMVC pattern2 ベースのアーキテクチャApache Software License2http://struts.apache.org/ で開発中
Struts1 とは ?
Struts12002 年以来 Web フレームワークのデファクト
スタンダードPofEAA でいうところの Front controller pattern
ActionServlet
XML でコンポーネントを設定する開発者は Action と ActionForm, jsp を作成
Action はユーザからのリクエストを受け付けるテンプレートメソッドパターンの実装
ActionForm は DTO
Struts2 とは ?
Struts2 とはStruts1 とは全く違う !最新は 2.1.6-ga.ベースは WebWork というフレームワーク
その中でも Xwork core を使用POJO でも出来る Action を作成
ActionForm はもう作成しない. Action が兼務.基本的にはフィルタパターンとコマンドパターン
プラグインな仕組み複数のテンプレートエンジンに対応
全体像
From http://struts.apache.org/2.1.6/docs/nutshell.html
重要なコンポーネント
Struts2 では 3 つの重要なコンポーネントActionResultInterceptor
Action
ユーザのアクションを受け付けるクラスXwork2 の Action インタフェースを実装または POJO で以下のメソッドを持つように
作成String execute() なメソッド struts.xml で execute メソッドの代替を指定struts2-convention-plugin の @Action を使う
サンプルをみると、どれも Action インタフェースを継承しているけども。。。
Action( つづき )
その他 Action での注意点Jsp などからアクセスされる拡張子のデフォル
トは .action または何もなしAction はチェインして実行する事が出来るAction は xml 設定かアノテーションで指定で
きる
Action サンプル
Action 設定
Login アクション (mailreader2.Login)Login_input -> /Login.jspLogin_cancel -> Welcome アクションにリダイレクトLogin_expired -> ChangePassword アクションチェー
ンException mapping
アノテーションで Action 設定
幾つかだけ紹介すると @Result : 画面遷移用 @Action: アクションメソッドを指定する @Actions :複数の呼び出しを同一メソッドに指定する
Result
Xwork2 の Result インタフェースを実装Action の結果を生成する :ServletDispatcherResult(default)ServletRedirectResultStreamResultJasperReportsResult from jasper-report-pluginFreeMarkerResultChartResultand so on….
Result( 続き )
Result は以下の 2 通りの方法で設定xml
<result name="login" type="redirectAction">Login_input</result>
アノテーション@Result(name = "list", value = "listPeople.action",
type = ServletRedirectResult.class)
デフォルトの Result 設定
Interceptor
Interceptor はアクションを実行するまでのフィルタのようなもの. AOP のような感じ .XWork2 の Interceptor インタフェースを実装Struts2 拡張はこのインタセプタが中心Struts2 自身もインタセプタによって構築され
ているAOP のアラウンドインタセプタのような感じActionProxy から呼ばれて実行される
Interceptor( 続き )
Interceptor こそが Struts2 拡張そのもの .Spring との AutoWired の連携デバッグ例外ハンドリングファイルアップロードトークン生成とバリデーションセキュリティチェック
Interceptor( 続き 2)
Interceptor を使うには xml 設定アノテーション指定
Interceptor の設定
Plugins
Struts2 はプラグインが大量にある !ほとんどがインタセプタから介入するタイプいくつかは Result で描画時点での切り替え全てのプラグインは struts.xml で設定可能
Convention plugin
プラグイン例 1CoC を実現する Convention plugin
Converntion over configuration( 設定よりも規約を重視する )
Struts2 はゼロコンフィギュレーションをうたっている
ディレクトリを規約を頼りにトラバースしてコンポーネントを見つけるテクニック
Convention plugin( 続き )
Struts2 の規約詳細クラス名は XxxAction のようにするとアク
ションとみなされる .例 1 : examples.action.HogeAction
結論としては /hoge.action と解釈される“action|actions|struts|struts2” のどれかにパッケージ
名がマッチするとそこをルートとしてみなす次に、 クラス名から“ Action” を削除して、小文字
にする最後に “ .action” を最後につける -> hoge.action
Convention plugin( 続き 2)
規約例 2 : examples.action.mine.MyAction
結論としては、 /mine/my.actionExample.action パッケージをルートとみなすサブパッケージ (mine) はアクセスされる url の一
部になる結論としては : /mine/my.action
Convention plugin サンプル
Convention plugin サンプル
Convention plugin サンプル
Without it, it won’t work at my sample.
REST plugin
REST-like なリクエストを扱うプラグインRails の REST-like な規約にインスパイアConvention plugin をさらに拡張Example
examples.hoge.FooController -> /foo• 成功すると、 foo-success.jsp に遷移• 失敗すると、 foo-failed.jsp に遷移
REST の規約
Rails の REST-like な規約GET: /movies => method="index”GET: /movies/Thrillers => method="show",
id="Thrillers”GET: /movies/Thrillers;edit => method="edit",
id="Thrillers”GET: /movies/Thrillers/edit => method="edit",
id="Thrillers”GET: /movies/new => method="editNew”POST: /movies => method="create”
REST サンプル (Action)
REST サンプル (jsp)
REST サンプル (xml)
Struts1 plugin
レガシーな Struts1 コードを Struts2 で動かすAction と ActionForm を変更無しで動かすcommons-validator もサポートする
Struts2 はバリデータ部分も Xwork ベースただし、 Struts1 のタグリブはいっさい動かな
い
Struts1 設定サンプルStruts1Action を常にセット
実際の Action クラスを指定
Struts2 のメリット・デメリット
メリット仕組みを知っていれば拡張性は非常に高いプラグインが最初から大量に用意されており、
自製しなくてもよい場合があるJsp 以外のテンプレートエンジンと簡単に連携
jsp/freemarker/velocity
Jsp のビューコンポーネントやタグリブも豊富
Struts2 のメリット・デメリット
デメリットプログラミングモデルが混在していて一つ
じゃないので混乱の元。一つに統一すべき。保守性の低い CoC を過剰に使っている
convention プラグインはあまり良いとは言えないXWork2 ベースなので Xwork2 と Struts2 で
いったりきたりしないといけない一つに統一してしまうのが吉
設定ファイルの継承などはいらないJar ファイル内の XML ファイルは探しにくい
Struts2 のベストプラクティス
Action または ActionSupport を継承するモデルに統一
インタセプタを熟知して、拡張機能をまずは最小限に絞り込んで、徐々に足す
設定ファイルはユースケースか業務観点で小分けに分割する
Struts2 のベストプラクティス 2
Spring が使えるので出来るだけ使うまたは Guice/Seasar2/Lucy などを使うStruts.xml には画面遷移とインタセプタの指定DI コンテナの設定ファイルにコンポーネント
とスコープの管理Convention プラグインを使う場合は規約
と影響範囲を最小限に絞り込む
Struts2 リソース
Struts2 tutorialshttp://struts.apache.org/2.1.6/docs/tutorials.html
Struts2 developer guidehttp://struts.apache.org/2.1.6/docs/guides.html
Pluginshttp://struts.apache.org/2.1.6/docs/plugins.html
Thanks
Enjoy with Struts2!!