Spring MVC 3.0/3.1/3.2 Cookbook
Spring MVC 3.0/3.1/3.2の日本語の実用レベルのまとまった情報が少ないので、ドキュメントとして、クックブック的なレシピ集としてまとめたものとして公開します。
まだ、書きかけのところもありますが、Spring MVCの大体の機能は説明できていると思います。
基本的に、自分が使っている機能をまとめています。
Spring MVCに直接関係しないものも多々あります。書いていたら、いつの間にか増えてました(JAXBやRELAX NGとか)。
今後も主にこの方針で更新していきますが、ページ数が多くなった場合、分割するかもしれません。
目指すところ
- Webアプリケーションを作成するときに、フレームワークの選定する際の候補としてSpring MVCも入れてほしいので、その参考資料としても使えるようにする。また、目次をみれば、Spring MVCで何ができるのかできるだけわかるようにする。
- Struts1.xの経験した人ならば、拡張しづらく、使いづらいと思った部分が、Spring MVCを使用することで改善されていることを知ってほしい。
今後の主な予定
変更履歴
- 2013/01/06 「RESTサービス」の章を大幅に加筆。JAXB、REALX NGも追加しました。
- 2012/11/20 「SiteMesh」の章を追加。
- 2012/10/28 公開。
公開先(Google Drive)
ページ数が約480ページと多いため、「ファイル」メニューの「ダウンロード」からファイルをダウンロードして閲覧することをお勧めします。
- PDF版(Spring3.0〜3.1)(約4MB)
https://googledrive.com/host/0BzR3hjGfqNYFMW9tYVZnY01SbEk/SpringMVC3.1.pdf
https://drive.google.com/open?id=0BzR3hjGfqNYFdHhmbHFqQTgxazA
- Word版(Spring3.0〜3.1)(約4MB)
https://googledrive.com/host/0BzR3hjGfqNYFMW9tYVZnY01SbEk/SpringMVC3.1.docx
https://drive.google.com/open?id=0BzR3hjGfqNYFdkVfcnhGUnFJQmc
- PDF版(Spring3.2のマージ途中のもの)
https://googledrive.com/host/0BzR3hjGfqNYFMW9tYVZnY01SbEk/SpringMVC3.2.pdf
https://drive.google.com/open?id=0BzR3hjGfqNYFRHlYQk5aOWN3ZTQ
- Word版(Spring3.2のマージ途中のもの)
https://googledrive.com/host/0BzR3hjGfqNYFMW9tYVZnY01SbEk/SpringMVC3.2.docx
https://drive.google.com/open?id=0BzR3hjGfqNYFZFhPLXBOd1UwY2c
目次
1SPRING3.1の変更点 1.1.SERVLET 3に対応 1.1.1.Sevrlet3.0を使用するためのweb.xmlの記述の変更 1.1.2.TLD(タグライブラリ定義)ファイルの配置場所の変更 1.1.3.Servlet3.0を使用するためのpom.xmlの記述の変更 1.1.4.Springの定義情報読み込み方法の追加 1.1.5.Servlet3.0のマルチパート(ファイルアップロード)に対応 1.2.@REQUESTPARTの説明を行う(:TODO) 1.3.アノテーションンを処理する各種HANDLERMETHODの変更 1.4.アノテーション「@REQUESTMAPPING」の改善 1.5.FLASH ATTRIBUTE(フラッシュ属性、フラッシュスコープ)の実装 1.6.URIテンプレート変数の改良(:TODO) 1.7.@REQUESTBODY時に指定した@VALIDアノテーションの動作 1.8.URIを組み立てるためのURICOMPONENTSBUILDERの追加(:TODO) 2SPRING MVCによる開発 2.1.はじめに 2.2.SPRING MVCの処理フロー 2.3.ファイル構成 2.4.設定ファイルの準備 2.4.1.pom.xml 2.4.2.web.xml 2.4.3.アプリケーション用(共通の)Spring Beanファイル 2.4.4.Spring MVC用の設定ファイル 2.4.5.EclipseのプラグインSpringIDE 3コントローラの作成 3.1.簡単なコントローラの作成 3.1.1.簡単なJSPの定義 3.1.2.ファイルの配置 3.1.3.Webブラウザからアクセスする 3.2.コントローラの引数と戻り値 3.2.1.コントローラの引数一覧 3.2.2.コントローラの戻り値の一覧 3.2.3.よくある処理ごとの引数と戻り値の組合せ 3.3.@REQUESTMAPPINGによる様々なURLの処理 3.3.1.アノテーション「@RequestMapping」の仕様 3.3.2.サンプル「クラスに定義する」 3.3.3.サンプル「メソッドのみに定義する」 3.3.4.サンプル「URLをクラスとメソッドの両方に定義する」 3.3.5.サンプル「Welcome用のURLを定義する」 3.3.6.サンプル「URLの一部が動的に変化するURLを定義する」 3.3.7.同じURLに対してHTTPメソッドにより処理を振り分ける 3.3.8.複数のsubmitボタンにより処理を振り分ける 3.3.9.HTTPヘッダーによりリクエスト/レスポンスを制限する(TODO) 3.4.URLへの転送方法 3.4.1.ForwardによるURL転送 3.4.2.RedirectによるURL転送 3.4.3.フラッシュスコープ(Flash Scope)を使用したredirectによるURL転送(独自実装) 3.4.4.フラッシュ属性を使用したredirectによるURL転送(Spring MVC 3.1) 3.5.VIEWRESOLVER(:TODO) 3.5.1.Apache Tilesを使用する(:TODO) 4FORMデータの送受信 4.1.基本的なデータの送受信 4.1.1.@RequestParamによるデータの送受信 4.1.2.Command(@ModelAttribute)によるデータの送受信 4.2.データバインドエラー(型ミスマッチ)処理 4.2.1.データバインドのエラーメッセージのサンプル 4.2.2.List型、Map型のバインド時のエラーメッセージ 4.2.3.項目名を埋め込む 4.3.独自のデータ型のバインド(@INITBINDER) 4.3.1.日付型のバインド(CustomDateEditor) 4.3.2.数値型のバインド(CustomNumberEditor) 4.3.3.CustomEditorの名前による関連付け方法(pathの指定方法) 4.3.4.システム全体のバインドの設定 4.3.5.様々なCustomEditor(PropertyEditor) 4.3.6.列挙型のバインド 4.3.7.アノテーションを使用したデータバインド(:TODO) 4.4.ファイルアップロード 4.4.1.ファイルアップロードの準備(Spring MVC 3.0+Commons FileUpload) 4.4.2.ファイルアップロードの準備(Spring MVC 3.1+Servlet3.0のマルチパート機能) 4.4.3.単純なファイルアップロード 4.4.4.リスト形式によるファイルアップロード 4.4.5.ファイルサイズの上限値のを超えてアップロードした場合の処理 4.5.リスト、マップなどの複雑なデータ構造を送受信する 4.5.1.プロパティの位置(=path)の表現 4.5.2.リストによるデータの送受信 4.5.3.マップによるデータの送受信 4.5.4.マップとリスト組み合わせたデータの送受信 5RESTサービスの作成 5.1.JSON/XMLデータの送受信 5.1.1.準備 5.1.2.サーバ側でJSONデータを出力/クライアント側で取得する場合 5.1.3.クライアント側でJSONデータを送信/サーバ側で受信する場合 5.1.4.サーバ/クライアント側の両方でJSONデータを送受信する 5.1.5.サーバ側でXMLデータを出力/クライアント側で取得(JAXB) 5.1.6.クライアント側でXMLデータを送信/サーバ側で受信する場合 5.1.7.サーバクライアント側の両方でXMLデータ送受信する 5.2.RESTFULなシステム設計 5.2.1.RESTサービスにおけるURIの決め方 5.2.2.RESTサービスにおけるHTTPメソッドの役割 5.3.SPRING MVCにおけるRESTFULサービスの実現 5.3.1.データの変換「HttpMessageConverter」 5.4.RESTFULなURIの実装 5.4.1.URIにパス変数が1つの場合 5.4.2.URIにパス変数が複数の場合 5.4.3.URIにパス変数とFORMデータをクライアントから送信する 5.4.4.URIにパス変数とJSON/XMLデータを送受信する 5.4.5.パス変数の値を正規表現でフィルタする 5.5.RESTサービスによるエラー処理 5.5.1.サーバ側 5.5.2.クライアント側 5.6.クライアント側「RESTTEMPLATEによるRESTサービスへのアクセス」 5.6.1.RestTemplateをSpring Beanとして定義する 5.6.2.RestTemplateのメソッド(TODO) 5.6.3.URIの組み立て(UriTemplate、UriComponents/UriComponentsBuilder)(TODO) 5.7.JAXBのJAVAソースの自動生成 5.7.1.RELAX NGファイルの作成 5.7.2.TrangによるXML Schemaファイルの変換 5.7.3.xjcコマンドを使用したJAXBのソース生成 5.7.4.RELAX NGからJAXBソースの生成 5.7.5.JAXBのソースを修正するツール 5.7.6.JAXBを利用してXMLを読み書きする(JAXBのライブラリを使用する) 5.7.7.JAXBを利用してXMLを読み書きする(Springのライブラリを使用する)(:TODO) 5.8.RELAX NG(リラクシング)について 5.8.1.RELAX NGの基本 5.8.2.XML Schemaのデータ型 5.8.3.ポイント「使用すべきでないRELAX NGの記述」 5.8.4.ポイント「JAXBのJavaソースのクラス分割の制御」 6EL式(EXPRESSION LANGUAGE) 6.1.EL式の基本 6.1.1.EL式の暗黙オブジェクト 6.1.2.EL式の演算子 6.1.3.EL式の演算子の優先順位 6.2.EL FUNCTIONの作成(:TODO) 6.3.JSTL FUNCTIONS 6.3.1.JSTL Functionsの設定/使用例 6.3.2.JSTL Functionsの一覧 6.4.AMATERAS 「JAVA STANDARD EL FUNCTIONS(JSEL)」 6.4.1.JSELの設定 6.4.2.JSELの使用例 6.5.SPRING EXPRESSION LANGUAGE(SPEL) 6.5.1.SpELの言語仕様 6.5.2.SpELの使用例 7入力値検証 7.1.ERRORSクラスを使用した入力値検証 7.1.1.Errorsを使用した入力値検証のサンプル 7.1.2.エラー時に使用するクラス 7.2.VALIDATORを実装した入力値検証 7.2.1.Validatorの基本 7.2.2.ポイント:ValidatorをSpring Beanとして扱う 7.2.3.ポイント:抽象クラスによりキャスト処理を省略する 7.2.4.ポイント:フィールドを検証する際のユーティリティメソッド 7.2.5.ポイント:フィールド用Validatorを作成し検証する 7.2.6.ポイント:@Validを使用したValidatorの呼び出し 7.2.7.リストを項目とするCommandの入力値検証 7.2.8.マップを項目とするCommandの入力値検証 7.2.9.Validatorによる階層を持つCommandの入力値検証 7.2.10.エラーメッセージの定義 7.3.BEAN VALIDATIONを利用した入力値検証 7.3.1.Bean Validationの準備 7.3.2.Bean Validationを使用する 7.3.3.Bean Validationのアノテーションの一覧 7.3.4.こんなときは:エラーメッセージの定義場所を変更したい 7.3.5.こんなときは:Bean Validationがうまく動作しない場合 7.3.6.こんなときは:Commandごとにメッセージを変更したい 7.3.7.Bean Validationのアノテーションを独自実装する 7.4.OVAL(OBJECT VALIDATION FRAMEWORK)を利用した入力値検証 7.4.1.Ovalの準備 7.4.2.OVal Validatorを使用する 7.4.3.Ovalのアノテーション一覧 7.4.4.Bean Validationのアノテーションを使用する 7.4.5.EJB3 JPAのアノテーションを使用する 7.4.6.XMLによる設定を使用する 7.4.7.POJOConfigureを使用する 7.4.8.OValのエラーメッセージのカスタマイズ 7.4.9.SpringValidatorを拡張する 7.4.10.条件付きチェック 7.4.11.ネストしたComamndの検証を行う「@AssertValid」 7.4.12.Getterメソッドにアノテーションを付与する「@IsInvariant」 7.4.13.独自の検証用メソッドを呼ぶ 7.4.14.OValの独自アノテーションを実装する 7.4.15.条件付きチェックに「SpEL」を使用する 8セッション管理 8.1.セッションスコープ 8.2.SERVLET APIを使用したセッション管理 8.2.1.JSPを使用したセッション管理(:TODO) 8.3.SPRING MVCのセッション管理 8.3.1.セッション上のデータ呼び出し 8.3.2.WebRequestクラスを使用する場合 8.3.3.SpringBeanを使用したセッション管理 8.4.@SESSIONATTRIBUTESを使用したセッション管理 8.4.1.セッションが切れている場合の問題点(:TODO) 8.5.フラッシュスコープの実装 8.5.1.フラッシュスコープの実装にあたって 8.5.2.「FlashMap.java」の実装 8.5.3.「FlashMapFilter.java」の実装 8.5.4.「FlashMapStoringRedirectViewResolver.java」の実装 8.5.5.「web.xml」の編集 8.5.6.「servlet-context.xml」の編集 8.6.JSPでのセッションデータの取得・設定方法(:TODO) 8.6.1.Servlet(:TODO) 8.6.2.Spring MVC(:TODO) 9権限チェック(認証・認可機能) 9.1.「SPRING SECURITY」を利用した権限チェック(:TODO) 9.2.独自実装のアノテーションを利用した権限チェック(SPRING MVC 3.0) 9.2.1.独自アノテーションを利用した権限チェックの実装にあたって 9.2.2.「LoginUserBean.java」の実装 9.2.3.「Authorize.java」の実装 9.2.4.「AuthorizeHandlerMethodAspect.java」の実装 9.2.5.「SessionTimeoutException.java」の実装 9.2.6.「InvalidRoleException.java」の実装 9.2.7.「servlet-context.xml」の編集 9.2.8.アノテーションを使用した権限チェックのサンプル 9.3.独自実装のアノテーションを使用した権限チェック(SPRING MVC 3.1) 9.3.1.「AuthorizeHandlerInterceptor.java」の実装 9.3.2.「servlet-context.xml」の編集 9.4.独自実装のカスタムタグを利用した権限処理 9.4.1.カスタムタグを利用した権限処理の実装にあたって 9.4.2.「AuthorizeTag.java」の実装 9.4.3.「authorize.tld」の実装 9.4.4.カスタムタグを使用した権限チェックのサンプル 10国際化 10.1.JSPからプロパティファイルの値を呼び出す 10.2.CONTROLLER、SERVICE(F層)からプロパティファイルの値を呼び出す 10.3.テーマの設定 10.3.1.テーマの切り替えの基本設定 10.3.2.様々なThemeResolver 10.4.ロケール(地域・言語)の切り替え 10.4.1.ロケールの切り替えの基本設定 10.4.2.様々なLocaleResolver 11例外処理 11.1.CONTROLLERでの例外ハンドリング「@EXCEPTIONHANDLER」 11.1.1.例外処理用メソッドの引数と戻り値 11.1.2.AnnotationMethodHandlerExceptionResolverを明示的に定義する 11.2.システム全体での例外ハンドリング 11.2.1.SimpleMappingExceptionResolverを使用する 11.2.2.DefaultHandlerExceptionResolverを使用する 11.2.3.独自実装したHandlerExceptionResolverを使用する 11.3.WEB.XMLで例外時の遷移先を定義する 11.4.JSPで例外が起きた場合の遷移先の指定 12カスタムタグ 12.1.SPRING MVC用のカスタムタグ1(<SPRING:XXX>) 12.1.1.はじめに 12.1.2.カスタムタグ<spring:bind> 12.1.3.カスタムタグ<spring:escapeBody> 12.1.4.カスタムタグ<spring:hasBindErrors> 12.1.5.カスタムタグ<spring:htmlEscape> 12.1.6.カスタムタグ<spring:message> 12.1.7.カスタムタグ<spring:nestedPath> 12.1.8.カスタムタグ<spring:theme> 12.1.9.カスタムタグ<spring:transform> 12.1.10.カスタムタグ<spring:url> 12.1.11.カスタムタグ<spring:eval> 12.2.SPRING MVC用のカスタムタグ2(<FORM:XXX>) 12.2.1.はじめに 12.2.2.カスタムタグ<form:form> 12.2.3.カスタムタグ<form:errors> 12.2.4.カスタムタグ<form:label> 12.2.5.カスタムタグ<form:input> 12.2.6.カスタムタグ<form:hidden> 12.2.7.カスタムタグ<form:textarea> 12.2.8.カスタムタグ<form:password> 12.2.9.カスタムタグ<form:checkbox> 12.2.10.カスタムタグ<form:checkboxes> 12.2.11.カスタムタグ<form:radiobutton> 12.2.12.カスタムタグ<form:radiobuttons> 12.2.13.カスタムタグ<form:select>、<form:option> 12.2.14.カスタムタグ<form:options> 12.3.標準タグライブラリJSTL 13ページをタイル化する 13.1.APACHE TILES(:TODO) 13.2.SITEMESH 13.2.1.SiteMeshの準備 13.2.2.「web.xml」の編集 13.2.3.「sitemesh.xml」の作成 13.2.4.「decorators.xml」の作成 13.2.5.レイアウト用JSPの作成 13.2.6.SiteMesh用のカスタムタグライブラリ 14ユーティリティ 14.1.ログ出力 14.1.1.Log4jの設定 14.1.2.ログの出力 14.2.アプリケーションの初期化プログラムの実行 14.3.ライブラリ「COMMONS CONFIGURATION」を使用する 14.3.1.「CommonsConfigurationFactoryBean」を使用する 14.3.2.Spring Beanとして「Configutation」を定義、組み立てる 14.4.JSPのページディレクティブのWEB.XMLでの一括指定 15二重送信のチェック 15.1.JAVASCRIPTによる確認ダイアログの表示 15.2.トークンによるチェック 15.2.1.TokenProcessorの実装 15.2.2.トークンによるチェック 16CONTROLLERでDBトランザクションを制御する(:TODO)
参考
- 作者: Bill Siggelkow,長瀬嘉秀(監訳),永田渉(監訳),株式会社テクノロジックアート
- 出版社/メーカー: オライリージャパン
- 発売日: 2006/01/16
- メディア: 大型本
- 購入: 1人 クリック: 11回
- この商品を含むブログ (6件) を見る
SpringによるWebアプリケーションスーパーサンプル 第2版
- 作者: 株式会社クロノス,阪田浩一
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2010/11/10
- メディア: 単行本
- 購入: 3人 クリック: 86回
- この商品を含むブログ (17件) を見る
- 作者: 竹添直樹,島本多可子,小津美夕紀,亀井隆司
- 出版社/メーカー: 翔泳社
- 発売日: 2011/07/16
- メディア: 大型本
- 購入: 6人 クリック: 217回
- この商品を含むブログ (25件) を見る
Spring3入門 ――Javaフレームワーク・より良い設計とアーキテクチャ
- 作者: 長谷川裕一,大野渉,土岐孝平
- 出版社/メーカー: 技術評論社
- 発売日: 2012/11/02
- メディア: 大型本
- 購入: 8人 クリック: 115回
- この商品を含むブログ (15件) を見る
経緯など
もともと、Spring 3.0がリリースされてしばらく経った2011年頃に、業務での利用を検討をしたのがきっかけでした。当時、Spring MVCというより Spering 3自体の日本語情報がWebも含め書籍もあまりなく、また、チームのメンバが「フレームワークって何?」という状況でした。
それまでは、Service、DAO機能としてSpringを使っていましたが、Spring MVCを使うのが自分も初めてだったので、勉強と他のチームへの指導も含めてこのドキュメントを作り始めました。
そのシステムの仕事は3か月で終わったのですが、ドキュメントも基本機能しかまとめられていませんでした。
その後、趣味で作っていた自宅のシステムでもSpring MVCを使おうかと思い、少しずつ情報をまとめていました。
その1年後の2012年頃は、ようやくSpring 3および、Spring MVCの情報が日本語のWebでも見られるようになってきました。しかし、まだ基本的な機能の説明が多く、実際に業務で使うとなると情報が足りないと感じていました。
海外では、Spring MVCの認知度も高く使用例もそれなりにあるのに、日本では何故人気がないのかと考えた際に、単純に日本語情報が少ないというのが1つの理由としてあるのではと思いました。
そのため、Spring MVCの日本での普及も含めて情報を公開しようという思いました。単純に普及だけではなく、広く使われることで情報も増えてきて、自分が知らない情報を集めやすくなるという思惑もあります。
さらに、自分でやっとJavaの中級者レベルの地点に到達したと感じるようになったため、さらに上を目指すためにも、情報発信することで自分の知識・技術を評価などしたいと思います。
誤字・脱字は多く、読み辛いかもしれませんが、みなさんのお役にたてれればと思います。