
Spring MVCフレームワークは、疎結合の既成コンポーネントを使用して、モデル-ビュー-コントローラーパターン(モデル-ディスプレイ(以下、ビュー)-コントローラー)のアーキテクチャを提供します。 MVCパターンは、アプリケーションの側面(入力ロジック、ビジネスロジック、およびUIロジック)を分離し、それらの間の自由な通信を保証します。
- モデルは 、アプリケーションデータをカプセル化(結合)します。一般に、POJO(「古き良きJavaオブジェクト」、またはビン)で構成されます。
- ビュー (表示、ビュー)は、モデルデータの表示を担当します-原則として、ブラウザーに表示されるHTMLを生成します。
- コントローラーはユーザーのリクエストを処理し、対応するモデルを作成し、ビューに表示するために渡します。
DispatcherServlet
Spring MVCのロジック全体は、(UIからの)すべてのHTTP要求とそれらへの応答を受信して処理するDispatcherServletを中心に構築されています。 DispatcherServletのリクエスト処理ワークフローを次の図に示します。

以下は、着信HTTP要求に対応する一連のイベントです。
- HTTPリクエストを受信した後、DispatcherServletはHandlerMappingインターフェースにアクセスし、どのコントローラーを呼び出すかを決定してから、目的のコントローラーにリクエストを送信します。
- コントローラーは要求を受け入れ、GETまたはPOSTに基づいて適切なユーティリティメソッドを呼び出します。 呼び出されたメソッドは、特定のビジネスロジックに基づいてモデルデータを決定し、ビュー名をDispatcherServletに返します。
- ViewResolverインターフェースを使用して、 DispatcherServletは受け取った名前に基づいて使用するビューを決定します。
- ビューが作成されると、DispatcherServletはモデルデータを属性としてビューに送信し、最終的にブラウザに表示されます。
上記のコンポーネント、つまりHandlerMapping 、 Controller、およびViewResolverはすべて、 WebApplicationContextの一部であり、Webアプリケーションの作成に必要な追加機能を備えたApplicationContextインターフェースを拡張します。
構成
web.xmlファイルのURLマッピングを使用して、DispatcherServletを使用して処理するリクエストをバインド(マッピング)する必要があります。 以下は、HelloWeb DispatcherServletの宣言とマッピングの例です。
<web-app id = "WebApp_ID" version = "2.4" xmlns = "http://java.sun.com/xml/ns/j2ee" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>Spring MVC Application</display-name> <servlet> <servlet-name>HelloWeb</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>HelloWeb</servlet-name> <url-pattern>*.jsp</url-pattern> </servlet-mapping> </web-app>
web.xmlファイルは、 WebContent / WEB-INFディレクトリに配置されます。 HelloWebを初期化した後、フレームワークはWebContent / WEB-INFディレクトリにある[servlet-name] -servlet.xmlという名前のファイルからアプリケーションコンテキストをロードしようとします。 この例では、 HelloWeb-servlet.xmlになります。
さらに、 <servlet-mapping>タグは、どのWebアドレスがどのDispatcherServletによって処理されるかを示します。 この場合、「。jsp」で終わるすべてのHTTP要求はHelloWebによって処理されます。
[servlet-name] -servlet.xml / WebContent / WEB-INFをデフォルトのファイルおよびディレクトリとして使用しない場合は、次のようにサーブレットリスナーContextLoaderListenerをweb.xmlに追加して、ファイル名およびディレクトリを構成できます。以下に示す:
<web-app...> <!-------- DispatcherServlet definition goes here-----> .... <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/HelloWeb-servlet.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> </web-app>
次に、WebContent / WEB-INFディレクトリにあるHelloWeb-servlet.xmlの構成を確認しましょう。
<beans xmlns = "http://www.springframework.org/schema/beans" xmlns:context = "http://www.springframework.org/schema/context" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package = "com.tutorialspoint" /> <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name = "prefix" value = "/WEB-INF/jsp/" /> <property name = "suffix" value = ".jsp" /> </bean> </beans>
HelloWeb-servlet.xmlの重要なポイントは次のとおりです。
- [servlet-name] -servlet.xmlファイルは、ラベル付きBeanを作成するために使用され、グローバルスコープで同じ名前で定義された各ビンの定義をオーバーライドします。
- <context:component-scan ...>タグを使用して、Spring MVCアノテーションスキャン機能をアクティブにします。これにより、 Controller 、@RequestMappingなどのアノテーションを使用できます。
- ビュー名は、 InternalResourceViewResolverを使用して決定されます。 上記の規則に従って、helloという名前のビューが/WEB-INF/jsp/hello.jspに実装されます
次のセクションでは、 Controller 、 Model、およびViewを作成する方法を示します 。
コントローラーの定義
DispatcherServletは、特定の機能を実行するリクエストをコントローラーに送信します。 @Controllerannotationアノテーションは、特定のクラスがコントローラーであることを示します。 @RequestMappingアノテーションは、クラス全体または特定のハンドラーメソッドのURLとのマッピング(バインド)に使用されます。
@Controller @RequestMapping("/hello") public class HelloController { @RequestMapping(method = RequestMethod.GET) public String printHello(ModelMap model) { model.addAttribute("message", "Hello Spring MVC Framework!"); return "hello"; } }
Controllerアノテーションは、クラスをSpring MVC Controllerとして定義します。 前者の場合、@ RequestMappingは、このコントローラーのすべてのメソッドがURL「/ hello」を参照することを示します。 次のアノテーション@RequestMapping(method = RequestMethod.GET)を使用して、 printHello()メソッドを(このコントローラー内の)HTTP GET要求を処理するためのデフォルトのメソッドとして宣言します。 特定のURLですべてのPOST要求のハンドラーとして他のメソッドを定義できます。
次のように@RequestMappingアノテーションに追加の属性を指定することにより、上記のコントローラーを異なる方法で作成できます。
@Controller public class HelloController { @RequestMapping(value = "/hello", method = RequestMethod.GET) public String printHello(ModelMap model) { model.addAttribute("message", "Hello Spring MVC Framework!"); return "hello"; } }
「値」属性は、このメソッドに関連付けるURL(値= "/ hello")を示し、このメソッドがGETリクエストを処理することをさらに示しています(メソッド= RequestMethod.GET)。 また、上記のコントローラーに関する注意事項:
- 接続されたユーティリティメソッド内でビジネスロジックを定義します。 それから、他のメソッドを呼び出すことができます。
- 指定されたビジネスロジックに基づいて、このメソッドのフレームワーク内で、モデルを作成します。 モデル属性を追加して、ビューに追加できます。 上記の例では、「message」属性を持つモデルを作成します。
- このユーティリティメソッドは、ビュー名を文字列として返します。 この場合、要求されたビューの名前は「hello」です。
ビューの作成(JSP)
Spring MVCは、さまざまなページ表示テクノロジーの多くのタイプのビューをサポートしています。 含む-JSP、HTML、PDF、Excel、XML、Velocityテンプレート、XSLT、JSON、AtomおよびRSSフィード、JasperReportsなど。 ただし、ほとんどの場合、JSTLを使用して記述されたJSPテンプレートが使用されます。
/WEB-INF/hello/hello.jspに単純な「hello」ビューを作成しましょう。
<html> <head> <title>Hello Spring MVC</title> </head> <body> <h2>${message}</h2> </body> </html>
この場合、変数$ {message}は、コントローラーで設定したものと同じ属性を表示します。 ビュー内では、任意の数の属性を表示できます。
Spring MVCフレームワークの例
上記の概念に基づいて、Spring Webアプリケーションの将来的な構築に役立つ重要なレッスンをいくつか行うことをお勧めします。
Spring MVC Hello Worldの例
簡単なHello Worldアプリケーションの作成方法を説明する例。
Spring MVCフォーム処理の例
この例では、HTMLフォームを使用してSpring Webアプリケーションを作成し、データをコントローラーに送信し、処理結果を表示する方法を説明します。
スプリングページリダイレクトの例
ページリダイレクト機能を使用します。
春の静的ページの例
動的ページとともに静的ページにもアクセスできます。
春の例外処理の例
例外処理。