Your SlideShare is downloading. ×
SAStruts Seminar In Tripodworks
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

SAStruts Seminar In Tripodworks

30,307
views

Published on

Published in: Technology

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

No Downloads
Views
Total Views
30,307
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
0
Comments
0
Likes
12
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Transcript

    • 1. http://d.hatena.ne.jp/morningmist7/ トライポッドワークスセミナー  2008/04/14 ウェブアプリケーションフレームワーク SAStruts 入門
    • 2.
      • Web アプリケーションフレームワークについて
    • 3. Web アプリケーションフレームワークとは
      • 構築する上でその元となる土台の部分
      • フロントエンドをカバーするもの(が多い)
      • ライブラリとは違う
        • ライブラリの場合、組み合わせや処理順序の判断はプログラマが行う
        • フレームワークの場合、呼び出しはフレームワーク側から
    • 4. Web アプリケーションフレームワークのメリデリ
      • メリット
        • 定型処理や動作環境の差異ををフレームワークに任せることで、開発者はビジネスロジックの問題に専念できる
        • 工数の削減,開発リスクの回避,品質の向上が期待
        • 設計の標準化により,保守やアプリケーション統合が容易になる
        • セキュリティ要件への対応
        • 既存コンポーネントを利用するベスト・プラクティスの実践
          • 「車輪の再発明」を避ける、怠惰な開発
      • デメリット
        • それなりの学習コスト
        • フレームワークの決まりに従って開発しなければならない
        • 小規模アプリケーションの開発では必ずしも導入が向かない
        • 問題領域の解決に向かないケースも出てくる
    • 5. Web アプリケーションフレームワークのメリデリ
      • フレームワークは ソースコードを触れる ・ イジれる ・ 見通せる 程度のサイズがベストだと考えます。
    • 6. Web アプリケーションフレームワーク
      • 開発言語に制約の無い場合、 Web アプリケーション FW の選択肢は多い
      • java
        • SAStruts / Teeda
        • Struts2
        • JBOSS Seam
        • GlassFish Mojarra
      • PHP
        • CakePHP
        • Symphony
        • Zend Framework
      • Perl
        • Catalyst
        • CGI:Application
      • Ruby
        • Ruby on Rails
    • 7. Web アプリケーションフレームワークの仕事
      • リクエストから、関連付けられているコントローラを特定する
      • リクエストのパラメータを何らかの変数(オブジェクト)に格納する
      • 入力値のバリデーションを行ない、 NG なら特定の URL に遷移する。
      • コントローラにリクエストのパラメータを格納したオブジェクトを設定する
      • コントローラのメソッドを呼び出し、特定の URL に遷移
    • 8. シンプルなフレームワークが流行ってきている
      • 要件の複雑化・高度化
        • 学習コストが確保できない
        • フレームワークでカバーできない領域が増えてきている
      • アジャイル開発が注目され、少人数・精鋭でのプロジェクトがフォーカスされている
        • FW に縛られない(自由度が高い)方がアイデアを実装に落としやすい
        • フレームワークをカスタマイズしやすい
    • 9.
      • java(J2EE) のいいところ
    • 10. java(J2EE) を使うメリット
      • オープンソースソフトウェアの資産
        • ミドルウェアが豊富
        • 逆にアプリは少ないですね ..
      • JVM のミッションクリティカル分野での実績
        • 10 数年に渡って叩かれ続けた実績は信頼に値する
    • 11. java(J2EE) を使うメリット
      • 確立された、エンタープライズアーキテクチャとの統合
        • Enterprise Architecture 、 EA 。組織のプロセス / 情報システム / 人事・部門などの構造と機能を包括的かつ厳密な手法で記述する手法であり、それによって組織がその戦略的目的に沿って機能するように方向性を与えるものである。
      • スケーラブルなシステムへの対応
        • 商用/ OSS データベースとの親和性
        • 商用/ OSS アプリケーションサーバとの親和性
      • システム監視ツールの充実
        • 統計・監視・警告
    • 12. java(J2EE) を使うメリット
      • 開発環境の充実
        • 個人の開発環境が作りやすい
        • 充実した IDE 環境
      • 開発者の資産(ノウハウ)
        • ソースコード資産
        • J2EE でユーザに何をもたらすことができるか?の蓄積がある
    • 13.
      • SAStruts とは
    • 14. SAStruts とは
      • Seasar プロジェクトのチーフコミッタ・ひがやすを氏が開発
      • Super Agile Struts の略
        • スクリプト言語のもつ Agile 性と型の強い言語の良さを併せ持ち、その良さを超える
      • 大規模プロジェクトを支えるものとして考え出されたもの
    • 15. SAStruts の特徴
      • Struts(1.2.9) ベース
      • HOT Deploy 対応
        • ソースを保存しただけでデプロイ完了
      • public フィールド対応
        • フレームワーク上に作るクラスは setter/getter 不要
      • 設定ファイル無し
      • POJO ベース
        • フレームワークによる継承や実装は不要
    • 16.
      • 掴みはこんな感じ
    • 17. 入力されたメッセージの出力
    • 18. 環境
      • jdk1.5.0_14
      • apache-tomcat-5.5.26
      • Eclipse3.3.2
      • sa-struts-1.0.2-rc1
        • ブランクプロジェクト (*1) から始めるのがいいでしょう
      (*1)http://sastruts.seasar.org/download/2008-03-30/sa-struts-blank-1.0.2-rc1.zip
    • 19.
      • SAStruts の Action
    • 20. Action クラスと URL マッピング
      • Action クラスは、ルートパッケージ .action パッケージに、 xxxxAction.class のクラス名で作成
      • クラス名から URL が決定されるのでマッピング( struts-config.xml )は不要。
      • Action を付加 :
        • /message/ ⇒ /messageAction
      • 先頭を大文字に
        • /messageAction ⇒ /MessageAction
      • 先頭をドット (.) に変換
        • /MessageAction ⇒ .MessageAction
      • ルートパッケージ .action を先頭に付加
        • .MessageAction ⇒ morningmist7.action.MessageAction
    • 21. 入力画面を作る
      • 入力画面は Action と JSP で作成
      • バリデータ(検証)のフェーズ
        • Action が実行される前にする汎用的な検証(門前払い)
          • 書式検証
          • アノテーションで指定
        • ある入力項目に対して独自の検証
          • 整合性検証
          • アノテーションと独自メソッドで指定
        • 入力全体に対する検証
          • 整合性検証
          • 独自メソッドで指定。例外処理で NG 送出
    • 22. バリデーション
      • 書式検証
    • 23. バリデーション
      • 特定の項目に対して独自の検証
      • org.apache.struts.action.ActionMessages を返すメソッドを指定する。
      • null を返した場合は検証通過。
    • 24. バリデーション
      • 入力全体に対しての検証
    • 25. バリデーション
      • エラーメッセージの定義
      • application_ja.properties
      • {0} には入力フィールドの name 属性が入る
        • 例: requiredText は必須です。
    • 26. バリデーション
      • メッセージに任意の項目名を含めたいさね
      • labels.xxx に、任意の項目名を入れる。ラベルの定義
      • バリデータアノテーションにラベルのパラメータを渡す
    • 27. バリデーション
      • 特定の項目だけメッセージルールを変えたい
      • application_ja.properties
      • errors.xxxx という任意のキーとメッセージを追加。
      • バリデータアノテーションにメッセージキーのパラメータを渡す
    • 28. エラーページ
      • Tomcat の話ですが重要なので
      参考: http://d.hatena.ne.jp/taichitaichi/20080211 無駄にリッチなエラー画面(w
    • 29. 画面遷移
      • Action のメソッド (execute) の戻り値を JSP 名(またはパス)で指定する。
      • パスに注意。 hogeAction は /hoge/ にマッピングされるのに留意。
      • hogeAction #execute の return “abc.jsp” は、 /hoge/abc.jsp に配置する。
      • return “/def.jsp” を指定すると、ルートからのパスを指定できる。
      • return “ghi.jsp?redirect=true” を指定すると Forward ではなく Redirect になる。
      • 外部サイトには、 return “ http:// xxxx?redirect =true ” を指定する
    • 30. 画面遷移
      • Action のどのメソッド名を呼び出すかは URL で指定
      • hogeAction#doAction の場合、 /hoge/doAction
      • hogeAction#index の場合、 /hoge/  とメソッドを省略可能
      • submit ボタンを使う場合、 name 属性にメソッド名を指定する
    • 31. 画面遷移
      • Action のどのメソッド名を呼び出すかは URL で指定
      • hogeAction#doAction の場合、 /hoge/doAction
      • hogeAction#index の場合、 /hoge/  とメソッドを省略可能
      • submit ボタンを使う場合、 name 属性にメソッド名を指定する
    • 32.
      • SAStruts の JSP
    • 33. JSP2.0
      • SAStruts では素の JSP ( JSP2.0 )を利用する
      • JSP コンフィグレーション
        • web.xml jsp-config 要素の下に JSP の設定をまとめることができるようになった
    • 34. JSP2.0
      • EL(Expression Language)
        • スクリプトレットやカスタムタグの代替。プロパティーへのアクセスや、論理式、計算を EL の書式内に記述できる
    • 35. JSP で使えるタグライブラリ
      • Standard Taglib が使える
      • Struts のカスタムタグが使える (html: bean: tiles: とか)
      • SAStruts 独自のタグライブラリが使える
    • 36. JSP で使えるタグライブラリ
      • <s:form>
        • action 属性の値に拡張子 (.do) が付かないこと以外は html:form と同じ
      • ${f:h(param)}
        • HTML エスケープ
      • ${f:u(param)}
        • URL エンコード
      • ${f:br(param)}
        • 改行を br タグに変換
    • 37. JSP で使えるタグライブラリ
      • ${f:date(datestr, ‘[pattern]')}
        • 日付文字列のフォーマット変換
        • <fmt:formatDate> と合わせて使う
        • <fmt:formatDate value=“${f:date(datestr,’yyyymmdd’)}” pattern=“yyyy/MM/dd” >
      • ${f:number(numstr, ‘[pattern]')}
        • 数値のフォーマット変換
        • <fmt:formatNumber> と合わせて使う
        • <fmt:formatNumber value=“${f:number(numstr,’####’)}” pattern=“#,###” >
    • 38. JSP でレイアウトを実装する – tiles を利用
      • レイアウト用ページ (/common/layout.jsp)
      • 本体側 JSP
    • 39.
      • 作り方が大体分かった(?)ところで、
      • セットアップ方法に戻ります
    • 40. セットアップ
      • Super Agile Struts - Setup http://sastruts.seasar.org/setup.html を参照
      • Tomcat コンテキストの設定
    • 41. セットアップ
      • Tomcat server.xml の設定
        • useBodyEncodingForURI 属性と URIEncoding 属性
          • get パラメータに含まれるマルチバイト文字をエンコーディングさせるために必要
    • 42. セットアップ
      • Tomcat context.xml の設定
        • Tomcat の Session Persistence を無効化
        • Tomcat は停止時にセッション状態をファイルに保存、起動時に読み込むことで、セッションを永続化するようになっている (Session Persistence)
        • セッションに積むインスタンスがシリアライズに対応していないと Exception が発生したりと都合がよくない場合があるので無効に。
    • 43. セットアップ
      • Tomcat web.xml の設定
      • welcome-file-list (デフォルトページ設定)を空に。
    • 44.
      • SAStruts の設定
      • Seasar2.4 ベースのフレームワークにほぼ共通です
    • 45. resources/s2container.dicon
      • Seasar2 のデプロイ方法を変更するための dicon ファイル。
      • デプロイ方法には &quot; 熱い &quot; 順に
        • HOT deploy
        • WARM deploy
        • COOL deploy  
        • の 3 種類。総称して SMART deploy と呼ぶ。
      • HOT deploy: コードを書いている時に利用する。アプリケーションサーバを起動したままでソースコードの修正が即座に反映される。
      • WARM deploy: 主に JUnit でのテストを想定。必要なコンポーネントだけがデプロイされ、修正を即座に認識しない。
      • COOL deploy: パフォーマンス重視で運用時に利用する。アプリケーションの起動時にすべてのデプロイを行う。
    • 46. resources/s2container.dicon
      • #ENV は、 env.txt の内容を示している。
      • 3 つの dicon ファイルが指示されている。
        • warmdeploy.dicon 、 hotdeploy.dicon 、 cooldeploy.dicon は s2-framework-xxx.jar の中に含まれているので存在を気にしなくて良い。
    • 47. resources/convention.dicon
      • 前述の SMART deploy の規約を定義するための dicon ファイル。
        • アプリケーションのネーミング規約を定義
      • Seasar2 では、以下のようなパッケージ構成を推奨している。
        • hogepkg/action
        • hogepkg/dto
        • hogepkg/logic
        • hogepkg/xxx  
        • この場合はルートパッケージが hogepkg となるため、 convention.dicon は以下のようになる。
    • 48. resources/convention.dicon
      • 複数のサブシステムに分割した場合などは、ルートパッケージが複数指定できる
      • ちなみにこの dicon ファイルに登録されている『 PersistenceConventionImpl 』は S2JDBC で利用されるコンポーネント。テーブルとエンティティ名、カラム名とフィールド名のマッピングに利用される。
    • 49. resources/creator.dicon
      • どの名前のサブパッケージを SMART deploy の対象とするのか?を設定するための dicon ファイル
      • 他のサブパッケージを含める場合は以下のクラスも用意されている
      • org.seasar.framework.container.creator.DxoCreator
      • org.seasar.framework.container.creator.DaoCreator
      • org.seasar.framework.container.creator.HelperCreator
      • org.seasar.framework.container.creator.InterceptorCreator
      • org.seasar.framework.container.creator.ValidatorCreator
    • 50. resources/customizer.dicon
      • creator.dicon で登録されるサブパッケージのコンポーネントの振る舞いをカスタマイズ(再定義)するための dicon ファイル
      ここと web.xml にフレームワーク特有の振る舞いが入ることが多い。
    • 51. resources/jdbc.dicon
      • JDBC データソースを定義する dicon ファイルで、データベースアプリケーションには必須の dicon ファイル
      • データソース毎に設定例が書かれているので、コメントを付けたり外したりして設定する。
    • 52.
      • SAStruts 専用の開発環境
      • SAStruts Plugin
    • 53. SAStruts Plugin
      • Java ファイルからポップアップメニューかショートカットキー( F6 )で対応する JSP ファイルを開く・作成する
      • JSP ファイルからポップアップメニューかショートカットキー( F7 )で対応する Java ファイルを開く・作成する
      • アップデートサイトから落としましょう
        • http://eclipse.seasar.org/updates/3.3/
    • 54. SAStruts Plugin
      • [ プロジェクト ]⇒[ 設定 ] に” SAStruts” メニューが追加されている。
        • プログラムの配置に関する情報を設定
    • 55. SAStruts Plugin
      • Action から対応する JSP を開く
      右クリック・コンテキストメニューから見えるように。 ってか、 F6 押しましょう。 return jsp 名 の行にカーソルを置いておくのがコツ
    • 56. SAStruts Plugin
      • JSP から対応する Action を開く
      右クリック・コンテキストメニューから見えるように。 ってか、 F7 押しましょう。 <s:form> の行にカーソルを置いておくのがコツ
    • 57.
      • S2JDBC を使ったデータベースとの連携
      • S2JDBC だけで、ご飯 3 杯はイケそうなこともあり、
      • 今回は概要だけ説明します。
    • 58. S2JDBC の特徴
      • 「 S2JDBC 」は、もともと JDBC の簡易ラッパの名称だった。
      • より良い JPA(Java Persistence API) として開発されたもの
      • 可読性の高さ
      • 流れるようなインタフェース
      • 脱 Convention over Configuration
      • 90% の SQL を自動生成
      • Java(5) の良さを最大限活用している
    • 59. S2JDBC の基本形
      • Action クラスに、 jdbcManager を宣言する
        • Seaser2 のフィールドインジェクション( public フィールド対応)によって、自動的に org.seasar.extension.jdbc.JdbcManager がセットされる。
      • 接続設定は resource/jdbc.dicon に設定
      • ダイアレクトは、 resource/s2jdbc.dicon に設定
    • 60. トランザクション
      • SAStruts のデフォルトでは、 Action 単位でトランザクションが掛かる
      • 詳細は以下を参考に(と逃げておきますw)
        • Seasar2: 第 3 回 Seasar2 による宣言的トランザクション <http://www.ibm.com/developerworks/jp/java/library/j_j-seasar03/>
    • 61. S2JDBC でできること
      • 検索(結合)(ページング)・更新
      • 件数取得結果セットに対するイテレーション処理
      • ストアド呼び出し
      • SQL インジェクション対策( Preparedstatement)
      • SQL を外部ファイルから取得して実行
        • S2Dao の 2WaySQL も OK
      • 注: Beans も一緒に活用する
    • 62. H2 Database Engine
      • 開発者にとって扱いやすいデータベース
        • java 製
        • インストールが超簡単
        • 起動が超簡単
        • ファイルサイズが軽い
        • 可搬性が良い
        • SQL は PostgreSQL 互換(詳細未確認)
      学習環境にはうってつけのデータベース
    • 63. H2 Database Engine -インストールと起動
      • 公式サイトにアクセス
        • http://www.h2database.com/html/frame_ja.html
      • 以下のファイルをダウンロード
        • Version 1.0.69 (2008-03-29)
        • All platforms (zip, 4.1 MB)
      • Zip ファイルを解凍
      • h2/bin/h2.bat をダブルクリック
      • Web ブラウザが自動起動し、 H2 コンソール( http://localhost:8082/ )が表示されれば OK
      複数の PC から共有して使う場合は注意。 4番の起動ファイルを以下の内容にして実行すれば OK
    • 64. H2 Database Engine -データベースの作成と接続
      • コンソールの『 JDBC URL: 』に注目
      • 新しい URL で接続したときにデータベースが生成されます。
      • 『 jdbc:h2:~test 』で接続した場合
        • C:Documents and Settings にデータベースファイルが生成される( [logonName]test.xxx)
      • 『 jdbc:h2:sastruts 』で接続した場合
        • h2/bin/ にデータベースファイルが生成される
      • sa/( パスワードなし ) で接続
        • CREATE USER 文も使えますが開発用の話なので割愛
    • 65.
      • データベースを使ったアプリを作る
      • 簡易 TODO 管理アプリケーションを作ってみたので解説
    • 66. TODO リストアプリケーション
    • 67. まとめ
      • POJO ベースになったのは非常に良い
      • Make&Try のサイクルが Hot Deploy によって劇的に早くなり、プログラマの思考を止めずに開発ができる
      • public フィールドによって行数が少なくなり、コードの可読性が向上している。
      • Seasar2 によって、カスタマイズポイントもフレームワーク化されている
        • 独自バリデーションを追加できる
        • 独自アノテーション&インターセプタで振る舞いを変えることができる
      • Action の共通部分は“共通 Action” 化や“共通ロジック”に追い出すこと
      • 作ってみた感じ、参照系と更新系は Action を分割した方がいいかも
        • Action が大きくなりやすい
        • TodoAction と、 Todo s Action みたいな感じに
    • 68. 参考文献・スペシャルサンクス
      • SAStruts 公式サイト
        • http://sastruts.seasar.org/
      • S2JDBC 公式サイト
        • http://s2container.seasar.org/2.4/ja/s2jdbc.html
      • SAStrutsPlugin 公式サイト
        • http://sastruts.seasar.org/sastrutsplugin.html
      • Seasar-user メーリングリスト
        • http://ml.seasar.org/archives/seasar-user/
      • ひがやすを blog
        • http://d.hatena.ne.jp/higayasuo/
      • 出羽ブログ ~ はてな版 ~
        • http://d.hatena.ne.jp/dewa/
      • その他、多くのブログにご支援いただきました。
    • 69.
      • 補足資料
    • 70. アノテーションとは?
      • JDK 5から取り入れられたもの
      • プログラム中に補助的な情報を持たせることができる
      • メタデータ
      • Seasar2 ではこれからバンバン使われる予定
      • 例: @Override  アノテーション(標準)
        • オーバーライドを明示する。間違ってオーバーロードだった場合にコンパイルエラーにしてくれる
      • メソッドやクラスに持たせることができるもの
    • 71. アノテーションとは?
      • アノテーションサンプル
    • 72. アノテーションとは?
      • アノテーションを取得する
    • 73. Seasar2 繁華街マップ S2Container(Extention) S2Container(Framework) S2AOP S2Unit S2Tx S2DBCP S2JDBC アプリケーション Tuigwaa S2Dxo 開発ツール Kijimuna S2JSF Plugin Dolteng O/R マッピング S2Dao Kuina-Dao DBFlute S2Dao Plugin S2DaoCodegen プレゼンテーション S2Flex S2Struts S2JSF Teeda Mayaa Cubby 分散技術 S2RMI S2Axis S2JCA S2JMS Tugboat.GTD 他の S/W と連携 SAStruts SAStruts Plugin Beans
    • 74.
      • http://d.hatena.ne.jp/morningmist7/
      ご清聴ありがとうございました m(_ _)m