Struts2を始めよう!

16,417 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
16,417
On SlideShare
0
From Embeds
0
Number of Embeds
697
Actions
Shares
0
Downloads
65
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Struts2を始めよう!

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

×