SpringMVC

1,895 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,895
On SlideShare
0
From Embeds
0
Number of Embeds
152
Actions
Shares
0
Downloads
16
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

SpringMVC

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

×