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}これは、コントローラー内で設定した属性です。ビュー内に複数の属性を表示することができます。