Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JAXBとテンプレートエンジンMixer2
Search
Yu Watanabe
May 11, 2013
Technology
210
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JAXBとテンプレートエンジンMixer2
日本Javaユーザーズグループ クロスコミュニティカンファレンス2013春 講演
WebデザイナーフレンドリーなJavaテンプレートエンジン"Mixer2"
Yu Watanabe
May 11, 2013
More Decks by Yu Watanabe
See All by Yu Watanabe
JUnitテストをCI環境で並列で実行する方法とその速度, スケーラビリティ
nabedge
6
2.9k
クラウド時代だからSpring-Retryフレームワーク
nabedge
0
320
ツール比較しながら語るO/RマッパーとDBマイグレーション
nabedge
0
170
JavaでWebサービスを作り続けるための戦略と戦術
nabedge
0
110
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
nabedge
0
83
Selenium再入門
nabedge
0
72
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
nabedge
0
92
テストゼロからイチに進むための戦略と戦術
nabedge
0
100
jOOQってなんて読むの?から始めるSpringBootとO/Rマッパーの世界
nabedge
0
150
Other Decks in Technology
See All in Technology
GuardrailからGovernanceへ~AIエージェント運用の次の課題~
sbspsy
2
270
「早く出す」より「事業に効く」 ── 顧客の業務サイクルから逆算するAI時代の二重ループ開発と「変化の設計者」 / devsumi2026
rakus_dev
1
220
凡エンジニアがこの先生きのこるためには。〜TypeScript完全に理解したい〜
alchemy1115
2
170
AI Driven AI Governance
pict3
0
340
脱金融のフューチャー・デザイン / Future Design Beyond Finance
ks91
PRO
0
150
SRE Next 2026 何でも屋からの脱却
bto
0
640
実装だけじゃない! CCA-F取得エンジニアが教えるClaude Code開発プロセス活用術
diggymo
2
660
貴方はどのエンジニアリングを磨くのか
hatyibei
0
130
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
タスクの複雑さでモデルを選ぶ ── Thompson Samplingで動かす“トークン/コスト最適化
satohy0323
0
310
ZOZOTOWNの進化と信頼性を両立する負荷試験
zozotech
PRO
2
160
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
0
140
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Optimising Largest Contentful Paint
csswizardry
37
3.8k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Visualization
eitanlees
152
17k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Building Applications with DynamoDB
mza
96
7.1k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
420
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.4k
How to Talk to Developers About Accessibility
jct
2
340
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.4k
Transcript
テストページ 1 1 • 機内モード確認 • ストップウォッチ スタート確認
テストページ 2 2 • 機内モード確認 • ストップウォッチ スタート確認
プロローグ PROLOGUE 3
1999 Java Server Pages 4
当時の業界記事 Sun、「JavaServer Pages」の仕様を公開 http://java.sun.com/products/jsp/ Sun Microsystems社は2日、「JavaServer Pages(JSP)」技術を発表した。 ...MicrosoftのActive Server Pages
(ASP)に替わるテクノロジーとして... 5 出典:http://internet.watch.impress.co.jp/www/article/1999/0603/jsp.htm
2013 6
©技術評論社
Q. 実際、ビューとして何を使ってますか? A) JavaScript + JSON/XML B) Velocity, Mayaa, etc
C) JSP
21世紀ですよ。
JAXBとテンプレートエンジン Mixer2 - さらばJSP - 10 JJUG CCC 2013 Spring
日本Javaユーザーズグループ クロスコミュニティカンファレンス R5-1 ベルサール西新宿 2013-05-11
自己紹介 • わたなべ • SI屋の技術屋さん • @nabedge • http://nabedge.blogspot.jp 11
目次 1.テンプレートエンジン 2.JAXBとMixer2 3.性能比較 4.Mixer2の欠点 5.ビューのテストをJUnitで 6.エピローグ 12
テンプレートエンジン 13 JSP:一番身近なテンプレートエンジン こんにちは <% if (name == null) {
%> ゲストさん <% } else { %> <%= name %>さん <% } %> 通常のJava言語、EL式、カスタムタグで書く
テンプレートエンジン 14 Velocity:老舗 こんにちは #if (name == null) { ゲストさん
#else ${name}さん #end VTL = Velocity Template Languageで書く
テンプレートエンジン 15 FreeMarker:最近人気 こんにちは <#if name?has_content> ${name}さん <#else> ゲストさん </#if>
FTL = Freemarker Template Languageで書く
要するに? たいていのテンプレートエンジンは、 何らかの テンプレート記述言語(っぽいもの) を覚えなければならない 16
Mixer2 17 こんにちは <span id=“name”>ななし</span>さん Span span = html.getById(“name”, Span.class);
span.getContent.clear(); span.getContent.add(“ヤマダ”); // これで <span id=“name”>ヤマダ</span>さん // が出力 テンプレートは純粋なXHTMLとCSS 値の埋め込みやロジックは普通のJava
Take back control ! Java-Webアプリケーションの Viewを、 本来の純粋な Javaプログラミングと htmlマークアップの世界に 取り戻す!
18
19 1.テンプレートエンジン 2.JAXBとMixer2 3.性能比較 4.Mixer2の欠点 5.ビューのテストをJUnitで 6.エピローグ
JSR-222 Java Architecture for XML Binding 20
JAXBによるmarshalとunmarshal 21 JAXB API <root> <foo>aaa</foo> <bar>bbb</bar> <foo>ccc</foo> <bar>ddd</bar> </root>
root foo bar アンマーシャル マーシャル XML文字列 Javaオブジェクト
Mixer2によるロードとセーブ 22 Mixer2 &JAXB <html> <head> … </head> <body> …
</body> </html> Html Head Body loadHtmlTemplate saveToString XHTML Javaオブジェクト
Mixer2のHTMLタグとJava型 23 <html>…</html> ⇔ org.mixer2.jaxb.xhtml.Html <div>…</div> ⇔ org.mixer2.jaxb.xhtml.Div • Mixer2では
HTMLタグと Javaオブジェクトを相互マッピング JAXBのXJCで自動生成した約120種 のJavaクラスを利用
タグの属性へのアクセス 24 • タグの属性はJavaオブジェクトの プロパティにマッピング。 • setter/getterメソッドでアクセス。 <div id=“foo”>…</div> をテンプレートとしてロードすると
String id = div.getId(); // これでidに”foo” (html4/5のすべての属性を実装済み)
複数要素はListになる 25 <html> <body> <p>Hello World</p> foo <span>bar</span> </body> </html>
index 型 0 P 1 String 2 Span Html html = mixer2Engine .loadHtmlTemplate( “template.html”); java.util.List<Object> list = html.getBody() .getContent(); listの中身 template.html
26 デモ サンプルWebアプリ 「フルーツショップ」 https://github.com/nabedge/mixer2- sample/tree/master/mixer2-fruitshop-springmvc • 時間を確認 • 15分~20分くらい?
MVCフレームワークとMixer2 1. ViewエンジンとしてのMixer2 2. なんらかのMVCフレームワーク SpringMVC, Struts2, SAStruts... 3. 組み合わせれば鬼に金棒
Spring勉強会の資料も参考にどうぞ。 http://nabedge.blogspot.jp/2013/02/spring-study.html 27
コアなファンのありがたい賛辞 28
29 1.テンプレートエンジン 2.JAXBとMixer2 3.性能比較 4.Mixer2の欠点 5.ビューのテストをJUnitで 6.エピローグ
コアなファンによる ざっくり比較 30 このツッコミもかなり当たってます
自分でもテストしてみた 1. フルーツショップの商品詳細ページ →JSP, Velocity, Thymeleaf, Mixer2で 同じ画面を作る 2. ApacheJMeterでhttpアクセスを浴びせる
31
前のページは正確な性能比較か? 32 START END 1. 15ms以下だと観測誤差が大きい(CPU/OS次第) 2. 総時間での比較はノイズありすぎ (でもjspと比較するにはこうするしかない) VIEW処理
httpリクエスト コントローラ 処理 ビジネスロジック httpレスポンス
とにかく、体感速度としてはどうなの? 33
34 1.テンプレートエンジン 2.JAXBとMixer2 3.性能比較 4.Mixer2の欠点 5.ビューのテストをJUnitで 6.エピローグ
Mixer2の欠点 1. 性能 →気にするほどの影響かどうか?がポイント 2. HTML ではなく XHTML が必須 →HTML5もXML文法で書けばOK
3. <!-- コメント --> は消えてしまう →どうでもいい? 4. スクリプトレットが無い代わりにJavaコー ドが肥大化する →Ctrl+Space補完が効くならいいのでは? 35
ちょっと一息 36 • 水分補給 • 時間を確認 • 35分前後?
37 1.テンプレートエンジン 2.JAXBとMixer2 3.性能比較 4.Mixer2の欠点 5.ビューのテストをJUnitで 6.エピローグ
よく見かける開発ルール、スローガン 『ちゃんとJUnitでテスト書こうぜ!』 ※ただしJSPは除く 38
SeleniumはUT用ではありません • selenium-java-2.*.jar • テスト対象をWebアプリとして APサーバ上で稼働させておくのが 前提条件。 • つまり、単体テストではなく 結合テストの回帰実行をするための
もの。 39
Mixer2とJUnitの基本 40 タグ型 オブジェクト 加工前 タグ型 オブジェクト 加工後 処理 span.unsetContent();
span.getContent().add(“Hello”); assertThat( span.getContent().get(0).toString() ,is(“Hello”));
Mixer2によるViewヘルパーのテスト 41 実際のテストコードで説明します https://github.com/nabedge/mixer2- sample/blob/master/mixer2-fruitshop- springmvc/src/test/java/org/mixer2/samp le/web/
エピローグ EPILOGUE 42
「さらば JSP」? うん、あれは、釣りです。 ごめんなさい。 43
ハサミは使いよう • 心配性の人は枯れてるJSPで。 • Velocityが慣れている人は Velocityで。 • TwitterやFacebookみたいな 画面が必要ならJavaScriptで。 44
Mixer2の部分マーシャルの活用 45 Div 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>
「選択肢のひとつ」としてのMixer2 46
ご静聴ありがとうございました! http://mixer2.org/ 47