ウィリアムのいたずらの、まちあるき、たべあるきーPART2

gooブログ「ウィリアムのいたずらの、まちあるき、たべあるき」がお引越ししてきました

JJUG CCCに行ってきた! その4 JavaEE MVC

5月21日 JJUG CCCに行ってきた!のつづき

CD-4 ネクストStruts/Seasar2としてのJava EEアクションベースMVC入門 – MVC 1.0、Jersey MVC、RESTEasy HTML –

をメモメモ




#ccc_cd4で資料のありかはつぶやいている

■ネクストStruts/Seasar2としてのJavaEEアクションベースMVC入門
・今回の話
 Thymeleafを使っている
 ソースはGithubにある

・自己紹介

1.アクションベースMVCとは
 HTTPのリクエストに注目したフレームワーク
  Struts/Seaser2
 コンポーネントベースMVC 画面とJavaクラスが1対1
JavaEEのWebフレームワーク
 JSF:コンポーネントベース
 JAX-RS:アクションベースだがJSONを返す

アクションベースMVC
 MVC
 JAX-RSベース

JavaEEは仕様(実装はない)
 MVC1.0の参照実装はおざーく

Struts/Seaser2のアノ機能
 コントローラー
 バリデーション
 例外

ない
 画面構築がない理由
  新たなビュー言語は定義しない
  使いたいのを使え
 公式
  JSP Facelets
 Ozark独自
  Thymeleaf
 ViewEngineを使えば他も

JSP・Faceletの問題点
・JSP
  ビューとロジック交る
  XSS脆弱性
・Facelets
  全機能使えない(AJAX)
  Javascriptの相性悪い

Thymleafを使ってみよう
・ピュアなHTMLで賭ける
・デフォルトでエスケープしてくれる

MVC1.0でThymeleafを使う方法
pom.xmlにozark-thymeleafを依存性に加えるだけ

二重サブミット防止がない理由
・クライアントサイドで行うべき
  →自前で

準備
・Jax-RSの有効化
@ApplicationPath("/api")

基本的なコントローラーの作り方
 斜体 MVC1.0
 それ以外は、JAVAEEなどの
 戻り値 ビューのパス、拡張子必須

入力値を受け取るフォームクラス
  @inject Map+Iterator

渡された値の表示

バリデーション
 BindingResult

エラーメッセージの表示
エラーメッセージの記述

注意
 フォームバインディング機能はない
 @BeanParamは複数パラメータを1個のクラスにまとめただけ

フォームバインディングの実装

例外処理
 ExceptionMapperインターフェース実装クラスを作成
 @Providerを忘れずに
MVC Context
@controllerをつけるかつけないかで実装切り分けられる

・デモ

EE7におけるJerseyMVC
・Jax-RSの参照実装Jerseyの独自機能
・RestEasyJax-RSの独自実装

JerseyMVCの基本的な使いかた
・コントローラー戻り値Viewable
・コンストラクタの第二引数でビューに値を渡す

JearseyMVCでバリデーション
・コントローラーメソッドの中でバリデーションする

この方法の
・メリット
 ピュアなJAX-RS
 オレオレフレームワークを防げる
 リダイレクト

・RestEasyHTML
 RenderableをコントローラーメソッドがView
 WriterInterceptor
 コントローラーにもThymeleaf
 バリデーションはJarseyと同じ


4.その他の知っておくべき
・Jax-RSの知識が不可欠
・うらがみさんの資料 「処理パイプライン」
 JavaEE7徹底入門

まとめ

注意点
・JerseyMVC,RestEasyは標準ではない

デモ:おれおれMVC
ぷろばいだーくらすは、しんぐるとんなので、スレッドセーフではない点に注意