SpringMVCを理解する
従来のMVCは、モデルモデル/ビュービュー/コントローラーコントローラーであり、それぞれJavaBean / JSP /サーブレットに対応します。(MVCの知識とイラストの詳細については、ここをクリックしてください)
従来のMVC開発モデルでは、重要なのはコントローラーの準備、つまりサーブレットを1つずつ準備することです。これらのサーブレットは、サーブレットインターフェイスを直接または間接的に実装し、doGet / doPostメソッドを書き直す必要があります...ビジネスロジックがより複雑になると、サーブレットがますます増え、作成と保守が面倒になることを想像してみてください。
SpringMVCフレームワークでは、設計者は多くのサーブレットの公開動作をパッケージ化されたDispatcherServletに巧みに抽出しました。各サーブレットの固有の動作は、インターフェイスを実装する必要のないクラスで記述できます。
次の図は、理解に役立つ場合があります。
SpringMVCの開発手順とコードの実装
まず第一に、SpringMVCによって実装される要件は、クライアント要求の受信、ビジネスロジックの処理、およびページビューへのジャンプであることは明らかです。
長い話を短くします:
①SpringMVC関連の座標をインポートする
②SpringMVCコアコントローラーDispathcerServletを構成します(web.xml内)
③コントローラークラスとJSPビューページを作成し、アノテーションを使用してアドレスマッピングを構成します
④SpringMVCコア構成ファイルspring-mvc.xmlを構成します(コンポーネントスキャン専用)
⑤クライアントがリクエストを開始します(テスト)
コード:
①SpringMVC関連の座標をインポートする
<!-- 仅供参考 -->
<!-- 关键是spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.2.1</version>
</dependency>
②SpringMVCコアコントローラーDispathcerServletを構成します(web.xml内)
<!-- 配置SpringMVC前端控制器 -->
<servlet>
<servlet-name>DispatcherServlet</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>
<!-- web项目启动时加载一次 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
③コントローラークラスとJSPビューページを作成し、アノテーションを使用してアドレスマッピングを構成します
@Controller
public class UserController {
@RequestMapping("/hello")
public String sayHi() {
System.out.println("Hello >_<");
return "index.jsp";
}
}
④SpringMVCコア構成ファイルspring-mvc.xmlを構成します(現在はコンポーネントスキャンのみ)
<!-- 组件扫描(只扫描controller包即可) -->
<context:component-scan base-package="com.samarua.controller" />
⑤クライアントがリクエストを開始します(テスト)
>>> 浏览器URL输入:http://localhost:8080/hello
@RequestMappingアノテーションについて
作用:
建立资源路径到某个类的某个方法的映射(代替了之前学的每个Servlet上的url注解)
位置:
- 类上。
- 方法上。
- 即"多级目录"的思想,类上的一级目录与方法上的二级目录进行"拼接",组成完整的资源路径
参数:
- value: 资源路径,这是一个字符串
- method: 请求的方式,常见的有RequestMethod.GET/POST/PUT/DELETE
- param: 用于指定参数需要满足的条件,这是一个表达式数组
举例:
@RequestMapping(value = "/hello", method = RequestMethod.GET, params = {
"username", "!sex", "isLoli=true", "age!=12"})
spring-mvc.xmlのビューパーサーのサフィックスとサフィックスの構成について
<!-- 配置视图解析器前后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 默认前缀为"redirect:" -->
SpringMVCコードフロー図
サーバー側エンジンの主な機能は、要求リソースパスを解析すること、つまりHttpプロトコルと要求/応答オブジェクトの要求/応答情報を変換することです。
SpringMVCのコンポーネントとプロセス
▶イラスト
▶プロセス
①ユーザーがフロントコントローラーDispatcherServlet(ディスパッチコア)にリクエストを送信します
②DispatcherServletは、HandlerMappingプロセッサマッパーを呼び出す要求を受け取ります
③プロセッサマッパーは特定のプロセッサを見つけ、プロセッサに到達する実行チェーンを生成し、それをDispatcherServletに返します。
④DispatcherServletはHandlerAdapterプロセッサアダプタを呼び出します
⑤HandlerAdapterは、実行チェーンに従って特定のプロセッサを検索します
⑥プロセッサが実行されると、ModelAndView(モデルとビュー)に戻ります。
∥HandlerAdapterはプロセッサの実行結果ModelAndViewをDispatcherServletに返します
⑧DispatcherServletはModelAndViewをViewResloverビューパーサーに渡します
⑨ViewResloverは、解析後に特定のビューに戻ります
⑩DispatcherServletは、ビューに従ってビューをレンダリングします(つまり、モデルデータをビューに入力します)
⑪最終応答
▶コンポーネント
フロントコントローラー:DispatcherServlet
ユーザーリクエストがフロントコントローラーに到達すると、MVCパターンでCに到達するのと同じです。DispatcherServletは、プロセス制御全体の中心であり、他のコンポーネントを呼び出してユーザー要求を処理します。DispatcherServletの存在により、コンポーネント間の結合が減少します。
プロセッサマッパー:HandlerMapping
HandlerMappingは、ユーザーリクエストによって提供されたリソースパスに従って実際のプロセッサにマッピングし、この実行チェーンを返すことができます
プロセッサーアダプター:HandlerAdapter
HandlerAdapterを介したプロセッサの実際の実行
プロセッサー:ハンドラー
つまり、コントローラー、つまりコントローラー、つまり特定の処理ロジックです。
ビューリゾルバー:ビューリゾルバー
View Resolverは、最初に論理ビュー名を物理ビュー名、つまり特定のページアドレスに解析し、次にビュービューオブジェクトを生成し、最後にビューをレンダリングして、ページを通じてユーザーに結果を表示します。
表示:表示
jstlView、freemarkerView、pdfViewなどを含め、最も一般的に使用されるビューはjspです。