■SpringMVC の小径 第4歩 Spring-MVCの初期設定 |
4-2)Spring-MVC設定 |
最後の岩場をひと踏ん張り。 Spring-MVCが動くか動かないかは、このSpring-MVC設定にかかってます。 一息、コーヒーブレイクしてもいいですが、ここは一気に突き進みましょう。 前節、「4-1)web.xml 設定」で、あらかじめ設定ファイル名を「applicationContext.xml」と決めたので これに従って、ファイルを作成します。 そろそろ、みなさん武器(Eclipse)の使い方も慣れてきたころだと思うし、 私もいちいち画像の貼り付けが苦痛になってきたので、手抜きできるところは手抜きしながら話を進めます。^^); Eclipse「ナビゲータ」の「WebContent/WEB-INF」を選択し、マウス右ボタンクリックでメニューを表示し、 表示されたメニューから「新規」ー「ファイル」を選択します。 「新規ファイル」画面が開くので、ファイル名に「applicationContext.xml」を入力して決定します。 「エディットビュー」に空の「applicationContext.xml」が開くので、以下の内容を入力します。 |
WebContent/WEB-INF/applicationContext.xml |
※)上のapplicationContext.xmlの内容は、自由にコピペしてもらって結構です。 では、すこし丁寧に説明します。 1)2行目~18行目 Spring bean宣言 Spring-MVCで使用する、おまじないの各種bean定義です。 他にも色々追加できますが、とりあえず今回は必要なだけ。 applicationContext.xmlは、<beans>で始まり、最後の</beans>で完了します。 この間に、様々な設定を記述していきます。 2)20行目~30行目 アノテーション有効化 Spring-MVCで使用する、@Controllerなどのアノテーションを有効にするためのおまじないです。 通常、@Controllerアノテーションしか使用しないプロジェクトの場合は、 <mvc:annotation-driven /> の宣言で十分なようですが、 @RestControllerアノテーションを使用して、JSON形式のパラメータの受け渡しを行う場合、 ContentNegotiationManagerとかいう輩が、HTTPヘッダのメディアタイプをチェックして、 場合によっては、406を返すことがあります。 これを回避するため、ContentNegotiationManagerの機能をOFFとします。 (※)Spring-MVC3.2以降から、デフォルトでContentNegotiationManager:ON らしいです。 おいおい具体的な説明をしていきますが、今のところは「おまじない」と思ってください。 3)32行目~34行目 @Autowired有効化 Spring-MVCで使用する、 @Autowiredステレオタイプアノテーションを有効にするためのおまじないです。 これを宣言しておかないと、後で作成するJavaファイルで、 @AutowiredアノテーションによりクラスのDI(ついに出ました!DIちゃん)ができません。 4)35行目~40行目 コンポーネントスキャン宣言 Spring-MVCが、@Controllerなどのアノテーションで指定されているコンポーネントをスキャンして。 DIするための宣言部です。 ここで宣言されていないパッケージ階層にクラスを作っても、Spring-MVCはDIしてくれません。 今回は、このプロジェクト用のパッケージ階層で、DIする必要のあるパッケージ階層を指定しています。 ここはプロジェクト毎に調整してください。 5)42行目~43行目 Javaの魔法呪文 後々説明しますが、AOP というJavaの魔法を使えるようにするための呪文です。 6)45行目~49行目 Validatorメッセージリソースファイル指定 入力検証結果のエラーメッセージ定義ファイルを指定する定義です。 必須ではありませんが、型変換エラー(数値フィールドに文字を入力した場合など)の場合は これを指定しておかないと Failed to convert property value of type [java.lang.String] to required type [java.lang.Integer] for property propertyname; nested exception is java.lang.NumberFormatException: For input string: "XXX" みたいな検証エラーが表示されるので書いておきましょう。 7)51行目以降 Thymeleaf設定 Spring-MVCで、Thymeleafテンプレートエンジンを使用するための設定です。 Thymeleafは、ここで設定された情報に基づき、テンプレートファイルからview(HTML)を生成します。 ここの設定は、プロジェクトが異なってもほぼ定型の記述となるので、この通りに設定してください。 以下、2か所だけ必要に応じて調整してください。 62行目の、「prefix」は、テンプレートファイルを格納する場所を指定します。 「/」は、WebContent直下にテンプレートファイルを置くという指示になります。 これを、例えば「/view」とすれば、WebContent/viewというフォルダの下に テンプレートファイルを置くという指示になります。 64行目の、「suffix」は、HTMLテンプレートファイルの拡張子を指定します。 WebContent直下にhtmlという拡張子のファイルがあれば、 Thymeleafはこれをテンプレートファイルと判断して処理します。 applicationContext.xmlに設定できるものは、当然これだけではありません。 実際の業務ではもっと様々な設定が追加されますが、ここでは必要最低限の設定だけにしておきます。 ここで、基本をしっかり理解しておけば、実際のプロジェクトでは何が足りないか分かってくるはずです。 何が足りないかが分かれば、ネット上に散らばっている断片的な情報から、何が必要かも自然に見えてくると思います。 |
さぁ、最後の難所も何とか無事(?)切り抜け、ついにSpring-MVCのお花畑に到着しました。 その前に、お花畑の入り口でちょっと一杯、コーヒブレイクして一息つきましょう。 これまでの設定に間違いがないか動作確認を行ってみます。 「2-1)Tomcatサ-バ-の設定」で、サンプルのindex.htmlを作成して、ブラウザに表示される確認を行いました。 この作業をそのまま再現します。 やり方を忘れた人は、「2-1)Tomcatサ-バ-の設定」に戻って思い出してください。 まず、Eclise「サーバービュー」で、ローカルサーバーを起動します。 |
![]() |
「コンソールビュー」にTomcatの起動メッセージがずらずらと表示されます。 このメッセージで異常な出力が見られなければ、Spring-MVCの設定は成功しています。 念のため、ブラウザを起動して、URLに「http://localhost:8080/j_Labo/」を入力してみます。 前と同じ画面が表示されれば問題ありません。Spring-MVCの設定は全て成功です。 とりあえず、お疲れ様でした。 振り返ってみれば、自宅から随分遠くまで歩いてきましたが、 実は、最終目標はまだ遠くにかすんで見えます。 富士登山に例えれば、やっと五合目に到達したぐらいでしょうか? ここらでちょっとランチタイムにして、目前に広がるSpring-MVCのお花畑を思い切り楽しみましょう。 |
※)2018/Jun/04 JDK-10移行 JDK-10に移行するにあたり、ちょっとはまってしまったので、 備忘録として残しておきます。 Linux上の、実行環境は単純に、Javaのパスを切り替えるだけですんなりと動いたものの、 いざ、Maven pom.xml を使ってLinuxでビルドしようとしたところ、 いくつかビルドエラーが出てビルドが異常終了します。 (※Eclipse上では特に異常は出ないのですが。。。) 調べたところ、JDK-10では、どうもSpring設定ファイルのThymeleafの定義で微妙な修正が必要なようです。 上の、WebContent/WEB-INF/applicationContext.xmlの66行目の、 <property name="templateMode" value="HTML5" /> の定義があると org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'templateResolver' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: というエラーが出て、ビルドが異常終了します。 上の行をコメントアウトするか、削除すればビルドエラーも出ないし、実行時も問題なく動作します。 |
4-1)web.xml 設定 ![]() |
4-2)Spring-MVC設定 |
![]() |