サーブレットコンテナから近づくSpring MVC入門

twcritique

まずはインストール

サーブレットコンテナがまず何かしる

web.xmlとのapplicationContextの関係をしる

Springフレームワークに必要となる設定ファイルはいくつかあるが、まずは “web.xml” の設定を行う。
他の全ての設定ファイルを作る前に、このファイルを作成する。
(設定ファイルは上位→下位の順に作成していくと分かりやすい)
Tipsブログ: [Spring][web.xml][設定ファイル]Springの設定ファイル記述について

org.springframework.web.context.ContextLoaderListener

Springフレームワーク使う宣言のようなもので、こう記述するとSpringの設定ファイルとして “/WEB-INF/applicationContext.xml” を読むようになる。

Springでは、xml ファイルにオブジェクトを定義し、ApplicationContextクラスを介してオブジェクトを受け取ります。
SpringのApplicaiotnContextはDIコンテナなどと呼ばれたりもします。
2.ApplicationContext.xmlファイルの記述方法 – soracane

連載第 1 回目の記事では、web.xml ファイルを使用して、ContextLoaderListener というクラスを指す タグを構成しました。この ContextLoaderListener が Spring の IoC フレームワークをロードして Java オブジェクトを生成します。この流れは第 1 回のリスト 8 を参照すると理解することができます。図 1 はそれを図解したものです。

SpringのBeanは通常、applicationContext.xmlというファイルで定義されます。applicationContext.xmlには以下の2通りの配置方法があります。
SpringIntegration – Click Wiki

1つめは設定ファイルを/WEB-INF/applicationContext.xmlに配置し、web.xmlでSpringのContextLoaderListenerを使用して設定ファイルを読み込む方法です。
2つめは、applicationContext.xmlをクラスパス上に配置する方法です。たとえば/WEB-INF/classes/applicationContext.xmlに設定ファイルを配置したとします。

DispatcherServletの意味をしる

web.xmlにDispatcherServletの設定を記述すると、applicationContext.xmlの次に “[サーブレット名]-servlet.xml” という名前の設定ファイルをSpringが自動的に探して、設定を読み込む。

設定ファイルの読み込み順序は、次の通り。
web.xml → applicationContext.xml -> [サーブレット名]-servlet.xml
Tipsブログ: [Spring][hibernate][設定]xxx-servlet.xmlの記述(前半)

DispatcherServletが、リクエストを受け取る。
DispatcherServletは、リクエスト処理を行うControllerの選択を、HandlerMappingに委譲する。HandlerMappingは、リクエストURLにマッピングされているControllerを選定し、(Choose Handler), ControllerをDispatcherServletへ返却する。

Hello World

Spring MVCの、詳細な使い方の解説に入る前に、実際にSpring MVCに触れることで、 Spring MVCを用いたWebアプリケーションの開発に対するイメージをつかむ。
2.3. はじめてのSpring MVCアプリケーション —

2.3. はじめてのSpring MVCアプリケーション —

(4)
View名を返却する。前述「Spring MVCの設定ファイルの説明(2)」の設定により、”WEB-INF/views/home.jsp”がレンダリングされる。

準備

context:component-scanタグ

クラスのコンテナへの登録を自動的に行うための要素。
アノテーションやクラスの正規表現など、柔軟な条件を指定可能。
デフォルトでは@Component, @Repository, @Service, @Controllerアノテーションが設定されているクラスが登録される。
ApplicationContext(2) – 備忘録

主要アノテーション

要点としては大雑把に言えば2つあります。
1つ目は、「@Component」を使うことによってインターフェースに対応した実クラスをコンポーネント化します。
2つ目は、「@Autowired」を使って各クラスのメンバ変数へインジェクション(注入)すること出来ます。
テックノート – DIの基本の@Autowiredと@Componentを理解する

@Component is a generic stereotype for any Spring-managed component. @Repository, @Service, and @Controller are specializations of @Component for more specific use cases, for example, in the persistence, service, and presentation layers, respectively.

メソッドにURLをマッピングする

メソッドにURLを直接マッピングする方法は以下のように、クラスの前に @Controller アノテーションを、 メソッドの前に @RequestMapping アノテーションを記述する。
コントローラクラスおよびメソッドにURL(リクエスト)をマッピングする – spring3 – JAVA

ちなみに、上記の例において変数itemの内容をブラウザに表示する部分では、「${item}」というコードが用いられています。これはJSP 2.0より利用可能になった「EL(Expression Language)」と呼ばれる新しい文法です。このELについては、別の機会で詳しく説明したいと思います。
やり直し「JSPとTomcat」(6):JSPのアクションを理解する – @IT

からのフォーム入力欄

続いて、簡単なアプリケーションを作成する。作成するのは、次の図のようなテキストフィールドに、名前を入力すると メッセージを表示する、いわゆるエコーアプリケーションである。
2.3. はじめてのSpring MVCアプリケーション —

入力画面と、出力画面のJSPを作成する。それぞれのファイルパスは、View名に合わせて、次のようになる。

入力画面 src/main/webapp/WEB-INF/views/echo/index.jsp

つづけて入力チェック dependencyを追加

public String hello(@Valid EchoForm form, BindingResult result, Model model) { // (1)
if (result.hasErrors()) { // (2)
return “echo/index”;
}
mo
2.3. はじめてのSpring MVCアプリケーション —

コントローラー側には、Validation対象の引数に @Valid アノテーションを付加し、 BindingResult オブジェクトを引数に追加する。
Bean Validationによる入力チェックは、自動で行われる。結果は、 BindingResult オブジェクトに渡される。


5.5. 入力チェック —

入力画面には、エラーがあった場合に、エラーメッセージを表示するため、 form:errors タグを追加する。

Spring DSL

しくみや背景

Spring MVCはDIコンテナーとしてのSpringのコア機能に隠れてあまり有名でないかもしれませんが、実は、Springが開発された当時から存在するコンポーネントです。ですから歴史的には意外に古く2003年くらいから存在しているということになります。(その原型は実践J2EEシステムデザインのサンプルコードにすでに存在している。)
Spring MVCのススメ – 達人プログラマーを目指して

そういう背景からか、Rod Johnsonの「インターフェースに対するプログラミング」というオブジェクト指向の基本原則が最初から徹底された(場合によってはちょっと過剰なくらいに?)設計となっています。したがって、フレームワークの基本的な機能の大部分がインターフェースとして提供されており、必要に応じて任意の実装を与えて拡張することが容易な設計となっています。つまり、Strategyデザインパターンがいたるところで応用されているということです。実際、以下のようなStrategyインターフェースが拡張ポイントとして定義されています。

サーブレット自体の背景

はい勉強会コミュニティその他

https://matome.naver.jp/odai/2141415757276619101
2019年06月29日