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
49
ツール比較しながら語るO/RマッパーとDBマイグレーション
nabedge
0
67
JavaでWebサービスを作り続けるための戦略と戦術
nabedge
0
42
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
nabedge
0
35
Selenium再入門
nabedge
0
36
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
nabedge
0
38
テストゼロからイチに進むための戦略と戦術
nabedge
0
44
jOOQってなんて読むの?から始めるSpringBootとO/Rマッパーの世界
nabedge
0
77
Other Decks in Technology
See All in Technology
あの日俺達が夢見たサーバレスアーキテクチャ/the-serverless-architecture-we-dreamed-of
tomoki10
0
420
watsonx.ai Dojo #5 ファインチューニングとInstructLAB
oniak3ibm
PRO
0
160
5分でわかるDuckDB
chanyou0311
10
3.2k
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
160
MLOps の現場から
asei
6
630
Microsoft Azure全冠になってみた ~アレを使い倒した者が試験を制す!?~/Obtained all Microsoft Azure certifications Those who use "that" to the full will win the exam! ?
yuj1osm
1
110
C++26 エラー性動作
faithandbrave
2
690
Snowflake女子会#3 Snowpipeの良さを5分で語るよ
lana2548
0
220
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
220
Amazon VPC Lattice 最新アップデート紹介 - PrivateLink も似たようなアップデートあったけど違いとは
bigmuramura
0
190
Jetpack Composeで始めるServer Cache State
ogaclejapan
2
160
継続的にアウトカムを生み出し ビジネスにつなげる、 戦略と運営に対するタイミーのQUEST(探求)
zigorou
0
520
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
22
1.2k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
How GitHub (no longer) Works
holman
311
140k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
Designing for Performance
lara
604
68k
Faster Mobile Websites
deanohume
305
30k
Six Lessons from altMBA
skipperchong
27
3.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
Gamification - CAS2011
davidbonilla
80
5.1k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
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