Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Struts2 を始めよう 大谷 晋平 (shot6) http://twitter.com/shot6/
アジェンダ <ul><li>自己紹介 </li></ul><ul><li>Struts とは </li></ul><ul><li>全体像 </li></ul><ul><li>重要なコンポーネント </li></ul><ul><li>プラグイン ...
自己紹介 <ul><li>大谷 晋平 (Shinpei Ohtani) </li></ul><ul><ul><li>HN : shot6 or shot </li></ul></ul><ul><ul><li>ISID 勤務 </li></ul>...
自己紹介 ( 続き ) <ul><li>オープンソース </li></ul><ul><ul><li>T2 フレームワーク </li></ul></ul><ul><ul><ul><li>近代的な Web アプリに向いたシンプルなフレームワーク <...
Struts とは ? <ul><li>Struts </li></ul><ul><ul><li>Java の Web フレームワーク </li></ul></ul><ul><ul><ul><li>Servlet と JSP をベースにしている...
Struts1 とは ? <ul><li>Struts1 </li></ul><ul><ul><li>2002 年以来 Web フレームワークのデファクトスタンダード </li></ul></ul><ul><ul><li>PofEAA でいうと...
Struts2 とは ? <ul><li>Struts2 とは </li></ul><ul><ul><li>Struts1 とは 全く違う ! </li></ul></ul><ul><ul><li>最新は 2.1.6-ga. </li></ul...
全体像 From http://struts.apache.org/2.1.6/docs/nutshell.html
重要なコンポーネント <ul><li>Struts2 では 3 つの重要なコンポーネント </li></ul><ul><ul><li>Action </li></ul></ul><ul><ul><li>Result </li></ul></ul...
Action <ul><li>ユーザのアクションを受け付けるクラス </li></ul><ul><ul><li>Xwork2 の Action インタフェースを実装 </li></ul></ul><ul><ul><li>または POJO で以下...
Action( つづき ) <ul><li>その他 Action での注意点 </li></ul><ul><ul><li>Jsp などからアクセスされる拡張子のデフォルトは .action または何もなし </li></ul></ul><ul>...
Action サンプル
Action 設定 <ul><li>Login アクション (mailreader2.Login) </li></ul><ul><ul><li>Login_input -> /Login.jsp </li></ul></ul><ul><ul><...
アノテーションで Action 設定 <ul><li>幾つかだけ紹介すると </li></ul><ul><ul><li>@Result  : 画面遷移用 </li></ul></ul><ul><ul><li>@Action : アクションメソッ...
Result <ul><ul><li>Xwork2 の Result インタフェースを実装 </li></ul></ul><ul><li>Action の結果を生成する : </li></ul><ul><ul><li>ServletDispat...
Result( 続き ) <ul><li>Result は以下の 2 通りの方法で設定 </li></ul><ul><ul><li>xml </li></ul></ul><ul><ul><ul><li><result name=&quot;lo...
デフォルトの Result 設定
Interceptor <ul><li>Interceptor はアクションを実行するまでのフィルタのようなもの. AOP のような感じ . </li></ul><ul><ul><li>XWork2 の Interceptor インタフェースを...
Interceptor( 続き ) <ul><li>Interceptor こそが Struts2 拡張そのもの . </li></ul><ul><ul><li>Spring との AutoWired の連携 </li></ul></ul><u...
Interceptor( 続き 2) <ul><li>Interceptor を使うには </li></ul><ul><ul><li>xml 設定 </li></ul></ul><ul><ul><li>アノテーション指定 </li></ul><...
Interceptor の設定
Plugins <ul><li>Struts2 はプラグインが大量にある ! </li></ul><ul><ul><li>ほとんどがインタセプタから介入するタイプ </li></ul></ul><ul><ul><li>いくつかは Result ...
Convention plugin <ul><li>プラグイン例 1 </li></ul><ul><li>CoC を実現する Convention plugin </li></ul><ul><ul><li>Converntion over co...
Convention plugin( 続き ) <ul><li>Struts2 の規約詳細 </li></ul><ul><ul><li>クラス名は XxxAction のようにするとアクションとみなされる . </li></ul></ul><u...
Convention plugin( 続き 2) <ul><li>規約 </li></ul><ul><ul><li>例 2 : examples.action.mine.MyAction </li></ul></ul><ul><ul><ul><...
Convention plugin サンプル
Convention plugin サンプル
Convention plugin サンプル Without it, it won’t work at my sample.
REST plugin <ul><li>REST-like なリクエストを扱うプラグイン </li></ul><ul><ul><li>Rails の REST-like な規約にインスパイア </li></ul></ul><ul><ul><li...
REST の規約 <ul><li>Rails の REST-like な規約 </li></ul><ul><ul><li>GET: /movies => method=&quot;index” </li></ul></ul><ul><ul><l...
REST サンプル (Action)
REST サンプル (jsp)
REST サンプル (xml)
Struts1 plugin <ul><li>レガシーな Struts1 コードを Struts2 で動かす </li></ul><ul><ul><li>Action と ActionForm を変更無しで動かす </li></ul></ul>...
Struts1 設定サンプル Struts1Action を常にセット 実際の Action クラスを指定
Struts2 のメリット・デメリット <ul><li>メリット </li></ul><ul><ul><li>仕組みを知っていれば拡張性は非常に高い </li></ul></ul><ul><ul><li>プラグインが最初から大量に用意されており...
Struts2 のメリット・デメリット <ul><li>デメリット </li></ul><ul><ul><li>プログラミングモデルが混在していて一つじゃないので混乱の元。一つに統一すべき。 </li></ul></ul><ul><ul><li...
Struts2 のベストプラクティス <ul><li>Action または ActionSupport を継承するモデルに統一 </li></ul><ul><li>インタセプタを熟知して、拡張機能をまずは最小限に絞り込んで、徐々に足す </li...
Struts2 のベストプラクティス 2 <ul><li>Spring が使えるので出来るだけ使う </li></ul><ul><ul><li>または Guice/Seasar2/Lucy などを使う </li></ul></ul><ul><u...
Struts2 リソース <ul><li>Struts2 tutorials </li></ul><ul><ul><li>http://struts.apache.org/2.1.6/docs/tutorials.html </li></ul>...
Thanks <ul><li>Enjoy with Struts2!! </li></ul>
Upcoming SlideShare
Loading in …5
×

Struts2を始めよう!

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

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>

×