Upload
nabedge-watanabe
View
2.600
Download
0
Embed Size (px)
DESCRIPTION
2013年5月11日に新宿で開催された、日本Javaユーザーズグループ クロスコミュニティカンファレンス(JJUG CCC)での講演資料です。
Citation preview
プロローグ PROLOGUE
1
1999
Java Server Pages
2
当時の業界記事 Sun、「JavaServer Pages」の仕様を公開
http://java.sun.com/products/jsp/
Sun Microsystems社は2日、「JavaServer Pages(JSP)」技術を発表した。
...MicrosoftのActive Server Pages(ASP)に替わるテクノロジーとして...
3
出典:http://internet.watch.impress.co.jp/www/article/1999/0603/jsp.htm
2013
4
©技術評論社
Q. 実際、ビューとして何を使ってますか?
A) JavaScript + JSON/XML
B) Velocity, Mayaa, etc
C) JSP
21世紀ですよ。
JAXBとテンプレートエンジン
Mixer2
- さらばJSP -
8
JJUG CCC 2013 Spring 日本Javaユーザーズグループ
クロスコミュニティカンファレンス R5-1
ベルサール西新宿
2013-05-11
自己紹介
• わたなべ
• SI屋の技術屋さん
• @nabedge
• http://nabedge.blogspot.jp
9
目次
1.テンプレートエンジン
2.JAXBとMixer2
3.性能比較
4.Mixer2の欠点
5.ビューのテストをJUnitで
6.エピローグ 10
テンプレートエンジン
11
JSP:一番身近なテンプレートエンジン
こんにちは
<% if (name == null) { %>
ゲストさん
<% } else { %>
<%= name %>さん
<% } %>
通常のJava言語、EL式、カスタムタグで書く
テンプレートエンジン
12
Velocity:老舗
こんにちは
#if (name == null) {
ゲストさん
#else
${name}さん
#end
VTL = Velocity Template Languageで書く
テンプレートエンジン
13
FreeMarker:最近人気
こんにちは
<#if name?has_content>
${name}さん
<#else>
ゲストさん
</#if>
FTL = Freemarker Template Languageで書く
要するに?
たいていのテンプレートエンジンは、何らかの
テンプレート記述言語(っぽいもの)
を覚えなければならない
14
Mixer2
15
こんにちは
<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マークアップの世界に
取り戻す!
16
17
1.テンプレートエンジン
2.JAXBとMixer2
3.性能比較
4.Mixer2の欠点
5.ビューのテストをJUnitで
6.エピローグ
JSR-222
Java
Architecture for
XML
Binding
18
JAXBによるmarshalとunmarshal
19
JAXB
API
<root> <foo>aaa</foo> <bar>bbb</bar> <foo>ccc</foo> <bar>ddd</bar> </root>
root
foo bar
アンマーシャル
マーシャル
XML文字列 Javaオブジェクト
Mixer2によるロードとセーブ
20
Mixer2
&JAXB
<html> <head> … </head> <body> … </body> </html>
Html
Head Body
loadHtmlTemplate
saveToString
XHTML Javaオブジェクト
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
• タグの属性はJavaオブジェクトの
プロパティにマッピング。
• setter/getterメソッドでアクセス。
<div id=“foo”>…</div>
をテンプレートとしてロードすると
String id = div.getId(); // これでidに”foo”
(html4/5のすべての属性を実装済み)
複数要素はListになる
23
<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
24
デモ サンプル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
25
コアなファンのありがたい賛辞
26
27
1.テンプレートエンジン
2.JAXBとMixer2
3.性能比較
4.Mixer2の欠点
5.ビューのテストをJUnitで
6.エピローグ
コアなファンによる ざっくり比較
28
このツッコミもかなり当たってます
自分でもテストしてみた
1.フルーツショップの商品詳細ページ
→JSP, Velocity, Thymeleaf, Mixer2で
同じ画面を作る
2. ApacheJMeterでhttpアクセスを浴びせる
29
前のページは正確な性能比較か?
30
START END
1. 15ms以下だと観測誤差が大きい(CPU/OS次第)
2. 総時間での比較はノイズありすぎ
(でもjspと比較するにはこうするしかない)
VIEW処理
httpリクエスト
コントローラ
処理
ビジネスロジック httpレスポンス
とにかく、体感速度としてはどうなの?
31
32
1.テンプレートエンジン
2.JAXBとMixer2
3.性能比較
4.Mixer2の欠点
5.ビューのテストをJUnitで
6.エピローグ
Mixer2の欠点
1. 性能
→気にするほどの影響かどうか?がポイント
2. HTML ではなく XHTML が必須
→HTML5もXML文法で書けばOK
3. <!-- コメント --> は消えてしまう
→どうでもいい?
4. スクリプトレットが無い代わりにJavaコードが肥大化する
→Ctrl+Space補完が効くならいいのでは? 33
ちょっと一息
34
•水分補給
•時間を確認 • 35分前後?
35
1.テンプレートエンジン
2.JAXBとMixer2
3.性能比較
4.Mixer2の欠点
5.ビューのテストをJUnitで
6.エピローグ
よく見かける開発ルール、スローガン
『ちゃんとJUnitでテスト書こうぜ!』 ※ただしJSPは除く
36
SeleniumはUT用ではありません
• selenium-java-2.*.jar
• テスト対象をWebアプリとして
APサーバ上で稼働させておくのが前提条件。
• つまり、単体テストではなく
結合テストの回帰実行をするためのもの。
37
Mixer2とJUnitの基本
38
タグ型
オブジェクト
加工前
タグ型
オブジェクト
加工後 処理
span.unsetContent();
span.getContent().add(“Hello”);
assertThat(
span.getContent().get(0).toString()
,is(“Hello”));
Mixer2によるViewヘルパーのテスト
39
実際のテストコードで説明します
https://github.com/nabedge/mixer2-
sample/blob/master/mixer2-fruitshop-
springmvc/src/test/java/org/mixer2/samp
le/web/
エピローグ EPILOGUE
40
「さらば JSP」?
うん、あれは、釣りです。
ごめんなさい。
41
ハサミは使いよう
•心配性の人は枯れてるJSPで。
• Velocityが慣れている人はVelocityで。
• TwitterやFacebookみたいな画面が必要ならJavaScriptで。
42
Mixer2の部分マーシャルの活用
43
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
44
ご静聴ありがとうございました!
http://mixer2.org/
45