springMVC 対面

1.MVCとは何ですか?

ここに画像の説明を挿入

ユーザーのリクエストがサーブレットに到達し、リクエストに応じて対応するJava Beanを呼び出し、表示結果をすべてJSPに引き渡して完了するモードをMVCモードと呼びます。

MVCとは、ソフトウェアをModel(モデル)、View(ビュー)、Controller(コントローラー)の3つの層に分けて構成する設計パターンです。モデルはデータを表し、ビューはユーザー インターフェイスを表し、コントローラーはモデルとビューの間のブリッジであるデータ処理ロジックを表します。ソフトウェアを階層化する利点は、オブジェクト間の結合を減らし、コードのメンテナンスを容易にできることです。
MVC は、ソフトウェアをモデル、ビュー、コントローラーに分割するソフトウェア アーキテクチャの考え方です。

M: モデル、モデル層、プロジェクト内の JavaBean を指し、役割はデータを処理することです Dao、Bean

JavaBean は次の 2 つのカテゴリに分類されます。

1 つのクラスはエンティティ クラス Bean と呼ばれ、学生、ユーザーなどのビジネス データを特別に保存します。
もう 1 つのクラスはビジネス処理 Bean と呼ばれ、ビジネス ロジックとデータ アクセスの処理に特別に使用されるサービスまたは Dao オブジェクトを参照します。

V: ビュー、ビューレイヤー。プロジェクト内の html や jsp などのページを指し、ユーザーと対話したりデータを表示したりするために使用されます。

C: コントローラー、制御層。プロジェクト内のサーブレットを指し、その役割はリクエストを受信して​​ブラウザーに応答することです。

MVC のワークフロー:

ユーザーはビュー層を通じてサーバーにリクエストを送信し、そのリクエストはサーバーのコントローラーによって受信され、コントローラーは対応するモデル層を呼び出してリクエストを処理し、処理後に結果をコントローラーに返します。コントローラーは次のことを見つけます。リクエスト処理の結果に従って対応するビューを作成し、データをレンダリングします ブラウザへの最終応答

1.1 Spring MVCとは

Spring MVC は、リクエスト駆動型の MVC デザイン パターンを実装する Java ベースの軽量 Web フレームワークです。モデル、ビュー、コントローラーを分離することで、Web 層の責任を切り離し、複雑な Web アプリケーションを論理的に明確なセクションに分割します。 . パートでは、開発を簡素化し、エラーを減らし、グループ内の開発者間の協力を促進します。

SpringMVC は Spring のフォローアップ製品であり、Spring のサブプロジェクトです。

SpringMVC は、プレゼンテーション層の開発のために Spring によって提供されるソリューションの完全なセットです。Strut、WebWork、Strut2 などの多くの製品でプレゼンテーション層フレームワークが継続的に変更された後、業界では一般に、Java EE プロジェクトのプレゼンテーション層の開発に優先されるソリューションとして SpringMVC が選択されます。

注: 3 層アーキテクチャは、プレゼンテーション層 (またはプレゼンテーション層)、ビジネス ロジック層、データ アクセス層に分かれており、プレゼンテーション層はフォアグラウンド ページとバックグラウンド サーブレットを表します。

1.2 Spring MVCの特徴

  • Spring ファミリのネイティブ製品は、IOC コンテナなどのインフラストラクチャとシームレスにインターフェイスします
  • ネイティブ Servlet に基づいて、強力なフロント コントローラー DispatcherServletを通じて、リクエストとレスポンスが均一に処理されます。
  • プレゼンテーション層の各セグメントで解決すべき課題を全方位的にカバーし包括的なソリューションを提供します
  • コードは新鮮かつ簡潔で、開発効率が大幅に向上します。
  • 内部コンポーネント化の度合いが高く、プラグイン可能なコンポーネントはプラグアンドプレイが可能で、必要な機能に対応するコンポーネントを構成できます。
  • 優れたパフォーマンス、特に現代の大規模および超大規模インターネット プロジェクトの要件に適しています

2. DAO レイヤーは何をしますか?

DAOとはData Access Object、つまりデータアクセスオブジェクトの略で、プロジェクト内では通常、データベースへのアクセス専用の独立したレイヤーとして使用されます。Spring JDBC、Hibernate、JPA、MyBatis など、この層の具体的な実装技術は数多くありますが、Spring フレームワークではどの技術を使用してデータベースにアクセスしても、そのプログラミング モードは統一されています。

3. Spring MVCの実行処理を紹介する

  • プロセス全体は、クライアントからの HTTP リクエストを Web アプリケーション サーバーが受信することで始まります。DispatcherServlet のリクエスト マッピング パスが一致する場合、Web コンテナはリクエストを DispatcherServlet に転送して処理します。

  • DispatcherServlet がこのリクエストを受信すると、リクエストされた情報 (URL、HTTP メソッド、リクエスト ヘッダー、リクエスト パラメータ、Cookie など) と HandlerMapping の設定に従ってリクエストを処理するプロセッサ (Handler) を見つけます。HandlerMapping はルーティング コントローラー、Handler はターゲット ホストとみなすことができます。Spring MVC では Handler インターフェイスが定義されていないことに注意してください。実際、あらゆるオブジェクトがリクエスト ハンドラーになる可能性があります。

  • DispatcherServlet は、HandlerMapping に従って現在のリクエストに対応する Handler を取得すると、HandlerAdapter を通じて Handler をカプセル化し、統一されたアダプター インターフェイスで Handler を呼び出します。HandlerAdapter は Spring MVC フレームワーク レベルのインターフェイスであり、その名前が示すように、統一されたインターフェイスを使用してさまざまな Handler メソッドを呼び出すアダプターです。

  • プロセッサがビジネス ロジックの処理を完了すると、ビューの論理名とモデル データ情報が含まれる ModelAndView が DispatcherServlet に返されます。

  • ModelAndView に含まれるものは、実際のビュー オブジェクトではなく「論理ビュー名」です。DispatcherServlet は ViewResolver を使用して、論理ビュー名から実際のビュー オブジェクトまでの解析作業を完了します。

  • 実際のビュー オブジェクト View を取得した後、DispatcherServlet はこの View オブジェクトを使用して ModelAndView でモデル データをレンダリングします。

  • クライアントが取得する最終応答メッセージは、通常の HTML ページ、XML または JSON 文字列、さらには画像や PDF ドキュメント、その他のさまざまなメディア形式である場合もあります。

4. あなたが知っている Spring MVC アノテーションについて話す

  • @RequestMapping:

    機能: このアノテーションの機能は、リクエスト アドレス マッピングを処理すること、つまり、プロセッサ メソッドを URL パスにマッピングすることです。

    属性:

    メソッド: 一般的に使用される get や post などのリクエストのメソッド タイプを指定できます。

    value: リクエストの実際のアドレスを指します。複数のアドレスがある場合は、{} を使用して指定します。

    生成: 返されるコンテンツ タイプを指定します。これは、リクエスト ヘッダーの Accept タイプに指定されたタイプが含まれている場合にのみ返されます。

    Consumers: リクエストを処理するために送信されるコンテンツ タイプ (一部のタイプの JSON、HTML、テキストなど) を指定します。

    headers: ヘッダー値をリクエストに含める必要があると指定すると、このメソッドを使用してリクエストが処理されます。

    params: リクエストに含める必要があるパラメータ値を指定すると、このメソッドを使用してリクエストを処理します。

  • @RequestParam:

    機能: リクエストパラメータをコントローラのメソッドパラメータにバインドするもので、Spring MVCで通常のパラメータを受け取るためのアノテーションです。

    属性:

    value はリクエストパラメータ内の名前です。

    required は、リクエスト パラメータがパラメータを提供する必要があるかどうかで、デフォルトは true、つまりパラメータを提供する必要があることを意味します。

  • @リクエストボディ:

    機能: メソッドに作用する場合、メソッドの戻り結果が Http レスポンスボディ (一般的にデータを非同期で取得するときに使用されるアノテーション) に直接書き込まれることを意味します。

    属性: 必須、リクエスト本文が必要かどうか。デフォルト値は true です。このアノテーションを使用する場合、true の場合、get リクエスト メソッドはエラーを報告することに注意してください。値を false に設定すると、get リクエストは null になります。

  • @パス変数:

    機能: このアノテーションは URL 内のプレースホルダーをバインドするために使用されますが、spring3.0 以降、URL はプレースホルダーをサポートし始めたことに注意してください。プレースホルダーは、Spring MVC でサポートされる REST スタイル URL の重要なシンボルです。

5. Spring MVCのインターセプターの導入

インターセプタはプロセッサをインターセプトするため、インターセプタを介してプロセッサの機能を拡張することができる。Spring MVC では、すべてのインターセプターは HandlerInterceptor インターフェイスを実装する必要があります。このインターフェイスには、preHandle()、postHandle()、および afterCompletion() の 3 つのメソッドが含まれています。

これらのメソッドの実行フローは次のとおりです。
ここに画像の説明を挿入

  • 上の図からわかるように、Spring MVC インターセプターの実行フローは次のとおりです。

    preHandle メソッドを実行すると、ブール値が返されます。false の場合はすべてのプロセスを終了し、true の場合は次のステップを実行します。

    コントローラーの機能を含むプロセッサ ロジックを実行します。

    postHandleメソッドを実行します。

    ビューの解像度とビューのレンダリングを実行します。

    afterCompletion メソッドを実行します。

  • Spring MVC インターセプターの開発手順は次のとおりです。

    インターセプターを開発します。

      实现handlerInterceptor接口,从三个方法中选择合适的方法,实现拦截时要执行的具体业务逻辑。
    

    インターセプターを登録します:

      定义配置类,并让它实现WebMvcConfigurer接口,在接口的addInterceptors方法中,
      注册拦截器,并定义该拦截器匹配哪些请求路径。
    

6. リクエストのインターセプトを行うにはどうすればよいですか?

参考回答

コントローラーのメモリをインターセプトする場合は、Spring MVC インターセプターを使用できます。

すべてのリクエスト (静的リソースへのアクセスリクエストなど) をインターセプトする場合は、フィルターを使用できます。

コントローラー以外の Bean からのリクエストをインターセプトする場合は、Spring AOP を使用できます。

補充する

1. 転送とリダイレクトの違い

転送とリダイレクトの違いとその使い方 (全文)

SpringMVC のビューは View インターフェイスであり、ビューの機能はデータをレンダリングし、モデル内のデータをユーザーに表示することです。

SpringMVC ビューには多くの種類があり、デフォルトで転送ビューリダイレクト ビューがあります。

  • 転送はリクエストです。最初はブラウザーによって送信されます (2 回目はサーバー内で行われます)。これはブラウザーによって送信されたリクエストについて話しています。(2 回目はサーバー内で発生したため、転送されたアドレス バーは最初のリクエストのアドレス バーのままです)

  • リダイレクトは 2 つのリクエストで、1 つ目はサーブレットへのアクセス、2 つ目はリダイレクトされたアドレスへのアクセスです。(最終的なアドレスバーのアドレスはリダイレクトされたアドレスです)

  • 転送はリクエスト ドメイン内のデータを取得できますが、リダイレクトはリクエストではありません。これは、転送がリクエストであり、使用されるリクエストが同じであるためです。
    ブラウザをリダイレクトして 2 つのリクエストを送信します。2 つのリクエストは 2 つのリクエスト オブジェクトです。

  • 転送では web-inf 内のオブジェクトにアクセスできますが、リダイレクトではアクセスできません。これは、web-inf にはセキュリティがあり、ブラウザではなくサーバー経由でのみアクセスできるためです。

  • 転送はドメインを越えることはできませんが、リダイレクトは可能です。クロスドメインとは、転送がサーバー内で行われ、サーバー内のリソースのみにアクセスできることを意味します。リダイレクトにより、Baidu へのリダイレクトなどの外部リソースにアクセスできる

1.1、Thymeleafビュー

コントローラーのメソッドに設定したビュー名にプレフィックスが無い場合、この時のビュー名はSpringMVC設定ファイルに設定されたビューリゾルバーによって解析され、ビュー名とビューのプレフィックスとを結合した最終的なパスが取得されます。ビューサフィックスは通過します 転送メソッドはジャンプを実現します

1.2. 前方ビュー (めったに使用されません) -- 接頭辞「forward:」

SpringMVC のデフォルトの転送ビューは InternalResourceView です。

SpringMVCでフォワーディングビューを作成する様子:

コントローラーメソッドに"forward:"設定、InternalResourceViewビューが作成されますが、この際、SpringMVC設定ファイルに設定されているビューリゾルバではビュー名は解析されず、接頭辞「forward:」が削除されます。残りの部分は、転送によるジャンプを実現するための最終パスとして使用されます。

例: 「forward:/」、「forward:/employee」

<a th:href="@{/testForward}">测试InternalResourceView</a><br>
@RequestMapping("/testForward")
    public String testForward(){
    
    
        return "forward:/testThymeleafView";
    }

1.3. リダイレクトビュー (よく使用されます) -- プレフィックス「redirect:」

SpringMVC のデフォルトのリダイレクト ビューは RedirectView です。

コントローラーのメソッドに"redirect:"設定 RedirectViewビューを作成しますが、この際、SpringMVC設定ファイルに設定したビューリゾルバではビュー名は解析されず、接頭辞「redirect:」が削除されます。残りの部分は、リダイレクトによるジャンプを実現するための最終パスとして使用されます。

たとえば、「redirect:/」、ホームページにリダイレクトする場合は
「redirect:/employee」

<a th:href="@{/testRedirect}">测试RedirectView</a><br>
 @RequestMapping("/testRedirect")
    public String testRedirect(){
    
    
        return "redirect:/testThymeleafView";
    }

2. RESTful(ソフトウェアアーキテクチャのスタイル、つまりフォーマット)

使ってもいいし、使わなくても大丈夫
超本格解析の入門から習熟までRESTFul(フル)

1. RESTful
REST の概要: 表現状態転送、プレゼンテーション層でのリソース状態転送。

2. RESTfulの実装
具体的に言うと、HTTPプロトコルには動作モードを示す動詞としてGET、POST、PUT、DELETEの4つがあります。

これらは 4 つの基本操作に対応します。GET はリソースの取得に使用され、POST は新しいリソースの作成に使用され、PUT はリソースの更新に使用され、DELETE はリソースの削除に使用されます。

REST スタイルは、URL アドレスに統一されたスタイル設計の使用を推奨しています。各単語は前から後ろまでスラッシュで区切られ、リクエスト パラメーターは疑問符のキーと値のペアの形式では伝えられません。代わりに、データはサーバーに送信される は、全体的なスタイルの一貫性を確保するために URL アドレスの一部として使用されます。
ここに画像の説明を挿入

3、HiddenHttpMethodFilter

ブラウザは get リクエストと post リクエストの送信のみをサポートしているため、put リクエストと delete リクエストを送信するにはどうすればよいでしょうか?

SpringMVC は、POST リクエストを DELETE または PUT リクエストに変換するのに役立つ HiddenHttpMethodFilter を提供します。

HiddenHttpMethodFilter は、書き込みリクエストと削除リクエストの条件を処理します。

a> 現在のリクエストのリクエストメソッドは post である必要があります

b>現在のリクエストはリクエストパラメータ _method を送信する必要があります

上記の条件が満たされる場合、HiddenHttpMethodFilter フィルターは現在のリクエストのリクエスト メソッドをリクエスト パラメーター _method の値に変換するため、リクエスト パラメーター _method の値が最終的なリクエスト メソッドになります。

<form th:action="@{/user}" method="post">  
    <input type="hidden" name="_method" value="PUT">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    <input type="submit" value="修改"><br>
</form>
@RequestMapping(value = "/user", method = RequestMethod.PUT)
    public String updateUser(String username, String password){
    
    
        System.out.println("修改用户信息:"+username+","+password);
        return "success";
    }

4、HttpMessageConverter

HttpMessageConverter (メッセージ情報コンバーター) は、要求メッセージを Java オブジェクトに変換するか、Java オブジェクトを応答メッセージに変換します。

HttpMessageConverter は、2 つのアノテーションと 2 つのタイプを提供します: @RequestBody、@ResponseBody、RequestEntity、ResponseEntity

HttpMessageConverter は、2 つのアノテーションと 2 つのタイプを提供します。

@RequestBody,RequestEntity
@ResponseBody,ResponseEntity

@ResponseBody(よく使われます) コントローラーのメソッドを識別するために使用されます
@ResponseBody はコントローラーのメソッドを識別するために使用され、メソッドの戻り値を応答メッセージのレスポンスボディとしてブラウザに直接応答できます

<a th:href="@{/testResponseBody}">通过@ResponseBody响应浏览器数据</a><br>
@RequestMapping("/testResponseBody")
@ResponseBody
public String testResponseBody(){
    
    
    return "success"; //响应给浏览器的数据,也就是响应到浏览器的响应体

結果: ブラウザ ページに成功が表示され、success.html ページにジャンプしなくなります。

4.1 提起された質問: @ResponseBody はブラウザーの User オブジェクトによって報告されたエラーに直接応答します

文字列データではないため、ブラウザはサーバーからの応答データを文字列形式で受け取る必要があります

4.2、 SpringMVC の json 処理 (4.1 の問題を解決)

注: エンティティ クラス、json に変換されたマップは json オブジェクト、json に変換されたリストは json 配列

@ResponseBody が json を処理する手順:

a> ジャクソンの依存関係をインポートする

b> SpringMVC のコア設定ファイルで mvc のアノテーションドライバーをオンにすると、HandlerAdaptor:MappingJackson2HttpMessageConverter にメッセージコンバーターが自動的に組み込まれ、ブラウザーに応答する Java オブジェクトを Json 形式の文字列に変換できます。

<mvc:アノテーション駆動 />

c> プロセッサ メソッドで @ResponseBody アノテーションを使用して識別します

d> コントローラメソッドの戻り値としてJavaオブジェクトを直接返すと、自動的にJson形式の文字列に変換されます

@RequestMapping("/testResponseUser")
@ResponseBody
public User testResponseUser(){
    
    
    return new User(1001,"admin","123456",23,"男");
}

ブラウザのページに表示される結果は次のとおりです。

{“id”:1001,“ユーザー名”:“管理者”,“パスワード”:“123456”,“年齢”:23,“性別”:“男”}

4.3、Spring MVC 処理 ajax

Ajax はページをジャンプせずにサーバーと対話します。

4.4、@RestController アノテーション

@RestController アノテーションは springMVC によって提供される複合アノテーションであり、コントローラー クラスにマークされます。これは、クラスに @Controller アノテーションを追加し、クラス内の各メソッドに @ResponseBody アノテーションを追加するのと同じです。

4.5、ResponseEntity (頻繁に使用されます)

コントローラーメソッドの戻り値の型にはResponseEntityを使用し、コントローラーメソッドの戻り値がブラウザへの応答メッセージとなります。

5.インターセプター

はじめに
コントローラー コントローラー (プロセッサとも呼ばれます) は、コントローラー メソッドが呼び出された後、統合された Model オブジェクトと View オブジェクトを返します。

インターセプターはコントローラー メソッドをインターセプトします。インターセプターの 3 つの抽象メソッドは、コントローラー メソッドの実行前、コントローラー メソッドの実行後、およびビューのレンダリング後の 1 つです。

5.1. インターセプターの設定

SpringMVC のインターセプターは、コントローラー メソッドの実行をインターセプトするために使用されます。

SpringMVC のインターセプターは HandlerInterceptor インターフェースを実装する必要がある

SpringMVC インターセプターは SpringMVC 構成ファイルで構成する必要があります。

注: Bean は、ioc コンテナ内のコンポーネント、つまりオブジェクトです。

5.2. インターセプターの 3 つの抽象メソッド

SpringMVC のインターセプターには 3 つの抽象メソッドがあります。

preHandle: コントローラ メソッドが実行される前に preHandle() を実行し、そのブール型の戻り値はインターセプトかリリースかを示し、リリースする場合は true を返し、つまりコントローラ メソッドを呼び出します。インターセプトを示す場合、つまりコントローラ メソッドを呼び出さない場合は false を返します。コントローラーメソッドを呼び出す

postHandle: コントローラメソッド実行後にpostHandle()を実行

afterComplation:ビューとモデル データを処理した後、ビューのレンダリング後に afterComplation() を実行します。

5.3. 各インターセプタの preHandle() が true を返す場合

現時点では、複数のインターセプターの実行順序は、SpringMVC 構成ファイル内のインターセプターの構成順序に関連しています。

preHandle() は設定の順序で実行され、
postHandle() と afterComplation() は設定の逆の順序で実行されます。

5.4. インターセプターの preHandle() が false を返した場合

preHandle() が false を返し、その前のインターセプタの preHandle() が実行され、
postHandle() は実行されず、
false を返すインターセプタの前のインターセプタの afterComplation() が実行されます。

5 つのインターセプタがあり、3 番目の preHandle() が false に設定されている場合、インターセプタ 1、2、および 3 の preHandle() が実行され、postHandle() は実行されず、インターセプタ 2 の afterComplation() は実行されます。実行されました

6. 例外ハンドラ

6.1. 設定ベースの例外処理

SpringMVC は、コントローラー メソッドの実行中に発生する例外を処理するインターフェイスを提供します: HandlerExceptionResolver

HandlerExceptionResolver インターフェースの実装クラスは、DefaultHandlerExceptionResolver および SimpleMappingExceptionResolver です。

SpringMVC はカスタム例外ハンドラー SimpleMappingExceptionResolver を提供します。

6.2. アノテーションベースの例外処理

@ControllerAdvice は現在のクラスを例外処理のコンポーネントとして識別します @ControllerAdvice と @component はほぼコンポーネントを識別する意味です

@ExceptionHandler は、識別されたメソッドによって処理される例外を設定するために使用されます。

ex は、現在のリクエスト処理で発生した例外オブジェクトを示します。

//@ControllerAdvice将当前类标识为异常处理的组件
@ControllerAdvice
public class ExceptionController {
    
    

    //@ExceptionHandler用于设置所标识方法处理的异常
    @ExceptionHandler(ArithmeticException.class)
    //ex表示当前请求处理中出现的异常对象
    public String handleArithmeticException(Exception ex, Model model){
    
    
        model.addAttribute("ex", ex);
        return "error";
    }

}

7. SpringMVCの実行処理

ここに画像の説明を挿入

プロセスの簡易バージョン

1. ユーザーはフロント コントローラーの DispatcherServlet にリクエストを送信します。

2. DispatcherServlet は、HandlerMapping プロセッサ マッパーを呼び出すリクエストを受け取ります。

3. プロセッサ マッパーは特定のプロセッサを検索し (XML 設定と注釈に従って検索できます)、プロセッサ オブジェクトとプロセッサを生成します。

インターセプタ (存在する場合は生成される) が DispatcherServlet に返されます。

4. DispatcherServlet は HandlerAdapter プロセッサ アダプタを呼び出します。

5. HandlerAdapter は、適応後に特定のプロセッサ (コントローラー、バックエンド コントローラーとも呼ばれます) を呼び出します。

6. コントローラーの実行が完了すると、ModelAndView に戻ります。

7. HandlerAdapter は、コントローラーの実行結果 ModelAndView を DispatcherServlet に返します。

8. DispatcherServlet は ModelAndView を ViewReslover ビュー パーサーに渡します。

9. ViewReslover は、解析後に特定の View を返します。

10. DispatcherServlet は、View に従ってビューをレンダリングします (つまり、モデル データをビューに埋め込みます)。

11. DispatcherServlet がユーザーに応答します。

8. SpringMVCの共通コンポーネント

  • DispatcherServlet:フロントエンド コントローラー。エンジニアが開発する必要がなく、フレームワークによって提供されます。

役割: リクエストとレスポンスの統合処理。プ​​ロセス制御全体の中心であり、他のコンポーネントを呼び出してユーザーリクエストを処理します。

  • HandlerMapping:プロセッサ マッパー。エンジニアが開発する必要がなく、フレームワークによって提供されます。

機能: 要求された URL、メソッド、およびその他の情報に従ってハンドラー (コントローラー メソッド) を検索します。

  • ハンドラー:エンジニアが開発する必要があるプロセッサー

機能: ハンドラーは、DispatcherServlet の制御下で特定のユーザー要求を処理します。

  • HandlerAdapter:プロセッサ アダプタ。エンジニアの開発は不要で、フレームワークによって提供されます。

機能: HandlerAdapterを介してプロセッサ(コントローラメソッド)を実行します。

  • ViewResolver:ビューリゾルバー。エンジニアの開発は不要で、フレームワークによって提供されます。

機能: ビュー分析を実行して、対応するビューを取得します。例: ThymeleafView、InternalResourceView、RedirectView

  • ビュー:ビュー

役割: ページを通じてユーザーにモデル データを表示します。

9. DispatcherServlet の初期化プロセス

DispatcherServlet は本質的にはサーブレットであるため、当然サーブレットのライフサイクルに従います。したがって、巨視的に見ると、スケジュールするのはサーブレットのライフサイクルです。

a>WebApplicationContext を初期化する
b> WebApplicationContext を作成する
c>DispatcherServlet 初期化戦略

FrameworkServlet が WebApplicationContext を作成した後、コンテナを更新して onRefresh(wac) を呼び出します。このメソッドは DispatcherServlet で書き換えられ、initStrategies(context) メソッドが呼び出されて戦略を初期化します。つまり、DispatcherServlet の各コンポーネントを初期化します。 。

10. Spring MVCの11の処理手順を詳しく解説?

  1. ブラウザはリクエストを送信しますが、そのリクエストは誰に送信されるのでしょうか? 最初にフロントエンド コントローラーに送信します。つまり、すべてのリクエストがフロントエンド コントローラーに送信されます。フロントエンド コントローラーはすべてのリクエストの入り口ですが、フロントエンド コントローラーはビジネス リクエストを処理できません。ただのリクエスト転送
  2. ビジネスリクエストは誰が処理しますか? 実際にビジネス リクエストを処理するハンドラー プロセッサーです。そこで問題となるのは、フロント コントローラーがこのハンドラー プロセッサーをどのように見つけるかということです。プロセッサ マッパーが記録するのは、リクエストされた URL と処理メソッドの間のマッピング関係ですが、このマッピング関係はどのように確立されるのでしょうか? @RequestMapping アノテーションによって確立され、このマッピング関係は Map (キーと値の形式) に相当し、キーは要求された URL、値は処理用のハンドラーです。さて、フロントコントローラーがこのリクエストを受け取った後、対応するハンドラーを見つけるにはどうすればよいでしょうか? プロセッサ マッパーを見つけて、誰にその処理を要求するかを尋ねる必要があります。
  3. プロセッサ マッパーは、要求された URL に従って対応するプロセッサを見つけます。見つからない場合は、エラーを報告します。見つかった場合は、プロセッサ実行チェーンを返します。このプロセッサ実行チェーンには、ハンドラーがあります。さらに、インターセプターもあります (ここで独自のインターセプターを開発できます)。その後、フロント コントローラーに戻ります。
  4. フロント コントローラーはまだこのビジネス リクエストを処理できません。フロント コントローラーはハンドラーを返すため、現時点では別の処理を行う必要があります。また、ハンドラーの型がわからないため、springmvc ではハンドラーがアノテーションの形式, 実際には、非アノテーションの形式にすることもできます (通常、非アノテーション形式は使用しません) フロント コントローラーはハンドラーがどのようなタイプであるかを知らないため、それを行う方法はありませんそれを実行するため、実行するものを見つける必要があります。そして、この問題は処理のために別のコンポーネントに渡されます。このコンポーネントはプロセッサ アダプタと呼ばれます。このプロセッサ アダプタは、さまざまなタイプのハンドラを適応させるために使用されます。さまざまなタイプのハンドラーに応じて、さまざまなタイプのアダプターを選択して実行します。
  5. 現在のハンドラーがアノテーションの形式である場合、ハンドラーを実行するプロセッサ アダプタをアノテーションの形式で選択します。Handler が実行される、つまり、Controller クラスのメソッドが実行されます。メソッドが実行された後、内部のビジネスが処理されます。
  6. 業務処理後、最終的にModelAndViewが返されます。プロセッサ アダプタがこの結果を取得しても意味がありません。プロセッサ アダプタの機能はハンドラを実行することです。ハンドラが実行されると、その作業は完了します。
  7. 完了後、戻り結果を取得し、戻り結果をそのままフロント コントローラーにスローします。プロセッサ アダプターの作業はこの時点で完了します。
  8. フロント コントローラーはこの ModelAndView を取得しますが、まだこれに対処する方法がなく、HTML を返すことができません。その後、対応する JSP を見つける必要があります。これは、ModelAndView にはモデルとビューの両方が含まれており、このビューは誰を使用するかを指定するためです。データのレンダリングに使用したい。データをレンダリングしたい場合は、このビューを解析するためのビュー パーサーを見つける必要があります。このビューにはさまざまな種類があるためです (最も一般的なビューは jsp ですが、jsp 以外にも実際には他にもあります。たとえば、 report 、pdf、freemaker など) の場合は、処理するさまざまなビュー パーサーが見つかります。現在、最も一般的に使用されているビューは jsp であるため、jsp に対応するビュー パーサーが検索されます。
  9. このビュー パーサーを見つけると、このビューが解析され、解析後に View オブジェクトが返されます。
  10. 最後に、ビュー パーサーのビューをレンダリングするプロセスを呼び出します。ビューをレンダリングするプロセスは、実際にはデータを HTML にレンダリングする JSP 用です。
  11. HTML への最終レンダリング後、ユーザーに応答します。

11. Spring MVCのコントローラーはシングルトンモードですか? どうしたの?どうやって対処すればいいのでしょうか?

シングルトンパターンです。そのため、複数のスレッドでアクセスする場合には、スレッドの安全性の問題が発生します。同期は使用しないでください。パフォーマンスに影響します。解決策は、コントローラーにフィールドを書き込まないことです。

12. Spring MVC ではどのようなアノテーションが一般的に使用されますか?

@RequestMapping: リクエスト URL マッピングを処理するためのアノテーション。クラスまたはメソッドで使用できます。クラスで使用すると、クラス内のリクエストに応答するすべてのメソッドがこのアドレスを親パスとして使用することを意味します
@RequestBody: アノテーションは、http リクエストの json データの受信を実装し、json を Java オブジェクトに変換します
@ResponseBody: アノテーションの実装は、コントローラーを返しますメソッド オブジェクトは json オブジェクトに変換され、クライアントに応答されます

13. インターセプトリクエストで get によって送信されたメソッドをインターセプトするにはどうすればよいですか?

Method=RequestMethod.GET を @RequestMapping アノテーションに追加します

14. メソッドでリクエストまたはセッションを取得するにはどうすればよいですか?

メソッドの仮パラメータでリクエストを直接宣言すると、Spring MVC が自動的にリクエスト オブジェクトを渡します。

15. インターセプト メソッドでフォアグラウンドから渡されたパラメーターを取得するにはどうすればよいですか?

このパラメータを仮パラメータで直接宣言するだけですが、名前は渡されたパラメータと同じである必要があります

16. 多くのパラメータがフォアグラウンドで渡され、これらのパラメータがすべて 1 つのオブジェクトである場合、このオブジェクトを取得するにはどうすればよいですか?

このオブジェクトをメソッド内で直接宣言するだけで、Spring MVC が自動的にこのオブジェクトにプロパティを割り当てます。

17. Spring MVC の関数の戻り値は何ですか?

戻り値には、String、ModelAndView などの多くの型を含めることができます。ModelAndView はビューとデータを組み合わせますが、通常は String を使用する方が良いでしょう。

18. Spring MVC はインターセプターをどのように実装しますか?

1 つは HandlerInterceptor インターフェースを実装する方法、もう 1 つはアダプター クラスを継承する方法です。

おすすめ

転載: blog.csdn.net/m0_50736744/article/details/126432842
おすすめ