Cubby 2006-08-23

2,317 views
2,202 views

Published on

Cubbyコンセプトの資料です。現在の仕様(Cubby-1.0)とは仕様がかなり異なります。

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,317
On SlideShare
0
From Embeds
0
Number of Embeds
437
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Cubby 2006-08-23

  1. 1. Cubby 100% Pure JSP Web Application Framework 2006/8/19@Nulab Jaian Recital Toshitaka Agata(agata@nulab.co.jp)‏
  2. 2. Cubby って何? <ul><li>100% Pure JSP Web Application Framework </li></ul><ul><li>Zero Configuration </li></ul><ul><li>ベリーシンプル&スモール </li></ul><ul><ul><li>クラス数約 50 個 </li></ul></ul><ul><li>REST っぽい URI をサポート </li></ul><ul><li>直感的な名前のタグライブラリ </li></ul><ul><li>Cubby = 整理棚 </li></ul>
  3. 3. なぜに JSP ? <ul><li>最近嫌われ者のJSP・・・ </li></ul><ul><ul><li>スクリプトレットだし、 </li></ul></ul><ul><ul><li>エラーがわかりにくいし、 </li></ul></ul><ul><ul><li>Pure HTML テンプレートじゃないし、 </li></ul></ul><ul><ul><li>流行りではないし、 </li></ul></ul><ul><ul><li>etc... </li></ul></ul>
  4. 4. なぜに JSP ? <ul><li>学習容易性 </li></ul><ul><ul><li>新しい知識はいりません。 </li></ul></ul><ul><li>最近の JSP2.0 はいい感じです。 </li></ul><ul><ul><li>EL 式 (Expression Language)‏ </li></ul></ul><ul><ul><li>JSTL(JSP Standard Tag Library)‏ </li></ul></ul><ul><ul><li>Functions </li></ul></ul><ul><ul><li>タグファイル </li></ul></ul><ul><ul><ul><li>フラグメント </li></ul></ul></ul><ul><ul><ul><li>Dynamic Attributes </li></ul></ul></ul><ul><ul><li>エラー出力の改善 </li></ul></ul>
  5. 5. Cubby の概要 Struts,WebWork,Ruby on Rails の 良いところを参考に。 ブラウザ Dispatcher Filter 2.Binding 3.Validation 4.Action Execute JSP View 5. Forward 1. Request 7.Response Custom Tag (Tag File)‏ & Functions 6. Rendering Struts とだいたい同じ範囲をカバーします。 やり方はだいぶ異なります Action Filter Stack Controller + FormObject +ActionMethod1 +ActionMethod2
  6. 6. View ( JSP ) <ul><li>基本は HTML のタグ。 Cubby に必要な属性を追記します。 </li></ul><%@ taglib tagdir=&quot;/WEB-INF/cubby/tags&quot; prefix=&quot;t&quot; %> < t: input name=”userId”/> < t: select name=”typeId” items=”${todoTypes}” valueProperty=”id” labelProperty=”name” > <option value=”1”> 仕事 </option> <option value=”2”> 個人 </option> <option value=”3”> その他 </option> </t:select> Pure JSP <input name=”userId” value=””/> <select name=”typeId”> <option value=”1”> 仕事 </option> <option value=”2”> 個人 </option> <option value=”3”> その他 </option> </select> Pure HTML
  7. 7. View ( JSP ) <ul><li>全てのカスタムタグはタグファイルでできています! (WEB-INF/tags/*.tag) </li></ul><ul><li>Dynamic Attributes で、定義していない属性も出力可能です! </li></ul><%@ taglib uri=&quot;http://java.sun.com/jsp/jstl/core&quot; prefix=&quot;c&quot; %> <%@ taglib uri=&quot;http://www.nulabco.jp/cubby&quot; prefix=&quot;f&quot; %> <%@ tag dynamic-attributes=&quot;dyn&quot; %> <%@ attribute name=&quot;type&quot; type=&quot;java.lang.String&quot; rtexprvalue=&quot;true&quot; required=&quot;true&quot; %> <%@ attribute name=&quot;checkedValue&quot; type=&quot;java.lang.Object&quot; rtexprvalue=&quot;true&quot; required=&quot;false&quot; %> <input type=&quot;${type}&quot; ${f:toAttr(dyn)} ${f:checked(dyn['value'],checkedValue)}/> input.tag
  8. 8. Controller&Action <ul><li>1つの Contorller に複数 Action メソッドを定義 </li></ul>return “show.jsp” show.jsp にフォワード return “@list” list にリダイレクト return “/common/error.jsp” /common/error.jsp に フォワード return “@/login/logout” /login/logout にリダイレクト @Action public class TodoController extends Controller { ... public String show() { ... return &quot;show.jsp&quot;; } public String edit() { ... return &quot;edit.jsp&quot;; } public String confirm() { ... return &quot;confirm.jsp&quot;; } public String save() { ... return &quot;@list&quot;; } } Controller
  9. 9. Controller&Action <ul><li>メタ情報はアノテーションで(ちょっとだけ) </li></ul>@Action public メソッドをアクションメソッドとみなす (メソッド単位でも設定可能) @Form( プロパティ名 )‏ パラメータの自動バインディング対象を指定 (メソッド単位でも設定可能) @Validation(errorPage=&quot; エラー時の遷移先 &quot;)‏ アクションの実行前にバリデーションを実行 @Session セッションスコープの変数として、 自動バインディング (その他 public なフィールドはリクエストスコープ) @Action @Form(&quot;loginDto&quot;)‏ public class LoginController extends Controller { public static TodoLogic todoLogic = new MockTodoLogic(); @Session public User user; public LoginDto loginDto = new LoginDto(); public String login() { return &quot;login.jsp&quot;; } @Validation(errorPage=&quot;login.jsp&quot;)‏ public String login_process() { if(todoLogic.login(loginDto)) { user = new User(1, &quot;agata&quot;); return &quot;@/todo/list&quot;; } else { errors.add(&quot; ユーザ ID かパスワードが違います。 &quot;); return &quot;login.jsp&quot;; } } public String logout() { user = null; return &quot;@login&quot;; } } Controller
  10. 10. Validation <ul><li>コードで入力検証を記述 </li></ul>public class Todo implements Validatable { public static Validators VALIDATORS = new Validators(); static { VALIDATORS.add(&quot;text&quot;, new Required(), new MaxLength(10)); VALIDATORS.add(&quot;memo&quot;, new Required(), new MaxLength(100)); VALIDATORS.add(&quot;typeId&quot;, new Required()); VALIDATORS.add(&quot;limitDate&quot;, new DateFormat()); } public Validators getValidators() { return VALIDATORS; } ... } Model
  11. 11. その他の機能 <ul><li>URI 自動マッピング (Plugin 化 )‏ </li></ul><ul><ul><li>Rails 風 </li></ul></ul><ul><ul><li>/todo/list->TodoController#list </li></ul></ul><ul><ul><li>/todo/confirm->TodoController#confirm </li></ul></ul><ul><ul><li>/agata/todo/1->TodoController#show?id=1 </li></ul></ul><ul><li>HTML プレビュー </li></ul><ul><ul><li>JSP でもブラウザによるプレビューが(ある程度)できます! </li></ul></ul><ul><li>@ ActionFilter WebWork2 & Rails 風 </li></ul>
  12. 12. ロードマップ <ul><li>2006年 11 月 Ver0.9 </li></ul><ul><li>2006年 12 月 Ver1.0-RC </li></ul><ul><ul><li>リファクタリング </li></ul></ul><ul><ul><li>ドキュメントの整備 </li></ul></ul><ul><li>2007年 1 月 Ver1.0 </li></ul><ul><ul><li>サンプルの整備 </li></ul></ul><ul><ul><li>JavaDoc コメント </li></ul></ul>一緒に開発してくれる方、 募集中です !! 仕様に対するご意見も、 お待ちしております。

×