SlideShare a Scribd company logo
SpringMVC
-Weapons for the War on Java Complexity -
自己紹介
名前
片山 暁雄
ID
id:c9katayama
所属
株式会社キャピタルアセットプランニング
Agenda
SpringMVCとは
基本的な仕組み
クラス群
アノテーション利用のスタイル
デモ
利点欠点
まとめ
SpringMVCとは
Spring謹製のWebフレームワーク
MVCパターンを採用し、各種
View(JSP,XML,XSLT,Tiles,Velocity,FreeMarker,
PDF,JasperReport)を利用可能
Controller部分も充実
SpringMVCとは
Spring1.0,JDK1.4以降で動作
ただしアノテーションを利用する場合は
Spring2.5、JDK1.5が必要
Apache License2.0
SpringSourceで開発中
SpringMVC
基本的な仕組み
SpringMVC
Dispatcher
Servlet
Web
Application
Context
HandlerMapping
HandlerAdapter Handler
view
ModelAndView
Model View
SpringMVC
Dispatcher
Servlet
Web
Application
Context
HandlerMapping
HandlerAdapter Handler
view
ModelAndView
Model View
 DispatcherServlet
 リクエストを受け付けるサーブレット
初期化時にSpringの設定ファイルを読み
込み、WebApplicationContextを初期化
SpringMVC
Dispatche
Servlet
Web
Application
Context
HandlerMapping
HandlerAdapter Handler
view
ModelAndView
Model View
 HandlerMapping
 リクエストと、実処理を行うHandlerのマッピング
 URLとクラス名、URLとアノテーションなど
SpringMVC
Dispatche
Servlet
Web
Application
Context
HandlerMapping
HandlerAdapter Handler
view
ModelAndView
Model View
 HandlerAdapter
 Handlerのメソッドを呼び出す役割
 Handlerの種類によって決定
SpringMVC
Dispatcher
Servlet
Web
Application
Context
HandlerMapping
HandlerAdapter Handler
view
ModelAndView
Model View
 Handler
 リクエストを処理する役割(StrutsのAction部分)
 ここは実装します
SpringMVC
Dispatche
Servlet
Web
Application
Context
HandlerMapping
HandlerAdapter Handler
view
ModelAndView
Model View
 ModelAndView
 画面に出力するデータ(Model)と画面出力処理(View)
SpringMVC
Dispatche
Servlet
Web
Application
Context
HandlerMapping
HandlerAdapter Handler
view
ModelAndView
Model View
 view
 JSPとかHTMLとか
 ここも実装
SpringMVC
ポイント
各種役割が抽象化されている
役割ごとに用意されてるクラスが多数ある
設定ファイル・アノテーションで入れ替え可能
SpringMVC
役割ごとのクラス群
SpringMVC
HandlerMapping HandlerAdapter
SpringMVC
HandlerView
ポイント
クラスが多い
正直、よくわからない
SpringMVC
開発スタイルに応じた様々な便利クラスが混在
しているため、混乱してしまう
SpringMVC
開発スタイル
設定ファイル+便利クラス群のスタイル
アノテーション利用のスタイル
Spring2.5以降なら、アノテーション利用の
スタイルがおすすめ
SpringMVC
これだけ押さえよう
アノテーション利用のスタイル
SpringMVC
HandlerMapping DefaultAnnotationHandlerMapping
Springに登録されたHandlerの中から、RequestMappingアノ
テーションを読み取り、URLと合致するHandlerを探す
SpringMVC
HandlerAdapter AnnotationMethodHandlerAdapter
HandlerMappingで条件にあったHandlerのRequestMappingア
ノテーションから、パス・パラメータ・HTTPメソッドを読み
取り、リクエストの条件と一致するメソッドを見つけて呼び
出す
SpringMVC
・DefaultAnnotationHandlerMapping
・AnnotationMethodHandlerAdapter
いずれもデフォルトでDispatcherServletに
登録されている。
アノテーションを利用する場合は自動的に
これらが使用されるため、特に意識する
必要はない
SpringMVC
View
Handler
AnnotationMethodHandlerAdapterがHandlerの戻り値を元に
適切に処理してくれるため、ひとまず忘れる
POJOに対してアノテーションを付与して作成
ここだけ覚えればMVCマスター!
SpringMVC
アノテーションを使った
Handler
SpringMVC
@Controller
@RequestMapping("/login.do")
public class LoginController {
@RequestMapping(method = RequestMethod.GET)
public String setup(Model model) {
model.addAttribute(new LoginForm());
return "login.jsp";
}
@RequestMapping(method = RequestMethod.POST)
public String doLogin(LoginForm loginForm, Errors errors) {
if (errors.hasErrors()) {
return "login.jsp";
}else{
return “redirect:menu.do”;
}
}
}
SpringMVC
@Controller
SpringにHandlerクラスを登録するためのアノ
テーション
Handlerクラスに付与
SpringMVC
package sample.springmvc.controller
@Controller
public class LoginController {
<context:component-scan
basepackage= sample.springmvc.controller />
指定パッケージ以下をスキャン!
SpringMVC
@RequestMapping
リクエストと、それを処理するHandlerをひも
づけるアノテーション
パス、リクエストパラメータ、HTTPメソッドを
利用してひもづけ
クラスとメソッドに付与できる
SpringMVC
@Controller
@RequestMapping("/login.do")
public class LoginController {
@RequestMapping(method = RequestMethod.GET)
public String setup(Model model) {
model.addAttribute(new LoginForm());
return "login.jsp";
}
@RequestMapping(params=”character=EEDA”)
public String character() {
return “character.jsp”
}
SpringMVC
@Controlleと@RequestMappingさえあれば、リクエ
ストに対して処理を行うクラス/メソッドを関連づけ
できる。
SpringMVC
Handlerのメソッド
SpringMVC
メソッド名
何でもいい(@RequestMappingで関連づ
けるため)
SpringMVC
メソッド引数
J2EEで利用出来るオブジェクト
Model
SessionStatus
@RequestParam
POJO (@ModelAttribute)
Errors
必要な物を引数で宣言
SpringMVC
J2EEで利用出来るオブジェクト
HttpServletRequest,Response
HttpSession
Reader,InputStream
Writer,OutputStream
Principal
Locale
SpringMVC
Model
Viewに渡すデータを格納するオブジェクト
setAttribute()で値をセット
setAttribute(value)の場合、暗黙的にキーが
設定される
@RequestMapping(method = RequestMethod.GET)
public String setup(Model model) {
model.addAttribute(new LoginForm());
return "login.jsp";
} 「loginForm」が
キー値になる
SpringMVC
SessionStatus
@ SessionAttributesと対になって動作
SessionStatus.setComplete()を呼び出す
と、@SesssionAttributeでセッションに格納し
たオブジェクトがセッションから削除される
削除対象は、setComplete()を呼んだクラス
が付与している@SesssionAttributesの値
SpringMVC
@SessionAttributes
Modelに入っているオブジェクトのうち、セッショ
ンに格納しておきたいオブジェクトのキーを指
定
SpringMVC
@Controller
@RequestMapping("/login.do")
@SessionAttributes(“loginForm”)
public class LoginController {
@RequestMapping(method = RequestMethod.GET)
public String setup(Model model) {
model.addAttribute(“loginForm”,new LoginForm());
return "login.jsp";
}
「loginForm」をキーとし
てセッションに入る
SpringMVC
@Controller
@RequestMapping("/login.do")
@SessionAttributes(“loginForm”)
public class LoginController {
@RequestMapping(method = RequestMethod.POST)
public String doEnd(SessionStatus status) {
status.setComplete();
return "login.jsp";
}
「loginForm」がキー値
のオブジェクトがセッション
から削除される
SpringMVC
@RequestParam
リクエストパラメータを取得するためのアノ
テーション
デフォルトでrequired。パラメータがリクエスト
にない場合、例外が発生
SpringMVC
/sample/login.do?id=hoge
@RequestMapping(method = RequestMethod.POST)
public String doLogin(@RequestParam(“id”) String id) {
//idに”hoge”が入る
}
SpringMVC
POJO (@ModelAttribute)
POJOを指定すると、リクエストパラメータが
バインドされる
@ModelAttribute( name )を付与する
と、nameをキーにしてModelにPOJOが入る。
(付与しない場合は暗黙的な名前でModelに
入る)
SpringMVC
@RequestMapping(method = RequestMethod.POST)
public String doLogin(LoginForm loginForm, Errors errors) {
}
@RequestMapping(method = RequestMethod.POST)
public String doLogin(
@ModelAttribute(“loginForm”)LoginForm loginForm,
Errors errors) {
}
SpringMVC
Errors
リクエストパラメータをPOJOに変換する際、
型変換などが起きた場合にそのエラーを取
得するためのクラス
SpringMVC
@RequestMapping(method = RequestMethod.POST)
public String doLogin(LoginForm loginForm, Errors errors) {
if (errors.hasErrors()) {
return "login.jsp";
}else{
return “redirect:menu.do”;
}
}
SpringMVC
メソッド戻り値
通常はString
ModelAndViewを返す事も可能
voidの場合、ViewResolverというクラスが
リクエストパラメータからViewを組み立てる
(/login.do -> /login.jspのような変換)
SpringMVC
ポイント
いきなり全機能を使うのは難しい
まずは@RequestMapping+J2EEのクラスで
SessionStatusとSessionAttributeは使わ
なくてもOK(通常のHttpSessionを使う)
暗黙的な仕様部分は避ける
型変換はフレームワークに任せて、それ
以外のバリデーションはハンドラメソッド内
で行う
SpringMVC
view
SpringMVC
カスタムタグ
Struts風のFormタグ
エラータグ
SpringMVC
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<form:form modelAttribute="loginForm">
ID: <form:errors path="id"/>
<form:input path="id" size="30" maxlength="30"/>
PASSWORD: <form:errors path="password"/>
<form:password path="password" size="10" maxlength="10"/>
<input type="submit" value="login"/>
</form:form>
SpringMVC
デモ
SpringMVC
利点
いくつかアノテーションを覚えれば、すぐにURL
とマッピング出来る
柔軟なマッピング
リクエストパラメータからPOJOへの型変換を、
フレームワークが行ってくれる
Handlerがコンテナ管理されているため、DIが
可能
カスタマイズが容易
SpringMVC
欠点
ModelやSessionAttributesなどの概念がわか
りずらい(オブジェクトのライフサイクルが見え
にくい)
CoC的に処理される部分がわりとある
トランザクションはサポートしていない
(SpringWebFlow)
コンテナの選択肢がSpringしかない
SpringMVC
まとめ
アノテーションスタイルなら設定の記述も
少なく、手軽に使い始められる
タグはStruts風なので、なじみやすい
とりあえず はじめてみよう MVC

More Related Content

What's hot (20)

PDF
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Java女子部
 
PDF
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
david9142
 
PDF
Mvc conf session_1_osada
Hiroshi Okunushi
 
PDF
はじめての ASP.NET MVC
jz5 MATSUE
 
PDF
WildFly Swarmではじめる「パーツとしてのJavaEE」
Hiroaki NAKADA
 
PDF
JavaScript.Next
dynamis
 
PPTX
ASP.NET MVC プログラミング入門の入門
Masuda Tomoaki
 
KEY
MVCもやもや話
Tetsuya Kaneuchi
 
PPTX
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
慎一 古賀
 
PDF
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
Daizen Ikehara
 
PDF
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
Takakiyo Tanaka
 
PPTX
Jsf アプリ作ったった
Oda Shinsuke
 
PDF
Java仮想マシンの実装技術
Kiyokuni Kawachiya
 
PDF
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
 
PDF
そろそろ押さえておきたい AngularJSのセキュリティ
Muneaki Nishimura
 
PDF
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
Toshiaki Maki
 
PPTX
ついに始まるJava EE 7時代のアプリケーション開発
Takakiyo Tanaka
 
PPTX
エンタープライズ分野での実践AngularJS
Ayumi Goto
 
PDF
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Yoshitaka Kawashima
 
PDF
ASP.NET シングル ページ アプリケーション (SPA) 詳説
Akira Inoue
 
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Java女子部
 
[公開用]Netラボ2012年2月勉強会 asp.netmvc4 beta新機能の紹介
david9142
 
Mvc conf session_1_osada
Hiroshi Okunushi
 
はじめての ASP.NET MVC
jz5 MATSUE
 
WildFly Swarmではじめる「パーツとしてのJavaEE」
Hiroaki NAKADA
 
JavaScript.Next
dynamis
 
ASP.NET MVC プログラミング入門の入門
Masuda Tomoaki
 
MVCもやもや話
Tetsuya Kaneuchi
 
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
慎一 古賀
 
jQuery/Html5/ASP.NET MVC 対応コンポーネントを用いたデバイス対応業務アプリケーション開発
Daizen Ikehara
 
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
Takakiyo Tanaka
 
Jsf アプリ作ったった
Oda Shinsuke
 
Java仮想マシンの実装技術
Kiyokuni Kawachiya
 
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
 
そろそろ押さえておきたい AngularJSのセキュリティ
Muneaki Nishimura
 
MVC 1.0 JSR-371を通してAdopt a JSRに知ろう #jjug_ccc #ccc_r57
Toshiaki Maki
 
ついに始まるJava EE 7時代のアプリケーション開発
Takakiyo Tanaka
 
エンタープライズ分野での実践AngularJS
Ayumi Goto
 
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Yoshitaka Kawashima
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
Akira Inoue
 

More from Akio Katayama (20)

PPTX
AWS Elastic BeanstalkとAWS Lambdaのご紹介
Akio Katayama
 
PPTX
SORACOMでのJava/AWS活用
Akio Katayama
 
PPTX
IAMでまもれ僕らのAWS(JAWS-UG 初心者支部)
Akio Katayama
 
PDF
3つのS3バケット
Akio Katayama
 
PDF
前座Lambda
Akio Katayama
 
PDF
AWS Mahjong
Akio Katayama
 
PDF
JAWS-UG名古屋 Lambda-LT
Akio Katayama
 
PDF
[JAWS-UG 三都物語 2014] 三都物語でAmazon SWFと握手!
Akio Katayama
 
PDF
AWS Cloud Design Pattern for Enterprise
Akio Katayama
 
PPTX
あたらしいCloud Design Pattern
Akio Katayama
 
PDF
AWS re:Invent 2013 参加報告(新サービスとセッション)
Akio Katayama
 
PDF
AWS上で使えるストレージ十番勝負
Akio Katayama
 
PDF
AWSの共有責任モデル(shared responsibility model)
Akio Katayama
 
PPTX
PHP on Cloud
Akio Katayama
 
PDF
AWSマイスターシリーズReloaded(AWS Beanstalk)
Akio Katayama
 
PDF
CDP Night #1 静的コンテンツ配信編
Akio Katayama
 
PDF
AWSマイスターシリーズReloaded(AWS Cloudformation)
Akio Katayama
 
PPTX
Amazon SimpleWorkflowのご紹介
Akio Katayama
 
PDF
Aws meister-cloud formation-summit2012
Akio Katayama
 
PDF
Aws elastic beanstalk-handson-summit2012
Akio Katayama
 
AWS Elastic BeanstalkとAWS Lambdaのご紹介
Akio Katayama
 
SORACOMでのJava/AWS活用
Akio Katayama
 
IAMでまもれ僕らのAWS(JAWS-UG 初心者支部)
Akio Katayama
 
3つのS3バケット
Akio Katayama
 
前座Lambda
Akio Katayama
 
AWS Mahjong
Akio Katayama
 
JAWS-UG名古屋 Lambda-LT
Akio Katayama
 
[JAWS-UG 三都物語 2014] 三都物語でAmazon SWFと握手!
Akio Katayama
 
AWS Cloud Design Pattern for Enterprise
Akio Katayama
 
あたらしいCloud Design Pattern
Akio Katayama
 
AWS re:Invent 2013 参加報告(新サービスとセッション)
Akio Katayama
 
AWS上で使えるストレージ十番勝負
Akio Katayama
 
AWSの共有責任モデル(shared responsibility model)
Akio Katayama
 
PHP on Cloud
Akio Katayama
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
Akio Katayama
 
CDP Night #1 静的コンテンツ配信編
Akio Katayama
 
AWSマイスターシリーズReloaded(AWS Cloudformation)
Akio Katayama
 
Amazon SimpleWorkflowのご紹介
Akio Katayama
 
Aws meister-cloud formation-summit2012
Akio Katayama
 
Aws elastic beanstalk-handson-summit2012
Akio Katayama
 
Ad

SpringMVC