SpringMVC是隶属于Spring框架的一部分,主要是用来进行Web开发,是对Servlet进行了封装。
まず 3 つの概念を紹介します。
- SpringMVCはWeb層のフレームワークであるため、フロントエンドからリクエストやデータを受け取り、処理し、処理結果をフロントエンドに応答することが主な機能です。
- REST は、開発の複雑さを軽減し、システムのスケーラビリティを向上させるソフトウェア アーキテクチャ スタイルです。
- SSM 統合は、SpringMVC+Spring+Mybatis を統合してビジネス開発を完了するものであり、これら 3 つのフレームワークを包括的に適用します。
SpringMVC:表现层框架技术,主要实现表现层的功能开发
- SpringMVC の主な機能:
- コントローラーがリクエストとデータを受信する方法
- リクエストとデータをビジネス層に転送する方法
- レスポンスデータをjsonに変換してフロントエンドに送り返す方法
- SpringMVC はサーブレットに代わる Web フレームワークです。最初にサーブレットの開発プロセスを確認しましょう。
1. Web プロジェクトの作成 (Maven 構造)
2. Tomcat サーバーのセットアップ、Web プロジェクトのロード (Tomcat プラグイン)
3. 座標のインポート (Servlet)
4. リクエストを処理するための機能クラスの定義 (UserServlet)
5. リクエスト マッピングの設定 (構成)マッピング関係)
SpringMVCの操作手順
- SpringMVCの作成プロセスは上記プロセスとほぼ同様で、操作手順は以下の通り
1. Web プロジェクトの作成 (Maven 構造)
2. Tomcat サーバーの設定、Web プロジェクトの読み込み (Tomcat プラグイン)
3. 座標のインポート (SpringMVC+サーブレット)<!--1. 导入SpringMVC与servlet的坐标--> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.10.RELEASE</version> </dependency> </dependencies>
4. リクエストを処理する機能クラスを定義します (ユーザーコントローラー)
5.リクエストマッピング(設定マッピング関係)の設定//springmvc配置类,本质上还是一个spring配置类 @Configuration @ComponentScan("com.taro.controller") public class SpringMvcConfig { }
//定义表现层控制器bean @Controller public class UserController { //设置映射路径为/save,即外部访问路径 @RequestMapping("/save") //设置当前操作返回结果为指定json数据(本质上是一个字符串信息) @ResponseBody public String save(){ System.out.println("user save ..."); return "{'info':'springmvc'}"; } //设置映射路径为/delete,即外部访问路径 @RequestMapping("/delete") @ResponseBody public String delete(){ System.out.println("user save ..."); return "{'info':'springmvc'}"; } }
6.SpringMVC 設定を Tomcat コンテナにロードする
//web容器配置类 public class ServletContainersInitConfig extends > > >AbstractDispatcherServletInitializer { //加载springmvc配置类,产生springmvc容器(本质还是spring容器) protected WebApplicationContext createServletApplicationContext() { //初始化WebApplicationContext对象 AnnotationConfigWebApplicationContext ctx = new >AnnotationConfigWebApplicationContext(); //加载指定配置类 ctx.register(SpringMvcConfig.class); return ctx; } //设置由springmvc控制器处理的请求映射路径 protected String[] getServletMappings() { return new String[]{ "/"}; } //加载spring配置类 protected WebApplicationContext createRootApplicationContext() { return null; } }
Spring Web 開発は、Web である限り、Spring MVC でなくても、このパッケージをインポートする必要があります。
予防
spring-webmvc
SpringMVC は Spring をベースにしていますが、pom.xml に jar パッケージのみインポートするのは、Spring 関連の座標に自動的に依存するためです。- AbstractDispatcherServletInitializer クラスは、Web3.0 コンテナを迅速に初期化するために SpringMVC によって提供される抽象クラスです。
- AbstractDispatcherServletInitializer は、ユーザーが実装できる 3 つのインターフェイス メソッドを提供します
- createServletApplicationContext メソッドは、Servlet コンテナの作成時に SpringMVC に対応する Bean をロードして WebApplicationContext オブジェクトのスコープに配置します。WebApplicationContext のスコープは ServletContext のスコープ、つまり Web コンテナ全体のスコープになります。
- getServletMappings メソッドは、SpringMVC に対応するリクエスト マッピング パス、つまりどのリクエストが SpringMVC によってインターセプトされるかを設定します。
- createRootApplicationContext メソッドで、Servlet コンテナの作成時に SpringMVC 以外の対応する Bean をロードする必要がある場合は、現在のメソッドを使用し、createServletApplicationContext と同じメソッドを使用します。
- createServletApplicationContext は SpringMVC 環境をロードするために使用されます
- createRootApplicationContext は Spring 環境をロードするために使用されます
//web容器配置类
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
//加载springmvc配置类,产生springmvc容器(本质还是spring容器)
protected WebApplicationContext createServletApplicationContext() {
//初始化WebApplicationContext对象
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
//加载指定配置类
ctx.register(SpringMvcConfig.class);
return ctx;
}
//设置由springmvc控制器处理的请求映射路径
protected String[] getServletMappings() {
return new String[]{
"/"};
}
//加载spring配置类
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
注釈
注釈 1: @Controller
名前 | @コントローラ |
---|---|
タイプ | クラスアノテーション |
位置 | SpringMVC コントローラー クラス定義の上 |
効果 | SpringMVCのコアコントローラBeanを設定する |
注釈 2: @RequestMapping
名前 | @RequestMapping |
---|---|
タイプ | クラスアノテーションまたはメソッドアノテーション |
位置 | SpringMVC コントローラー クラスまたはメソッド定義の上 |
効果 | 現在のコントローラーメソッドリクエストのアクセスパスを設定します |
関連する属性 | 値 (デフォルト)、リクエストのアクセス パス |
注釈 3: @ResponseBody
名前 | @ResponseBody |
---|---|
タイプ | クラスアノテーションまたはメソッドアノテーション |
位置 | SpringMVC コントローラー クラスまたはメソッド定義の上 |
効果 | 現在のコントローラー メソッドの応答内容を解析せずに現在の戻り値として設定します |
SpringMVCエントリープログラム開発概要(1+N)
- 一回限りの仕事
- プロジェクトの作成、サーバーのセットアップ、プロジェクトのロード
- 座標をインポートする
- Webコンテナ起動クラスを作成し、SpringMVC設定をロードし、SpringMVCリクエストインターセプトパスを設定します。
- SpringMVC コア構成クラス (構成クラスの設定、コントローラー パッケージのスキャン、コントローラー コントローラー Bean のロード)
- 何度も働く
- リクエストを処理するコントローラー クラスを定義する
- リクエストを処理するためのコントローラー メソッドを定義し、マッピング パス (@RequestMapping) を構成して、JSON データ (@ResponseBody) を返します。
Spring MVC ワークフロー
サーバーの初期化を開始します
- サーバーが起動し、ServletContainersInitConfig クラスを実行し、前の web.xml と同様の Web コンテナ関数を初期化します。
- createServletApplicationContextメソッドを実行してWebApplicationContextオブジェクトを作成します。
- このメソッドは、SpringMVC 構成クラス SpringMvcConfig をロードして、SpringMVC コンテナーを初期化します。
- SpringMvcConfig 構成クラスをロードする
- @ComponentScan を実行して、対応する Bean をロードします
- 指定されたパッケージとそのサブパッケージの下にあるすべてのクラスのアノテーション (コントローラー クラスの @Controller アノテーションなど) をスキャンします。
- UserController をロードします。各 @RequestMapping 名は特定のメソッドに対応します
/save
この時点でsaveメソッドとの対応関係が確立されます。
- getServletMappings メソッドを実行して SpringMVC インターセプトリクエストのパスルールを設定します
/
インターセプトされたリクエストのパスルールを表します。これは、インターセプト後にリクエストを処理するために SpringMVC にのみ渡されます。
単一リクエストプロセス
- リクエストを送信する
http://localhost/save
- Web コンテナは、リクエストが SpringMVC インターセプト ルールを満たしていることを検出し、処理のためにリクエストを SpringMVC に渡します。
- リクエストパスの解析 /save
- 対応するメソッド save() は、/save マッチングによって実行されます。
- 上記の 5 番目のステップにより、リクエスト パスとメソッドの間の対応関係が確立され、対応する保存メソッドは /save を通じて見つけることができます。
- save()を実行する
- @ResponseBodyがsave()メソッドの戻り値をそのままレスポンスボディとしてリクエスタに返していることが検出されます。