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.

20130511 jjug ccc講演 さらばjsp JAXBとmixer2

3,422 views

Published on

2013年5月11日に新宿で開催された、日本Javaユーザーズグループ クロスコミュニティカンファレンス(JJUG CCC)での講演資料です。

Published in: Technology

20130511 jjug ccc講演 さらばjsp JAXBとmixer2

  1. 1. プロローグPROLOGUE1
  2. 2. 1999Java Server Pages2
  3. 3. 当時の業界記事Sun、「JavaServer Pages」の仕様を公開http://java.sun.com/products/jsp/Sun Microsystems社は2日、「JavaServerPages(JSP)」技術を発表した。...MicrosoftのActive Server Pages(ASP)に替わるテクノロジーとして...3出典:http://internet.watch.impress.co.jp/www/article/1999/0603/jsp.htm
  4. 4. 20134
  5. 5. ©技術評論社
  6. 6. Q. 実際、ビューとして何を使ってますか?A) JavaScript + JSON/XMLB) Velocity, Mayaa, etcC) JSP
  7. 7. 21世紀ですよ。
  8. 8. JAXBとテンプレートエンジンMixer2- さらばJSP -8JJUG CCC 2013 Spring日本Javaユーザーズグループクロスコミュニティカンファレンス R5-1ベルサール西新宿2013-05-11
  9. 9. 自己紹介• わたなべ• SI屋の技術屋さん• @nabedge• http://nabedge.blogspot.jp9
  10. 10. 目次1.テンプレートエンジン2.JAXBとMixer23.性能比較4.Mixer2の欠点5.ビューのテストをJUnitで6.エピローグ10
  11. 11. テンプレートエンジン11JSP:一番身近なテンプレートエンジンこんにちは<% if (name == null) { %>ゲストさん<% } else { %><%= name %>さん<% } %>通常のJava言語、EL式、カスタムタグで書く
  12. 12. テンプレートエンジン12Velocity:老舗こんにちは#if (name == null) {ゲストさん#else${name}さん#endVTL = Velocity Template Languageで書く
  13. 13. テンプレートエンジン13FreeMarker:最近人気こんにちは<#if name?has_content>${name}さん<#else>ゲストさん</#if>FTL = Freemarker Template Languageで書く
  14. 14. 要するに?たいていのテンプレートエンジンは、何らかのテンプレート記述言語(っぽいもの)を覚えなければならない14
  15. 15. Mixer215こんにちは<span id=“name”>ななし</span>さんSpan span = html.getById(“name”, Span.class);span.getContent.clear();span.getContent.add(“ヤマダ”);// これで <span id=“name”>ヤマダ</span>さん// が出力テンプレートは純粋なXHTMLとCSS値の埋め込みやロジックは普通のJava
  16. 16. Take back control !Java-WebアプリケーションのViewを、 本来の純粋なJavaプログラミングとhtmlマークアップの世界に取り戻す!16
  17. 17. 171.テンプレートエンジン2.JAXBとMixer23.性能比較4.Mixer2の欠点5.ビューのテストをJUnitで6.エピローグ
  18. 18. JSR-222JavaArchitecture forXMLBinding18
  19. 19. JAXBによるmarshalとunmarshal19JAXBAPI<root><foo>aaa</foo><bar>bbb</bar><foo>ccc</foo><bar>ddd</bar></root>rootfoo barアンマーシャルマーシャルXML文字列 Javaオブジェクト
  20. 20. Mixer2によるロードとセーブ20Mixer2&JAXB<html><head>…</head><body>…</body></html>HtmlHead BodyloadHtmlTemplatesaveToStringXHTML Javaオブジェクト
  21. 21. Mixer2のHTMLタグとJava型21<html>…</html>⇔ org.mixer2.jaxb.xhtml.Html<div>…</div>⇔ org.mixer2.jaxb.xhtml.Div• Mixer2では HTMLタグとJavaオブジェクトを相互マッピングJAXBのXJCで自動生成した約120種のJavaクラスを利用
  22. 22. タグの属性へのアクセス22• タグの属性はJavaオブジェクトのプロパティにマッピング。• setter/getterメソッドでアクセス。<div id=“foo”>…</div>をテンプレートとしてロードするとString id = div.getId(); // これでidに”foo”(html4/5のすべての属性を実装済み)
  23. 23. 複数要素はListになる23<html><body><p>Hello World</p>foo<span>bar</span></body></html>index 型0 P1 String2 SpanHtml html = mixer2Engine.loadHtmlTemplate(“template.html”);java.util.List<Object>list = html.getBody().getContent();listの中身template.html
  24. 24. 24デモサンプルWebアプリ「フルーツショップ」https://github.com/nabedge/mixer2-sample/tree/master/mixer2-fruitshop-springmvc• 時間を確認• 15分~20分くらい?
  25. 25. MVCフレームワークとMixer21. ViewエンジンとしてのMixer22. なんらかのMVCフレームワークSpringMVC, Struts2, SAStruts...3. 組み合わせれば鬼に金棒Spring勉強会の資料も参考にどうぞ。http://nabedge.blogspot.jp/2013/02/spring-study.html25
  26. 26. コアなファンのありがたい賛辞26
  27. 27. 271.テンプレートエンジン2.JAXBとMixer23.性能比較4.Mixer2の欠点5.ビューのテストをJUnitで6.エピローグ
  28. 28. コアなファンによる ざっくり比較28このツッコミもかなり当たってます
  29. 29. 自分でもテストしてみた1. フルーツショップの商品詳細ページ→JSP, Velocity, Thymeleaf, Mixer2で同じ画面を作る2. ApacheJMeterでhttpアクセスを浴びせる29
  30. 30. 前のページは正確な性能比較か?30START END1. 15ms以下だと観測誤差が大きい(CPU/OS次第)2. 総時間での比較はノイズありすぎ(でもjspと比較するにはこうするしかない)VIEW処理httpリクエストコントローラ処理ビジネスロジック httpレスポンス
  31. 31. とにかく、体感速度としてはどうなの?31
  32. 32. 321.テンプレートエンジン2.JAXBとMixer23.性能比較4.Mixer2の欠点5.ビューのテストをJUnitで6.エピローグ
  33. 33. Mixer2の欠点1. 性能→気にするほどの影響かどうか?がポイント2. HTML ではなく XHTML が必須→HTML5もXML文法で書けばOK3. <!-- コメント --> は消えてしまう→どうでもいい?4. スクリプトレットが無い代わりにJavaコードが肥大化する→Ctrl+Space補完が効くならいいのでは?33
  34. 34. ちょっと一息34• 水分補給• 時間を確認• 35分前後?
  35. 35. 351.テンプレートエンジン2.JAXBとMixer23.性能比較4.Mixer2の欠点5.ビューのテストをJUnitで6.エピローグ
  36. 36. よく見かける開発ルール、スローガン『ちゃんとJUnitでテスト書こうぜ!』※ただしJSPは除く36
  37. 37. SeleniumはUT用ではありません• selenium-java-2.*.jar• テスト対象をWebアプリとしてAPサーバ上で稼働させておくのが前提条件。• つまり、単体テストではなく結合テストの回帰実行をするためのもの。37
  38. 38. Mixer2とJUnitの基本38タグ型オブジェクト加工前タグ型オブジェクト加工後処理span.unsetContent();span.getContent().add(“Hello”);assertThat(span.getContent().get(0).toString(),is(“Hello”));
  39. 39. Mixer2によるViewヘルパーのテスト39実際のテストコードで説明しますhttps://github.com/nabedge/mixer2-sample/blob/master/mixer2-fruitshop-springmvc/src/test/java/org/mixer2/sample/web/
  40. 40. エピローグEPILOGUE40
  41. 41. 「さらば JSP」?うん、あれは、釣りです。ごめんなさい。41
  42. 42. ハサミは使いよう• 心配性の人は枯れてるJSPで。• Velocityが慣れている人はVelocityで。• TwitterやFacebookみたいな画面が必要ならJavaScriptで。42
  43. 43. Mixer2の部分マーシャルの活用43Div div = html.getById(“foo”,Div.class);String str = m2Engine.saveToString(div);1. 特定のタグ(ここではdiv)だけを文字列化2. ほかのテンプレート形式に混ぜて出力可能<%-- JSP --%><html><body><%=str %></body></html><html><body><div id=“foo”>.......</div></body></html>
  44. 44. 「選択肢のひとつ」としてのMixer244
  45. 45. ご静聴ありがとうございました!http://mixer2.org/45

×