Springmvc の基礎#
- 【アプリケーション】SpringMVC の入門例を独立して完了できる
- 【アプリケーション】SpringMVC の実行フローを説明できる
- 【アプリケーション】SpringMVC の一般的なコンポーネントに慣れている
1、SpringMVC の概要#
1.1 SpringMVC の概要#
SpringMVC は、Java に基づいた MVC デザインモデルのリクエスト駆動型の軽量 Web フレームワークで、SpringFramework の後続製品にあたります。Spring Web Flow に統合されています。
SpringMVC は現在最も主流な MVC フレームワークの一つとなっており、Spring3.0 のリリースに伴い、Struts2 を全面的に超え、最も優れた MVC フレームワークとなりました。注釈を使用することで、単純な Java クラスをリクエスト処理のコントローラーにすることができ、インターフェースを実装する必要はありません。また、RESTful プログラミングスタイルのリクエストもサポートしています。
1.2 SpringMVC の処理フロー#
1.3 SpringMVC のクイックスタート#
要件:クライアントがリクエストを発起し、サーバーがリクエストを受信し、ロジックを実行してビューに遷移する。
開発手順
①SpringMVC 関連の依存関係をインポート
②SpringMVC のコアコントローラー DispatcherServlet を設定
③Controller クラスとビューページを作成
④注釈を使用して Controller クラス内のビジネスメソッドのマッピングアドレスを設定
⑤SpringMVC のコアファイル spring-mvc.xml を設定
⑥クライアントがリクエストテストを発起
コード実装
①Spring と SpringMVC の依存関係、Servlet と Jsp の依存関係をインポート
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐context</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐test</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐jdbc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐tx</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!‐‐SpringMVC関連‐‐>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐web</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!‐‐データソース関連‐‐>
<!‐‐ Druid接続プール ‐‐>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!‐‐ mysqlドライバ ‐‐>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql‐connector‐java</artifactId>
<version>5.1.39</version>
</dependency>
<!‐‐Servlet関連‐‐>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet‐api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp‐api</artifactId>
<version>2.2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
②web.xml で SpringMVC のコアコントローラーを設定
<!‐‐SpringMVCフロントコントローラーの設定 ‐‐>
<servlet>
<servlet‐name>springmvc</servlet‐name>
<servlet‐class>org.springframework.web.servlet.DispatcherServlet</servlet‐class>
<!‐‐SpringMVC設定ファイルの読み込み‐‐>
<init‐param>
<param‐name>contextConfigLocation</param‐name>
<param‐value>classpath:spring‐mvc.xml</param‐value>
</init‐param>
<load‐on‐startup>1</load‐on‐startup>
</servlet>
<servlet‐mapping>
<servlet‐name>springmvc</servlet‐name>
<!‐‐
*.actionは、.actionで終わるリクエストのみを処理します
/*は、すべてのリクエストjspなどのすべての静的資料をインターセプトします
/は、jsp以外のリクエストをすべてインターセプトします。/を設定することをお勧めします
‐‐>
<url‐pattern>/</url‐pattern>
</servlet‐mapping>
③Controller とビジネスメソッドを作成
@Controller
public class UserController {
@RequestMapping("/quick")
public String list(){
System.out.println("私は実行しました");
return "success.jsp";
}
}
③ビューページ success.jsp を作成
<%@ page contentType="text/html;charset=UTF‐8" language="java" %>
<html>
<head>
<title>タイトル</title>
</head>
<body>
<h1>こんにちは、springmvc!!</h1>
</body>
</html>
④注釈を設定
@Controller
public class UserController {
@RequestMapping("/quick")
public String list(){
System.out.println("私は実行しました");
return "success.jsp";
}
}
⑤spring-mvc.xml を作成
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring‐mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring‐context.xsd">
<!‐‐注釈スキャンの設定‐‐>
<context:component‐scan base‐package="com.bailiban.controller/>
</beans>
⑥アクセステストアドレス
http://localhost:8080/quick
コンソール出力
ページ表示
1.4 知識の要点#
SpringMVC の開発手順
①SpringMVC 関連の依存関係をインポート
②SpringMVC のコアコントローラー DispatcherServlet を設定
③Controller クラスとビューページを作成
④注釈を使用して Controller クラス内のビジネスメソッドのマッピングアドレスを設定
⑤SpringMVC のコアファイル spring-mvc.xml を設定
⑥クライアントがリクエストテストを発起
2、SpringMVC のコンポーネント解析#
2.1 SpringMVC の実行フロー#
①ユーザーがリクエストをフロントコントローラー DispatcherServlet に送信します。
②DispatcherServlet はリクエストを受け取り、HandlerMapping ハンドラーマッピングを呼び出します。
③ハンドラーマッピングは具体的なハンドラー(xml 設定や注釈によって検索)を見つけ、ハンドラーオブジェクトとハンドラーインターセプター(あれば)を生成し、DispatcherServlet に返します。
④DispatcherServlet は HandlerAdapter ハンドラーアダプターを呼び出します。
⑤HandlerAdapter は適応を経て具体的なハンドラー(Controller、バックエンドコントローラーとも呼ばれる)を呼び出します。
⑥Controller は実行を完了し、ModelAndView を返します。
⑦HandlerAdapter は controller の実行結果 ModelAndView を DispatcherServlet に返します。
⑧DispatcherServlet は ModelAndView を ViewResolver ビューリゾルバーに渡します。
⑨ViewResolver は解析後、具体的な View を返します。
⑩DispatcherServlet は View に基づいてビューをレンダリングします(モデルデータをビューに埋め込む)。DispatcherServlet はユーザーに応答します。
2.2 SpringMVC コンポーネント解析#
-
フロントコントローラー:DispatcherServlet
ユーザーのリクエストがフロントコントローラーに到達します。これは MVC モデルの C に相当し、DispatcherServlet は全体のプロセス制御の中心です。これにより、他のコンポーネントがユーザーのリクエストを処理します。DispatcherServlet の存在はコンポーネント間の結合度を低下させます。
-
ハンドラーマッピング:HandlerMapping
HandlerMapping は、ユーザーのリクエストに基づいて Handler(ハンドラー)を見つける役割を担います。SpringMVC は異なるマッピング方式を実現するために異なるマッピング実装を提供します。例えば、設定ファイル方式、インターフェース実装方式、注釈方式などです。
-
ハンドラーアダプター:HandlerAdapter
HandlerAdapter を通じてハンドラーを実行します。これはアダプターパターンの応用であり、アダプターを拡張することで、より多くのタイプのハンドラーを実行できます。
-
ハンドラー:Handler
これは私たちが開発中に記述する具体的なビジネスコントローラーです。DispatcherServlet はユーザーのリクエストを Handler に転送します。Handler は具体的なユーザーリクエストを処理します。
-
ビューリゾルバー:View Resolver
View Resolver は処理結果を View に変換します。View Resolver はまず論理ビュー名を物理ビュー名(具体的なページアドレス)に解析し、次に View オブジェクトを生成し、最後に View をレンダリングして処理結果をページに表示します。
-
ビュー:View
SpringMVC フレームワークは、jstlView、freemarkerView、pdfView など、多くのビュータイプをサポートしています。最も一般的なビューは jsp です。一般的には、ページタグやページテンプレート技術を使用してモデルデータをページに表示し、プログラマーがビジネスニーズに基づいて具体的なページを開発する必要があります。
説明:SpringMVCの各コンポーネントの中で、ハンドラーマッピング、ハンドラーアダプター、ビューリゾルバーはSpringMVCの三大コンポーネントと呼ばれます。ユーザーが開発する必要があるコンポーネントはハンドラーとビューです。
2.3 デフォルトで読み込まれるコンポーネント#
何の設定もせずにこれらのコンポーネントを使用できます。
フレームワークがこれらのコンポーネントをデフォルトで読み込んでいるため、設定ファイルの位置は以下の図の通りです:
2.4 注釈駆動#
直接ハンドラーマッピングとハンドラーアダプターを設定するのは面倒なので、注釈駆動を使用して読み込むことができます。
SpringMVC は
<!‐‐ 注釈駆動 ‐‐>
<mvc:annotation‐driven />
自動的にRequestMappingHandlerMapping
とRequestMappingHandlerAdapter
を読み込み、springmvc.xml
設定ファイルで<mvc:annotation-driven />
を使用してデフォルトの注釈ハンドラーとアダプターの設定を置き換えることができます。
2.5 SpringMVC のビューリゾルバー設定#
SpringMVC にはデフォルトのコンポーネント設定があり、デフォルトのコンポーネントは DispatcherServlet.properties 設定ファイルに設定されています。このファイルにはデフォルトのビューリゾルバーが設定されています。
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
このリゾルバーのソースコードを確認すると、デフォルト設定が以下のように見つかります:
REDIRECT_URL_PREFIX = "redirect:" ‐‐リダイレクトプレフィックス
FORWARD_URL_PREFIX = "forward:" ‐‐フォワードプレフィックス(デフォルト値)
prefix = ""; ‐‐ビュー名プレフィックス
suffix = ""; ‐‐ビュー名サフィックス
開発中は一般的にビューを WEB-INF ディレクトリに置き、プロパティ注入の方法でビューの前後のサフィックスを変更して、開発を便利にします。
<!‐‐ビューリゾルバーの設定‐‐>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/WEB‐INF/jsp/" ></property>
<property name="suffix" value=".jsp"></property>
</bean>
2.6 SpringMVC の注釈解析#
@RequestMapping
作用:リクエスト URL とリクエスト処理メソッドの間の対応関係を確立するために使用されます。
位置:
クラス上、リクエスト URL の第 1 レベルのアクセスディレクトリ。ここに書かない場合、アプリケーションのルートディレクトリに相当します。
メソッド上、リクエスト URL の第 2 レベルのアクセスディレクトリで、クラス上の @ReqquestMapping でマークされた第 1 レベルディレクトリと一緒に仮想パスを構成します。
属性:
value:リクエストの URL を指定するために使用されます。これは path 属性と同じ役割を果たします。
method:リクエストの方法を指定するために使用されます。
params:リクエストパラメータの条件を制限するために使用されます。これは簡単な式をサポートします。リクエストパラメータの key と value は設定とまったく同じでなければなりません。
例えば:
params = {"accountName"} は、リクエストパラメータに accountName が必要であることを示します。
params = {"moeny!100"} は、リクエストパラメータの中で money が 100 であってはならないことを示します。
2.7 知識の要点#
SpringMVC の関連コンポーネント
フロントコントローラー:DispatcherServlet
ハンドラーマッピング:HandlerMapping
ハンドラーアダプター:HandlerAdapter
ハンドラー:Handler
ビューリゾルバー:ViewResolver
ビュー:View