コンテンツは私の学習 Web サイトから取得したものです: topjavaer.cn
SpringMVC についての理解について話す
SpringMVC は、MVC 設計モデルを実装する Java ベースのリクエスト駆動型の軽量 Web フレームワークであり、Spring フレームワークのモジュールに属します。
一連のアノテーションを使用して、インターフェイスを実装せずに、単純な Java クラスをリクエストを処理するコントローラーにします。同時に、RESTful プログラミング スタイルのリクエストもサポートします。
MVCパターンとは何ですか?
MVCの正式名称は、Model View Controller
ソフトウェア設計のモデルであるModel(モデル)-View(ビュー)-Controller(コントローラー)の略称です。ビジネスロジック、データ、インターフェース表示を分離してコードを整理する手法を採用しており、多くのビジネスロジックを1つのコンポーネントにまとめており、インターフェースやユーザーインタラクションの改善やカスタマイズが必要な場合でも、ビジネスロジックを書き直す必要がありません。 . 、エンコード時間を短縮します。
ビュー。ビューは、ユーザーが表示して操作するインターフェイスを指します。たとえば、HTML 要素で構成される Web ページ インターフェイスやソフトウェア クライアント インターフェイスなどです。MVC の利点の 1 つは、アプリケーションのさまざまなビューを処理できることです。ビューでは実際の処理は行われません。これは、データを出力し、ユーザーがそれを操作できるようにする単なる方法です。
モデルでは、モデルはビジネス ルールを表すモデルを指します。MVC の 3 つのコンポーネントのうち、モデルには最も多くの処理タスクがあります。モデルによって返されるデータは中立であり、モデルはデータ形式とは何の関係もありません。このようなモデルは複数のビューにデータを提供できます。モデルに適用されたコードは複数のビューで再利用できるため、コードの重複が減少します。セックス。
コントローラー (コントローラー) は、ユーザーの入力を受け入れ、ユーザーのニーズを完了するためにモデルとビューを呼び出すコントローラーを指します。コントローラー自体は何も出力したり、処理を実行したりしません。リクエストを受信し、リクエストを処理するためにどのモデル コンポーネントを呼び出すかを決定し、返されたデータを表示するためにどのビューを使用するかを決定するだけです。
SpringMVCの利点は何ですか?
- Spring と統合するのに非常に便利で、優れたエコロジーを備えています。最も包括的な Java インタビュー サイト
- シンプルな構成、素早い起動。
- RESTful スタイルをサポートします。
- さまざまなビュー テクノロジとさまざまなリクエスト リソース マッピング戦略をサポートします。
この記事は Github ウェアハウスに含まれています。これには、コンピューター基盤、Java 基盤、マルチスレッド、JVM、データベース、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分散、マイクロサービス、デザイン パターン、アーキテクチャ、学校採用およびソーシャル採用の共有が含まれます。などコア知識ポイント、スターへようこそ~
Github にアクセスできない場合は、gitee アドレスにアクセスできます。
Spring MVCとStrutsの違い
-
Spring MVCはメソッドベースで開発され、Struts2はクラスベースで開発されます。
- Spring MVCは、ユーザーがリクエストしたURLパス情報をControllerの特定のメソッドにマッピングし、すべてのリクエストパラメータを対応するメソッドの仮パラメータに注入して、メソッドを1つだけ持つHandlerオブジェクトを生成します。
- Struts はリクエストを処理するたびに、Action をインスタンス化します。Action クラスのすべてのメソッドで使用されるリクエスト パラメータは、Action クラスのメンバ変数です。メソッドの数が増えると、Action 全体が混乱します。
-
Spring MVC は単一ケース開発モードをサポートし、Struts は複数のケースのみを使用できます
- Struts はクラスのメンバー変数を通じてのみパラメーターを受け取ることができるため、複数のインスタンスのみを使用できます。
-
Struts2 のコアはフィルター (StrutsPreparedAndExcuteFilter) に基づいており、Spring MVC のコアはサーブレット (DispatcherServlet (フロント コントローラー)) に基づいています。
-
Strutsの処理速度はSpring MVCより若干遅く、StrutsはStrutsタグを使用するため、データの読み込みが遅くなります。
Spring MVC の仕組み
Spring MVC は次のように動作します。
- DispatcherServlet がユーザーリクエストを受信します
- リクエストの処理に使用されるハンドラーとインターセプターを見つけて、HandlerExecutionChain 実行チェーンを構築します。
- ハンドラーに対応する HandlerAdapter を見つけます。
- 登録されているすべてのインターセプターの preHandler メソッドを実行します。
- HandlerAdapter の handle() メソッドを呼び出してリクエストを処理し、ModelAndView を返します。
- 登録されているすべてのインターセプターの postHandler メソッドを逆の順序で実行します。
- ビューの解像度とビューのレンダリングをリクエストする
[外部リンク画像の転送に失敗しました。ソース サイトには盗難防止リンク メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-pzKZtawb-1690387983372)(http://img.topjavaer.cn/img/) spring_mvcprinciple.png)]
Spring MVC の主要コンポーネント?
- フロント コントローラー (DispatcherServlet): ユーザーのリクエストを受信し、結果をユーザーに返します。
- HandlerMapping: リクエストの URL パスに従って、アノテーションまたは XML 設定を通じて一致するハンドラーを見つけます。
- ハンドラー アダプター (HandlerAdapter): ハンドラー アダプター。ハンドラー メソッドを呼び出してリクエストを処理します。
- ハンドラー: 関連するリクエスト処理ロジックを実行し、対応するデータとビュー情報を返し、それを ModelAndView オブジェクトにカプセル化します。
- ビュー リゾルバー (ViewResolver): 論理ビュー名を実際のビュー ビューに解決します。
- ビュー (View): インターフェイス クラス、実装クラスは、さまざまなビュー タイプ (JSP、FreeMarker、Excel など) をサポートできます。
Spring MVC の一般的なアノテーションは何ですか?
- @Controller: このクラスのインスタンスをコントローラーとして識別するために使用されます。
- @RequestMapping: Web リクエスト (アクセス パスとパラメータ) をマッピングします。
- @ResponseBody: アノテーションはページではなくデータを返します
- @RequestBody: アノテーションは、http リクエストの json データの受信と、json データを Java オブジェクトに変換することを実現します。
- @PathVariable: URL のパス変数の値を取得します
- @RestController:@Controller+@ResponseBody
- @ExceptionHandler は、メソッドをグローバル例外ハンドラーとして識別します。
@Controller アノテーションは何のためにあるのでしょうか?
@Controller
アノテーションは、クラスを Spring Web MVC コントローラーとしてマークします。Spring MVC は、アノテーション付きクラスをスキャンし、次にこのクラスのアノテーション付き@RequestMapping
メソッドをスキャンし、上記の HandlerMapping コンポーネントと HandlerAdapter コンポーネントで説明したように、アノテーション情報に従ってこのメソッドに対応するハンドラー オブジェクトを生成します。
もちろん、アノテーションを追加するだけでなく、Spring MVC が提供する またはインターフェイス@Controller
を実装することもでき、対応する実装クラスはプロセッサ オブジェクトとしても使用されますController
HttpRequestHandler
Github ウェアハウスを共有しましょう。そこには、C 言語、C++、Java、Python、フロントエンド、データベース、オペレーティング システム、コンピュータ ネットワーク、データ構造とアルゴリズム、マシンなど、 Dabin によってコンパイルされた300 以上の古典的なコンピュータ ブック PDF が含まれています。学習、プログラミング生活など、スターを付けることができます。次に本を探して直接検索すると、倉庫が継続的に更新されます~
@RequestMapping アノテーションの用途は何ですか?
@RequestMapping
アノテーションは、プロセッサの HTTP リクエスト メソッド、URI、およびその他の情報を構成するために使用され、リクエストとメソッドをマッピングできるようになります。このアノテーションはクラスまたはメソッドに作用でき、通常、コントローラーの URI プレフィックスはクラスに設定されます。
@RestController と @Controller の違いは何ですか?
@RestController
アノテーションは、 に基づいて、フロントエンドとバックエンドが分離されている現在のアーキテクチャにより適したアノテーションを追加し、Restful API を提供し、JSON データ形式を返します@Controller
。@ResponseBody
@RequestMapping アノテーションと @GetMapping アノテーションの違いは何ですか?
@RequestMapping
: クラスおよびメソッドにアノテーションを付けることができます。@GetMapping
メソッドにのみ登録できます。@RequestMapping
: GET、POST、PUT、DELETE およびその他のリクエスト メソッドが利用可能ですが、@GetMapping
これは@RequestMapping
GET リクエスト メソッドの特殊なケースです。
@RequestParam アノテーションと @PathVariable アノテーションの違い
どちらのアノテーションもメソッドのパラメータに使用され、パラメータ値の取得方法が異なります。@RequestParam
アノテーションのパラメータはリクエストに含まれるパラメータから取得され、@PathVariable
アノテーションはリクエストのURIから取得されます。
@RequestBody と @RequestParam の違い
@RequestBody は通常、ajax リクエスト内の contentType: "application/json; charset=utf-8" の宣言を処理します。つまり、json データまたは xml データです。
x-www-form-urlencoded
@RequestParam は通常、contentType が ajax で宣言されていない場合のデフォルトの形式です。
Spring MVCでの例外処理
例外は Spring フレームワークにスローされて、Spring フレームワークで処理できます。必要なのは、単純な例外ハンドラーを構成し、例外ハンドラーにビュー ページを追加することだけです。
- システム定義の例外ハンドラー SimpleMappingExceptionResolver を使用する
- カスタム例外ハンドラーを使用する
- 例外処理アノテーションを使用する
SpringMVC はバックグラウンドからフォアグラウンドにデータを転送するためにどのオブジェクトを使用しますか?
- データをリクエストにバインドします。
- ModelAndView を返します。
- ModelMap オブジェクトを通じて、このオブジェクトの put メソッドを呼び出し、そのオブジェクトにオブジェクトを追加すると、フロントエンドが el 式を通じてそれを取得できます。
- データをセッションにバインドします。
SpringMvcのControllerはシングルトンモードですか?
シングルトンパターン。マルチスレッド アクセス中にスレッドの安全性の問題があります。解決策は、コントローラに変数の状態量を書き込むことではありません。これらの変数の状態を使用する必要がある場合は、ThreadLocal を使用して各スレッドの変数のコピーを個別に生成し、操作できます。独立して、相互に影響しません。
Spring MVC インターセプターを導入しますか?
Spring MVC インターセプターは、 org.springframework.web.servlet パッケージにある HandlerInterceor インターフェースに対応しており、3 つのメソッドを定義しています。インターフェースを実装するには、次の 3 つのメソッドを実装する必要があります。
- 前処理(preHandle()メソッド):コントローラメソッド実行前に実行されるメソッドです。戻り値はブール型で、false が返された場合はリクエストをインターセプトし、下方向への実行は行われません。true が返された場合はリクエストを解放し、下方向への実行を継続します (背後に他のインターセプターが存在しない場合は、コントローラーメソッドが実行されます)。したがって、このメソッドはリクエストを判断し、プログラムが実行を継続するかどうかを決定するか、またはいくつかの初期化操作を実行してリクエストを前処理することができます。
- 後処理 (postHandle() メソッド) : このメソッドは、コントローラーのメソッド呼び出しを実行した後、ModelAndView に戻る前に実行されます。このメソッドは、DispatcherServlet が返されたビューをレンダリングする前に呼び出されるため、主に返されたビューを処理するために使用されます。このメソッドは、リクエスト ドメイン内のモデルとビューをさらに変更するために使用できます。
- 完了処理(afterCompletion()メソッド) : コントローラの実行後にこのメソッドが実行されます。コントローラのメソッドの実行後にこのメソッドが実行されるため、一部のリソースのクリーニングやログ情報などの処理に適しています。
インターセプタを通じて権限チェック、パラメータチェック、ログ記録などの操作を実行できます。
SpringMvc はどのようにインターセプターを構成しますか?
記述方法は 2 つあり、1 つは HandlerInterceptor インターフェイスを実装する方法、もう 1 つはアダプター クラスを継承してインターフェイス メソッドに処理ロジックを実装し、SpringMvc 設定ファイルでインターセプターを構成する方法です。
<!-- 配置SpringMvc的拦截器 -->
<mvc:interceptors>
<bean id="myInterceptor" class="com.dabin.MyHandlerInterceptor"></bean>
<!-- 只拦截部分请求 -->
<mvc:interceptor>
<mvc:mapping path="/xxx.do" />
<bean class="com.dabin.MyHandlerInterceptorAdapter" />
</mvc:interceptor>
</mvc:interceptors>
Spring MVCのインターセプターとFilterフィルターの違いは何ですか?
以下の点があります。
- 同じ機能: Interceptor と Filter は両方とも対応する機能を実現できます
- コンテナは異なります: インターセプタは Spring MVC システムに構築され、フィルタはサーブレット コンテナ上に構築されます
- 使用の利便性が異なります。インターセプターは異なるタイミングで実行される 3 つのメソッドを提供しますが、フィルターは 1 つのメソッドのみを提供します。
レストとは何ですか?
REST、英語の正式名称はResource Representational State Transferで、リソースへのアクセス状態の変化をURLの変化で表現します。
リソース:リソース。リソースは、REST アーキテクチャまたはネットワーク処理全体の中核です。
表現: JSON、XML、JPEG などの何らかの形式の表現。
状態転送:状態変更。HTTPメソッドで実現します。
REST は、ネットワーク内のクライアントとサーバー間の対話形式を記述します。この言語では、URL を通じてどのリソースが必要か、HTTP メソッドを通じて何を実行したいか、HTTP ステータス コードを通じて結果がわかります。
例えば:
GET /tasks 获取所有任务
POST /tasks 创建新任务
GET /tasks/{
id} 通过任务id获取任务
PUT /tasks/{
id} 更新任务
DELETE /tasks/{
id} 删除任务
GET はリソースの取得を表し、POST はリソースの追加を表し、PUT はリソースの変更を表し、DELETE はリソースの削除を表します。
サーバーが提供するRESTful APIでは、URL内のリソースの指定には名詞のみが使用され、原則として動詞は使用されません。HTTP Status Code
サーバーのステータス情報を渡すために使用します。たとえば、最も一般的に使用される 200 は成功を意味し、500 はサーバー内部エラーを意味します。
RESTを使用する利点は何ですか?
まず、スタイルが統一され、さまざまな名前のコードが存在しなくなりますdelUser/deleteUser/removeUser
。
第二に、それはリソース指向であり、一目瞭然で説明不要です。
3 番目に、HTTP プロトコル自体のセマンティクスを最大限に活用する
最後に、良いものは共有する必要があります。私が長年コンピュータについて学んだ書籍を共有し、古典的なコンピュータ プログラミング書籍の倉庫にまとめました。C言語、C++、Java、Python、フロントエンド、データベース、書籍など合計300 冊以上あります。オペレーティングシステム、コンピュータネットワーク、データ構造、アルゴリズム、機械学習、プログラミングライフなどにスターを付けると、次回書籍を見つけて直接検索すると、倉庫が継続的に更新されます~
Github アドレス> コンテンツは私の学習 Web サイトから取得したものです: topjavaer.cn
SpringMVC についての理解について話す
SpringMVC は、MVC 設計モデルを実装する Java ベースのリクエスト駆動型の軽量 Web フレームワークであり、Spring フレームワークのモジュールに属します。
一連のアノテーションを使用して、インターフェイスを実装せずに、単純な Java クラスをリクエストを処理するコントローラーにします。同時に、RESTful プログラミング スタイルのリクエストもサポートします。
MVCパターンとは何ですか?
MVCの正式名称は、Model View Controller
ソフトウェア設計のモデルであるModel(モデル)-View(ビュー)-Controller(コントローラー)の略称です。ビジネスロジック、データ、インターフェース表示を分離してコードを整理する手法を採用しており、多くのビジネスロジックを1つのコンポーネントにまとめており、インターフェースやユーザーインタラクションの改善やカスタマイズが必要な場合でも、ビジネスロジックを書き直す必要がありません。 . 、エンコード時間を短縮します。
ビュー。ビューは、ユーザーが表示して操作するインターフェイスを指します。たとえば、HTML 要素で構成される Web ページ インターフェイスやソフトウェア クライアント インターフェイスなどです。MVC の利点の 1 つは、アプリケーションのさまざまなビューを処理できることです。ビューでは実際の処理は行われません。これは、データを出力し、ユーザーがそれを操作できるようにする単なる方法です。
モデルでは、モデルはビジネス ルールを表すモデルを指します。MVC の 3 つのコンポーネントのうち、モデルには最も多くの処理タスクがあります。モデルによって返されるデータは中立であり、モデルはデータ形式とは何の関係もありません。このようなモデルは複数のビューにデータを提供できます。モデルに適用されたコードは複数のビューで再利用できるため、コードの重複が減少します。セックス。
コントローラー (コントローラー) は、ユーザーの入力を受け入れ、ユーザーのニーズを完了するためにモデルとビューを呼び出すコントローラーを指します。コントローラー自体は何も出力したり、処理を実行したりしません。リクエストを受信し、リクエストを処理するためにどのモデル コンポーネントを呼び出すかを決定し、返されたデータを表示するためにどのビューを使用するかを決定するだけです。
SpringMVCの利点は何ですか?
- Spring と統合するのに非常に便利で、優れたエコロジーを備えています。最も包括的な Java インタビュー サイト
- シンプルな構成、素早い起動。
- RESTful スタイルをサポートします。
- さまざまなビュー テクノロジとさまざまなリクエスト リソース マッピング戦略をサポートします。
この記事は Github ウェアハウスに含まれています。これには、コンピューター基盤、Java 基盤、マルチスレッド、JVM、データベース、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分散、マイクロサービス、デザイン パターン、アーキテクチャ、学校採用およびソーシャル採用の共有が含まれます。などコア知識ポイント、スターへようこそ~
Github にアクセスできない場合は、gitee アドレスにアクセスできます。
Spring MVCとStrutsの違い
-
Spring MVCはメソッドベースで開発され、Struts2はクラスベースで開発されます。
- Spring MVCは、ユーザーがリクエストしたURLパス情報をControllerの特定のメソッドにマッピングし、すべてのリクエストパラメータを対応するメソッドの仮パラメータに注入して、メソッドを1つだけ持つHandlerオブジェクトを生成します。
- Struts はリクエストを処理するたびに、Action をインスタンス化します。Action クラスのすべてのメソッドで使用されるリクエスト パラメータは、Action クラスのメンバ変数です。メソッドの数が増えると、Action 全体が混乱します。
-
Spring MVC は単一ケース開発モードをサポートし、Struts は複数のケースのみを使用できます
- Struts はクラスのメンバー変数を通じてのみパラメーターを受け取ることができるため、複数のインスタンスのみを使用できます。
-
Struts2 のコアはフィルター (StrutsPreparedAndExcuteFilter) に基づいており、Spring MVC のコアはサーブレット (DispatcherServlet (フロント コントローラー)) に基づいています。
-
Strutsの処理速度はSpring MVCより若干遅く、StrutsはStrutsタグを使用するため、データの読み込みが遅くなります。
Spring MVC の仕組み
Spring MVC は次のように動作します。
- DispatcherServlet がユーザーリクエストを受信します
- リクエストの処理に使用されるハンドラーとインターセプターを見つけて、HandlerExecutionChain 実行チェーンを構築します。
- ハンドラーに対応する HandlerAdapter を見つけます。
- 登録されているすべてのインターセプターの preHandler メソッドを実行します。
- HandlerAdapter の handle() メソッドを呼び出してリクエストを処理し、ModelAndView を返します。
- 登録されているすべてのインターセプターの postHandler メソッドを逆の順序で実行します。
- ビューの解像度とビューのレンダリングをリクエストする
[外部リンク画像の転送に失敗しました。ソース サイトには盗難防止リンク メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-yUVyW0kX-1690387982601)(http://img.topjavaer.cn/img/) spring_mvcprinciple.png)]
Spring MVC の主要コンポーネント?
- フロント コントローラー (DispatcherServlet): ユーザーのリクエストを受信し、結果をユーザーに返します。
- HandlerMapping: リクエストの URL パスに従って、アノテーションまたは XML 設定を通じて一致するハンドラーを見つけます。
- ハンドラー アダプター (HandlerAdapter): ハンドラー アダプター。ハンドラー メソッドを呼び出してリクエストを処理します。
- ハンドラー: 関連するリクエスト処理ロジックを実行し、対応するデータとビュー情報を返し、それを ModelAndView オブジェクトにカプセル化します。
- ビュー リゾルバー (ViewResolver): 論理ビュー名を実際のビュー ビューに解決します。
- ビュー (View): インターフェイス クラス、実装クラスは、さまざまなビュー タイプ (JSP、FreeMarker、Excel など) をサポートできます。
Spring MVC の一般的なアノテーションは何ですか?
- @Controller: このクラスのインスタンスをコントローラーとして識別するために使用されます。
- @RequestMapping: Web リクエスト (アクセス パスとパラメータ) をマッピングします。
- @ResponseBody: アノテーションはページではなくデータを返します
- @RequestBody: アノテーションは、http リクエストの json データの受信と、json データを Java オブジェクトに変換することを実現します。
- @PathVariable: URL のパス変数の値を取得します
- @RestController:@Controller+@ResponseBody
- @ExceptionHandler は、メソッドをグローバル例外ハンドラーとして識別します。
@Controller アノテーションは何のためにあるのでしょうか?
@Controller
アノテーションは、クラスを Spring Web MVC コントローラーとしてマークします。Spring MVC は、アノテーション付きクラスをスキャンし、次にこのクラスのアノテーション付き@RequestMapping
メソッドをスキャンし、上記の HandlerMapping コンポーネントと HandlerAdapter コンポーネントで説明したように、アノテーション情報に従ってこのメソッドに対応するハンドラー オブジェクトを生成します。
もちろん、アノテーションを追加するだけでなく、Spring MVC が提供する またはインターフェイス@Controller
を実装することもでき、対応する実装クラスはプロセッサ オブジェクトとしても使用されますController
HttpRequestHandler
Github ウェアハウスを共有しましょう。そこには、C 言語、C++、Java、Python、フロントエンド、データベース、オペレーティング システム、コンピュータ ネットワーク、データ構造とアルゴリズム、マシンなど、 Dabin によってコンパイルされた300 以上の古典的なコンピュータ ブック PDF が含まれています。学習、プログラミング生活など、スターを付けることができます。次に本を探して直接検索すると、倉庫が継続的に更新されます~
@RequestMapping アノテーションの用途は何ですか?
@RequestMapping
アノテーションは、プロセッサの HTTP リクエスト メソッド、URI、およびその他の情報を構成するために使用され、リクエストとメソッドをマッピングできるようになります。このアノテーションはクラスまたはメソッドに作用でき、通常、コントローラーの URI プレフィックスはクラスに設定されます。
@RestController と @Controller の違いは何ですか?
@RestController
アノテーションは、 に基づいて、フロントエンドとバックエンドが分離されている現在のアーキテクチャにより適したアノテーションを追加し、Restful API を提供し、JSON データ形式を返します@Controller
。@ResponseBody
@RequestMapping アノテーションと @GetMapping アノテーションの違いは何ですか?
@RequestMapping
: クラスおよびメソッドにアノテーションを付けることができます。@GetMapping
メソッドにのみ登録できます。@RequestMapping
: GET、POST、PUT、DELETE およびその他のリクエスト メソッドが利用可能ですが、@GetMapping
これは@RequestMapping
GET リクエスト メソッドの特殊なケースです。
@RequestParam アノテーションと @PathVariable アノテーションの違い
どちらのアノテーションもメソッドのパラメータに使用され、パラメータ値の取得方法が異なります。@RequestParam
アノテーションのパラメータはリクエストに含まれるパラメータから取得され、@PathVariable
アノテーションはリクエストのURIから取得されます。
@RequestBody と @RequestParam の違い
@RequestBody は通常、ajax リクエスト内の contentType: "application/json; charset=utf-8" の宣言を処理します。つまり、json データまたは xml データです。
x-www-form-urlencoded
@RequestParam は通常、contentType が ajax で宣言されていない場合のデフォルトの形式です。
Spring MVCでの例外処理
例外は Spring フレームワークにスローされて、Spring フレームワークで処理できます。必要なのは、単純な例外ハンドラーを構成し、例外ハンドラーにビュー ページを追加することだけです。
- システム定義の例外ハンドラー SimpleMappingExceptionResolver を使用する
- カスタム例外ハンドラーを使用する
- 例外処理アノテーションを使用する
SpringMVC はバックグラウンドからフォアグラウンドにデータを転送するためにどのオブジェクトを使用しますか?
- データをリクエストにバインドします。
- ModelAndView を返します。
- ModelMap オブジェクトを通じて、このオブジェクトの put メソッドを呼び出し、そのオブジェクトにオブジェクトを追加すると、フロントエンドが el 式を通じてそれを取得できます。
- データをセッションにバインドします。
SpringMvcのControllerはシングルトンモードですか?
シングルトンパターン。マルチスレッド アクセス中にスレッドの安全性の問題があります。解決策は、コントローラに変数の状態量を書き込むことではありません。これらの変数の状態を使用する必要がある場合は、ThreadLocal を使用して各スレッドの変数のコピーを個別に生成し、操作できます。独立して、相互に影響しません。
Spring MVC インターセプターを導入しますか?
Spring MVC インターセプターは、 org.springframework.web.servlet パッケージにある HandlerInterceor インターフェースに対応しており、3 つのメソッドを定義しています。インターフェースを実装するには、次の 3 つのメソッドを実装する必要があります。
- 前処理(preHandle()メソッド):コントローラメソッド実行前に実行されるメソッドです。戻り値はブール型で、false が返された場合はリクエストをインターセプトし、下方向への実行は行われません。true が返された場合はリクエストを解放し、下方向への実行を継続します (背後に他のインターセプターが存在しない場合は、コントローラーメソッドが実行されます)。したがって、このメソッドはリクエストを判断し、プログラムが実行を継続するかどうかを決定するか、またはいくつかの初期化操作を実行してリクエストを前処理することができます。
- 後処理 (postHandle() メソッド) : このメソッドは、コントローラーのメソッド呼び出しを実行した後、ModelAndView に戻る前に実行されます。このメソッドは、DispatcherServlet が返されたビューをレンダリングする前に呼び出されるため、主に返されたビューを処理するために使用されます。このメソッドは、リクエスト ドメイン内のモデルとビューをさらに変更するために使用できます。
- 完了処理(afterCompletion()メソッド) : コントローラの実行後にこのメソッドが実行されます。コントローラのメソッドの実行後にこのメソッドが実行されるため、一部のリソースのクリーニングやログ情報などの処理に適しています。
インターセプタを通じて権限チェック、パラメータチェック、ログ記録などの操作を実行できます。
SpringMvc はどのようにインターセプターを構成しますか?
記述方法は 2 つあり、1 つは HandlerInterceptor インターフェイスを実装する方法、もう 1 つはアダプター クラスを継承してインターフェイス メソッドに処理ロジックを実装し、SpringMvc 設定ファイルでインターセプターを構成する方法です。
<!-- 配置SpringMvc的拦截器 -->
<mvc:interceptors>
<bean id="myInterceptor" class="com.dabin.MyHandlerInterceptor"></bean>
<!-- 只拦截部分请求 -->
<mvc:interceptor>
<mvc:mapping path="/xxx.do" />
<bean class="com.dabin.MyHandlerInterceptorAdapter" />
</mvc:interceptor>
</mvc:interceptors>
Spring MVCのインターセプターとFilterフィルターの違いは何ですか?
以下の点があります。
- 同じ機能: Interceptor と Filter は両方とも対応する機能を実現できます
- コンテナは異なります: インターセプタは Spring MVC システムに構築され、フィルタはサーブレット コンテナ上に構築されます
- 使用の利便性が異なります。インターセプターは異なるタイミングで実行される 3 つのメソッドを提供しますが、フィルターは 1 つのメソッドのみを提供します。
レストとは何ですか?
REST、英語の正式名称はResource Representational State Transferで、リソースへのアクセス状態の変化をURLの変化で表現します。
リソース:リソース。リソースは、REST アーキテクチャまたはネットワーク処理全体の中核です。
表現: JSON、XML、JPEG などの何らかの形式の表現。
状態転送:状態変更。HTTPメソッドで実現します。
REST は、ネットワーク内のクライアントとサーバー間の対話形式を記述します。この言語では、URL を通じてどのリソースが必要か、HTTP メソッドを通じて何を実行したいか、HTTP ステータス コードを通じて結果がわかります。
例えば:
GET /tasks 获取所有任务
POST /tasks 创建新任务
GET /tasks/{
id} 通过任务id获取任务
PUT /tasks/{
id} 更新任务
DELETE /tasks/{
id} 删除任务
GET はリソースの取得を表し、POST はリソースの追加を表し、PUT はリソースの変更を表し、DELETE はリソースの削除を表します。
サーバーが提供するRESTful APIでは、URL内のリソースの指定には名詞のみが使用され、原則として動詞は使用されません。HTTP Status Code
サーバーのステータス情報を渡すために使用します。たとえば、最も一般的に使用される 200 は成功を意味し、500 はサーバー内部エラーを意味します。
RESTを使用する利点は何ですか?
まず、スタイルが統一され、さまざまな名前のコードが存在しなくなりますdelUser/deleteUser/removeUser
。
第二に、それはリソース指向であり、一目瞭然で説明不要です。
3 番目に、HTTP プロトコル自体のセマンティクスを最大限に活用する
最後に、良いものは共有する必要があります。私が長年コンピュータについて学んだ書籍を共有し、古典的なコンピュータ プログラミング書籍の倉庫にまとめました。C言語、C++、Java、Python、フロントエンド、データベース、書籍など合計300 冊以上あります。オペレーティングシステム、コンピュータネットワーク、データ構造、アルゴリズム、機械学習、プログラミングライフなどにスターを付けると、次回書籍を見つけて直接検索すると、倉庫が継続的に更新されます~