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
0
200
JAXBとテンプレートエンジンMixer2
日本Javaユーザーズグループ クロスコミュニティカンファレンス2013春 講演
WebデザイナーフレンドリーなJavaテンプレートエンジン"Mixer2"
Yu Watanabe
May 11, 2013
Tweet
Share
More Decks by Yu Watanabe
See All by Yu Watanabe
JUnitテストをCI環境で並列で実行する方法とその速度, スケーラビリティ
nabedge
5
2.4k
クラウド時代だからSpring-Retryフレームワーク
nabedge
0
260
ツール比較しながら語るO/RマッパーとDBマイグレーション
nabedge
0
120
JavaでWebサービスを作り続けるための戦略と戦術
nabedge
0
65
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
nabedge
0
56
Selenium再入門
nabedge
0
51
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
nabedge
0
55
テストゼロからイチに進むための戦略と戦術
nabedge
0
65
jOOQってなんて読むの?から始めるSpringBootとO/Rマッパーの世界
nabedge
0
100
Other Decks in Technology
See All in Technology
モバイル界のMCPを考える
naoto33
0
430
Lufthansa ®️ USA Contact Numbers: Complete 2025 Support Guide
lufthanahelpsupport
0
140
Understanding_Thread_Tuning_for_Inference_Servers_of_Deep_Models.pdf
lycorptech_jp
PRO
0
180
整頓のジレンマとの戦い〜Tidy First?で振り返る事業とキャリアの歩み〜/Fighting the tidiness dilemma〜Business and Career Milestones Reflected on in Tidy First?〜
bitkey
2
15k
CursorによるPMO業務の代替 / Automating PMO Tasks with Cursor
motoyoshi_kakaku
2
930
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
27k
生成AI開発案件におけるClineの業務活用事例とTips
shinya337
0
240
KubeCon + CloudNativeCon Japan 2025 Recap
ren510dev
1
370
ビズリーチにおけるリアーキテクティング実践事例 / JJUG CCC 2025 Spring
visional_engineering_and_design
1
110
Delta airlines Customer®️ USA Contact Numbers: Complete 2025 Support Guide
deltahelp
0
350
成長し続けるアプリのためのテストと設計の関係、そして意思決定の記録。
sansantech
PRO
0
100
タイミーのデータモデリング事例と今後のチャレンジ
ttccddtoki
6
2.3k
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
How GitHub (no longer) Works
holman
314
140k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
107
19k
What's in a price? How to price your products and services
michaelherold
246
12k
Being A Developer After 40
akosma
90
590k
A Modern Web Designer's Workflow
chriscoyier
694
190k
Automating Front-end Workflow
addyosmani
1370
200k
A Tale of Four Properties
chriscoyier
160
23k
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