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
190
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
4
2k
クラウド時代だからSpring-Retryフレームワーク
nabedge
0
46
ツール比較しながら語るO/RマッパーとDBマイグレーション
nabedge
0
65
JavaでWebサービスを作り続けるための戦略と戦術
nabedge
0
39
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
nabedge
0
35
Selenium再入門
nabedge
0
36
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
nabedge
0
38
テストゼロからイチに進むための戦略と戦術
nabedge
0
40
jOOQってなんて読むの?から始めるSpringBootとO/Rマッパーの世界
nabedge
0
72
Other Decks in Technology
See All in Technology
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
680
20241120_JAWS_東京_ランチタイムLT#17_AWS認定全冠の先へ
tsumita
2
240
[CV勉強会@関東 ECCV2024 読み会] オンラインマッピング x トラッキング MapTracker: Tracking with Strided Memory Fusion for Consistent Vector HD Mapping (Chen+, ECCV24)
abemii
0
220
リンクアンドモチベーション ソフトウェアエンジニア向け紹介資料 / Introduction to Link and Motivation for Software Engineers
lmi
4
300k
インフラとバックエンドとフロントエンドをくまなく調べて遅いアプリを早くした件
tubone24
1
430
AWS Media Services 最新サービスアップデート 2024
eijikominami
0
190
Lambda10周年!Lambdaは何をもたらしたか
smt7174
2
110
強いチームと開発生産性
onk
PRO
33
11k
透過型SMTPプロキシによる送信メールの可観測性向上: Update Edition / Improved observability of outgoing emails with transparent smtp proxy: Update edition
linyows
2
210
The Role of Developer Relations in AI Product Success.
giftojabu1
0
120
VideoMamba: State Space Model for Efficient Video Understanding
chou500
0
190
TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?
kaminashi
0
580
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
136
6.6k
Teambox: Starting and Learning
jrom
133
8.8k
A better future with KSS
kneath
238
17k
Code Review Best Practice
trishagee
64
17k
Gamification - CAS2011
davidbonilla
80
5k
It's Worth the Effort
3n
183
27k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
Happy Clients
brianwarren
98
6.7k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
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