1. 入門ケース
1. 依存関係のインポート
<!--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>
ここで、javax.servlet-api の依存関係が提供されるかどうかを決定する必要があります。
- スコープは、Maven の jar パッケージの依存関係のスコープの説明です。
- 設定されていない場合、デフォルトはコンパイルであり、コンパイル、実行、テスト時に有効です。
- 操作が有効な場合、Tomcat の servlet-api パッケージと競合し、起動エラーが発生します。
- Provided は、パッケージがコンパイルおよびテスト中にのみ使用されることを意味します。実行時に、それが無効な場合は、競合を避けるために Tomcat で直接使用してください。
2.コントローラークラスの作成
//2.制作控制器类,等同于Servlet
//2.1必须是一个spring管理的bean
//2.2定义具体处理请求的方法
//2.3设置当前方法的访问路径
//2.4设置响应结果为json数据
@Controller
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("user save ...");
return "{'module':'springmvc'}";
//设置映射路径为/delete,即外部访问路径
@RequestMapping("/delete")
@ResponseBody
public String delete(){
System.out.println("user save ...");
return "{'info':'springmvc'}";
}
}
}
3. 構成クラスの作成
springmvc は @Controller アノテーションによって変更されたプレゼンテーション層のみをロードするため、@ComponentScan でコントローラー パッケージ内の Bean を指定するだけであることに注意してください。
//3.定义配置类加载Controller对应的bean
@Configuration
@ComponentScan("com.itheima.controller")
public class SpringMvcConfig {
}
4. Tomcat Servlet コンテナ構成の作成
//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;
}
}
要約:
- AbstractDispatcherServletInitializer クラスは、Web3.0 コンテナを迅速に初期化するために SpringMVC によって提供される抽象クラスです。
- AbstractDispatcherServletInitializer は、ユーザーが実装できる 3 つのインターフェイス メソッドを提供します
- createRootApplicationContext() メソッド。サーブレット コンテナの作成時に SpringMVC 以外の対応する Bean をロードする必要がある場合は、現在のメソッドを使用します。使用方法は createServletApplicationContext() と同じです。
- createServletApplicationContext() メソッドは、サーブレット コンテナを作成するときに、SpringMVC に対応する Bean をロードし、WebApplicationContext オブジェクトのスコープに配置します。WebApplicationContext のスコープは、ServletContext スコープ、つまり Web コンテナのスコープ全体です。 SpringMVC に対応するリクエスト マッピング パス。すべてのリクエストをインターセプトするには / に設定され、リクエストは処理のために SpringMVC に転送されます。 createServletApplicationContext は SpringMVC 環境をロードするために使用されます createRootApplicationContext は Spring 環境をロードするために使用されます
5. Tomcat環境の構成
2. 知識のポイント
3. プロセス分析
1. サーバーの初期化プロセスを開始します
2. 単一リクエストのプロセス
4.Beanローディング制御
ディレクトリ構造:
問題分析:
元のコード:
アイデア分析:
解決:
方法 1 が一般的に使用されます
方法 2 は役に立ちません。細心の注意を払う必要がある小さな詳細があります。テストするときは、SpringMvcConfig 構成クラスの @ComponentScan アノテーションをコメント アウトする必要があります。そうしないと、エラーは報告されません。つまり、分離は報告されません。成功しない。
なぜなら
Tomcat のサーブレット コンテナ構成ファイルを作成するための補足的な代替方法と簡潔な方法
public class ServletContainersInitConfig extends
AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
protected String[] getServletMappings() {
return new String[]{"/"};
}
}