GAE+Slim3のページです。
Slim3は、Google App Engine/Java 用に最適化されているMVCフレームワークです。
http://sites.google.com/site/slim3appengine/
http://sites.google.com/site/slim3documentja/
まだちょっとしか触っていませんが、シンプルでわかりやすいイメージです。このページでちょっと紹介していきたいと思います。
2.1. 概要
Slim3の開発では作るモジュールは主に4つになります。
(1) controller
Slim3のServletがリクエストを受けて、URLに従って処理を振り分けますが、その時に呼ばれるのがこのクラスになります。
org.slim3.controller.Controllerの実装クラスを(rootパッケージ).controller の下に配置します(直接でも、さらにサブパッケージを掘ってもOKです)。
URLに従ってと書きましたが、その関係は単純で、下記のようになります。
URL:http://(ホスト)/member/list
↓
クラス:(rootパッケージ).controller.member.ListController
基本的に、このクラスがリクエストを受け取り、(3)serviceクラスを介して、データストアと(2)modelオブジェクトをやり取りして処理を行い、結果をJSPに渡して、JSPが出力する流れになります。
実際に設計するときは、データつまりmodelを設計して、それに対するservice設計。それと平行して、画面仕様から、JSP、controllerを設計していく感じになるかと思います。
(2) model
データオブジェクトのクラスです。
(rootパッケージ).model の下に配置します(直接でも、さらにサブパッケージを掘ってもOKです)。
アノテーションをつけて定義します。
また、このクラスそれぞれに対応した、Metaクラスが必要になりますが、それは自動で生成され、
(rootパッケージ).Metaに配置されます。
(3) service
データストアへの書き込み読み取り等を行うクラスです。
(rootパッケージ).service の下に配置します(直接でも、さらにサブパッケージを掘ってもOKです)。
(4) JSP
JSPファイルです。
warの下に配置します(直接でも、さらにサブパッケージを掘ってもOKです)。
Slim3デフォルトのweb.xmlでは直接のリクエストはNGに設定されてます。
機能毎に分類してサブパッケージにして配置するのが良いみたいですね。
例) メンバー管理関係=menber、注文関係=order、商品関係=item
(PJルート) ┣src ┃ ┗(パッケージルート) ┃ ┣controller ┃ ┃ ┣member ┃ ┃ ┃ ┣ListController.java ┃ ┃ ┃ ┣CreateController.java ┃ ┃ ┃ ┣DeleteController.java ┃ ┃ ┃ ┗UpdateController.java ┃ ┃ ┣order ┃ ┃ ┃ ┣BasketListList.java ┃ ┃ ┃ ┣InsertBasket.java ┃ ┃ ┃ ・ ┃ ┃ ┃ ・ ┃ ┃ ┗item ┃ ┃ ┣List.java ┃ ┃ ・ ┃ ┃ ・ ┃ ┣meta ┃ ┃ ┣member ┃ ┃ ┃ ┗MemberMeta.java ┃ ┃ ┣order ┃ ┃ ┃ ┣BasketMeta.java ┃ ┃ ┃ ┗OrderMeta.java ┃ ┃ ┗item ┃ ┃ ┣CategoryMeta.java ┃ ┃ ┗OrderHistoryMeta.java ┃ ┣model ┃ ┃ ┣member ┃ ┃ ┃ ┗Member.java ┃ ┃ ┣order ┃ ┃ ┃ ┣Basket.java ┃ ┃ ┃ ┗Order.java ┃ ┃ ┗item ┃ ┃ ┣Category.java ┃ ┃ ┗Item.java ┃ ┗service ┃ ┣member ┃ ┃ ┗MemberService.java ┃ ┣order ┃ ┃ ┣BasketService.java ┃ ┃ ┗OrderService.java ┃ ┗item ┃ ┣ ┃ ・ ┃ ・ ┗war ┣member ┃ ┣list.jsp ┃ ・ ┃ ・ ┣order ┃ ┣basketlist.jsp ┃ ・ ┃ ・ ┣item ┃ ┣list.jsp ┃ ・ ┃ ・ ┣image ┃ ┣xxx.jpg ┃ ・ ┃ ・ ┣css ┃ ┣common.css ┃ ┣member.css ┃ ・ ┃ ・ ┣WEB-INF ┃ ┣appengine-generated ┃ ┣lib ┃ ┣appengine-web.xml ┃ ┣cron.xml ┃ ┣queue.xml ┃ ┗web.xml ┗index.html
私の感じた特徴としては、
(1) 設定ファイルが少ない
先に書いたように、/menber/listへのリクエストをxxxx.controller.menber.ListControllerが処理する単純なルールですので、このマッピングの定義ファイルがありません(新機能でできるようになるみたいですが・・・)。
また、controllerからJSPへのフォワードは、controller内の処理だけで決定します。Controller#run()は、Navigationインスタンスを返すのですが、
return null; ←自力で出力した場合
return return forward("tree.jsp"); ← /file/tree.jspにフォワード
return redirect("tree"); ←/file/treeにリダイレクト
といった感じになります。
あと、modelはアノテーションでデータストアへ書き込む際のキーや、型等を定義しますので、これも定義ファイルがありません。設定が少ないと、処理を追うのが楽になりますね。
(2) GAE/Jでちょっとやっかいなところを吸収してくれる
multipartの時のparameter受信とか、グローバルトランザクションとか、ちょっとGAEだけだと不便なところを吸収して使いやすくしてくれます。
2.2. 環境
・slim3:slim3-blank-1.0.13.zip
slim3-blank-1.0.13.zipを落としてきてそのまま使いました。
まずは、このサイトを参考にしました。
他の環境は、1.2. を参照ください。commons-fileuploadは、slim3がやってくれるので入れていません。
0 件のコメント:
コメントを投稿