Spring-MVCフレームワークの概要

Spring Web MVCフレームワークは、柔軟で疎結合のWebアプリケーションの開発に使用できるモデルビューコントローラーアーキテクチャとすぐに使用できるコンポーネントを提供します。MVCパターンにより、アプリケーションのさまざまな側面(入力ロジック、ビジネスロジック、およびUIロジック)が分離され、これらの要素間の疎結合が提供されます。

  • ザ・ Model アプリケーションデータをカプセル化し、一般的には、 POJO

  • ザ・ View モデルデータのレンダリングを担当し、一般的に、それは生成します HTML クライアントのブラウザが解釈できる出力。

  • ザ・ Controller 処理を担当します User Requests そして Building Appropriate Model そしてそれをレンダリングのためにビューに渡します。

DispatcherServlet

Spring Webモデルビューコントローラー(MVC)フレームワークは、すべてのHTTP要求と応答を処理するDispatcherServletを中心に設計されています。次の図に、Spring Web MVCDispatcherServletのリクエスト処理ワークフローを示します。

以下は、DispatcherServletへの着信HTTPリクエストに対応する一連のイベントです。

  • HTTPリクエストを受信した後、DispatcherServletは HandlerMapping 適切なコントローラーを呼び出します。

  • コントローラはリクエストを受け取り、使用されたものに基づいて適切なサービスメソッドを呼び出します GET または POST method。サービスメソッドは、定義されたビジネスロジックに基づいてモデルデータを設定し、ビュー名をDispatcherServletに返します。

  • DispatcherServletはからの助けを借ります ViewResolver リクエストに対して定義されたビューを取得します。

  • ビューが完成すると、DispatcherServletはモデルデータをビューに渡し、最終的にブラウザでレンダリングされます。

上記のすべてのコンポーネント、つまりHandlerMapping、Controller、ViewResolverはの一部です WebApplicationContext、平野の延長です ApplicationContext Webアプリケーションに必要ないくつかの追加機能を備えています。

必要な構成

DispatcherServletで処理するリクエストを、URLマッピングを使用してマッピングする必要があります。 web.xmlファイル。以下は、の宣言とマッピングを示す例です。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-INFWebアプリケーションのディレクトリ。初期化時にHelloWeb DispatcherServlet、フレームワークは、という名前のファイルからアプリケーションコンテキストを読み込もうとします [servlet-name]-servlet.xmlアプリケーションのWebContent / WEB-INFディレクトリにあります。この場合、ファイルは次のようになります。HelloWeb-servlet.xml

次に、 <servlet-mapping>タグは、どのURLがどのDispatcherServletによって処理されるかを示します。ここで、.jspで終わるすべてのHTTPリクエストは、HelloWeb DispatcherServlet。

デフォルトのファイル名を次のように使用したくない場合 [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>

それでは、必要な構成を確認しましょう。 HelloWeb-servlet.xml ファイル。WebアプリケーションのWebContent / WEB-INFディレクトリに配置されます。

<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を作成するために使用され、グローバルスコープで同じ名前で定義されたBeanの定義をオーバーライドします。

  • ザ・ <context:component-scan...> タグは、Spring MVCアノテーションスキャン機能をアクティブ化するために使用されます。これにより、次のようなアノテーションを利用できます。 @Controller そして @RequestMapping、など。

  • ザ・ InternalResourceViewResolverビュー名を解決するためのルールが定義されます。上記で定義されたルールに従って、hello にあるビュー実装に委任されます /WEB-INF/jsp/hello.jsp

ここで、実際のコンポーネント、つまりコントローラー、モデル、ビューを作成する方法を理解しましょう。

コントローラーの定義

DispatcherServletは、要求をコントローラーに委任して、それに固有の機能を実行します。ザ・@Controller注釈は、特定のクラスがコントローラーの役割を果たすことを示します。ザ・@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アノテーションは、クラスをSpringMVCコントローラーとして定義します。ここで、の最初の使用法@RequestMapping このコントローラーのすべての処理方法がに関連していることを示します /hello 道。

次の注釈 @RequestMapping (method = RequestMethod.GET) 宣言するために使用されます printHello()HTTPGET要求を処理するためのコントローラーのデフォルトのサービスメソッドとしてのメソッド。同じ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";
   }

}

ザ・ value 属性は、ハンドラーメソッドがマップされるURLと method 属性は、HTTPGET要求を処理するためのサービスメソッドを定義します。

以下は、上記で定義されたコントローラーに関して注意すべきいくつかの重要なポイントです。

  • サービスメソッド内で必要なビジネスロジックを定義します。要件に応じて、このメソッド内で別のメソッドを呼び出すことができます。

  • 定義されたビジネスロジックに基づいて、このメソッド内にモデルを作成します。さまざまなモデル属性を設定できます。これらの属性には、ビューからアクセスして結果を表示します。この例では、属性「message」を使用してモデルを作成します。

  • 定義されたサービスメソッドは、の名前を含む文字列を返すことができます viewモデルのレンダリングに使用されます。この例では、論理ビュー名として「hello」が返されます。

JSPビューの作成

Spring MVCは、さまざまなプレゼンテーションテクノロジのさまざまな種類のビューをサポートしています。これらには以下が含まれます-JSPs, HTML, PDF, Excel Worksheets, XML, Velocity Templates, 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}これは、コントローラー内で設定した属性です。ビュー内に複数の属性を表示することができます。