[MVC1] 5. スプリングMVC構造について


前の位置



既存のMVCモードの共通処理問題とコード重複を解決するためのフレームワークを自ら設計した.フロントエンドコントローラの導入は汎用処理を可能にした.ビューアZooverとMyViewの導入により、コントローラはビューの相対パスのみを返すことができ、アダプタモードの導入によりModelViewの返却方式と文字列変換方式を同時に処理することができる.
バネMVCは、上記構造と非常に類似した構造を有している.ではSpring MVCはどのように構成されているのでしょうか.

ばねMVCの全体構造



  • スプリングにはDispacherServiceletというフロントエンドコントローラがあります.Spring BootはDispacherServiceletを自動的にSubetとして登録し、URI"/"にマッピングします.

  • DispatcherサーブレットはHandlerマッピングを検索してURIにマッピングされたコントローラを検索し、アダプタを検索してコントローラを処理するためのアダプタを検索します.

  • Handlerマッピングとは、URIを使用してHandlerを検索することです.@requestmappingで検索したり、spring空の名前で検索したりする方法があります.

  • HandlerアダプタはURIとマッピングHandlerを扱うアダプタである.音声方式の処理アダプタ、インターフェース方式の処理アダプタなどがあります.

  • ビューアZooverは、コントローラが入力した相対パスを絶対パスに変換します.デフォルトでは、接頭辞/templates接尾辞にあります.htmlを追加します.その他のルート.jspで転送するとアプリプレフィックスと接尾辞をpropertiesに直接追加する必要があります.
  • 仮定:@ResquestMappingAnotationを使用してHandlerとURIをマッピングします.
    @Controller
    public class Example {
    	@RequestMapping("/ex1")
        public String exController() {
        	return "view1";
        }
    }

  • クライアントはURIを介して要求する.

  • DispatcherサーブレットHandlerマッピングを実行してURIのHandlerを検索します.@まずrequestmappingで登録されているハンドルを検索し、URIで登録されているスプリング空の名前のハンドルを検索します.上記の場合、@RequestMappingにマッピングされたハンドルが検索されます.

  • Dispatcher Seo Bridget Handlerアダプタリストで見つかったHandlerを処理するアダプタを検索します.@まずRequestMappingハンドルを処理するアダプタを見つけ、次にコントローラインタフェースを実装したハンドルを処理するアダプタを見つけます.上記の場合、@RequestMappingに設定されたHandlerを処理するためにアダプタを探します.

  • Dispatcherボードはアダプタのhandleメソッドを呼び出します.

  • アダプタはHandlerを呼び出し、実行結果を含むモデルとビューの相対パスを含むModelAndViewオブジェクトを受信します.プロセッサが相対パスのみを返す場合、アダプタはモデルを作成し、プロセッサが使用できるようにパラメータに渡します.

  • アダプタはDispatcherをModelAndViewオブジェクトをBriteに返します.

  • Dispatcher Seo Britは相対パスをViewleZooverに渡します.

  • ビューアZooverは、絶対パスをViewオブジェクトに返します.

  • モデルをViewオブジェクトに渡してメソッドを実行すると、モデルはテンプレートエンジンに転送されます.

  • テンプレートエンジンは、モデルを使用して動的HTMLを生成し、ブラウザに出力します.
  • 1.ハンドラーマッピングを実行してURIマッピングのハンドラーを検索する
    2.Handlerアダプタのリストから、Handlerを処理するアダプタを見つけます.
    3.Handlerアダプタは、ModelAndViewを受信するためにHandlerを実行します.
    4.相対パスをViewResolverに渡し、絶対パスを含むViewオブジェクトを取得します.
    5.Viewオブジェクトを組み込みメソッドとしてモデリングし、順方向操作を実行します.

    複雑なアダプタモードはなぜですか?


    Dispatcher Seo Britは共同処理のためです.
    ビュー左輪ピストルは絶対パスになり、ビューパスが重複しないようにします.
    ビュークラスは、ビューへの転送の一部が重複しないようにします.
    以上の機能の導入理由は肯定的である.でもアダプタモードは?アダプタモードは、異なる処理方法に対して異なる処理方法のアダプタをそれぞれ作成することで柔軟性を保証します.スプリングでは、アダプタモードにどのような柔軟性が必要ですか?

    レガシーコントローラ

    @Component("/spring/ex1")
    	public class OldController implements Controller {
    	@Override
    	public ModelAndView beanNameMappingController(HttpServletRequest request,
    		HttpServletResponse response) throws Exception {
    		System.out.println("OldController.handleRequest");
    		return null;
    	}
    }
    スプリング空の名前を使用してURLを登録し、コントローラとのマッピングを実行します.
    コントローラインタフェースでコントローラであることも教えてくれます.

    最近のコントローラ

    @Controller
    public class ExampleClass1 {
      @RequestMapping("/spring/ex1")
      public String requestMappingController() {
          return "/view1";
      }
    }
    @RequestMappingを使用してURLとコントローラをマッピングします.
    @RequestMappingに付属しているのはコントローラです.

    古いものと新しいものを同時に処理するなら?


    現在では@RequestMappingがほとんど使用されていますが、URLを空の名前でマッピングしたり、Controllerインタフェースを実装したりする古いコントローラも存在する可能性があります.
    両方の場合を処理するために、スプリングはアダプタモードを導入した.ただし、より一般的な@RequestMappingメソッドは、マッピングとアダプタナビゲーションの両方に優先度があります.

    URLへのアクセスを要求すると、Dispatcher ServiceletはそのURLにマッピングされたコントローラを検索します.まずrequestmappingHandlerMappingを実行し、@requestParam方式でマッピングされたコントローラを検索し、次にBenNameUrlHandlerMappingを実行し、スプリング空の名前でマッピングされたコントローラを検索します.

    上の結果ハンドル(コントローラ)が見つかったはずです.対応するハンドルを処理(実行)できるアダプタを見つける必要があるため、アダプタのリストを巡って適切なアダプタを検索できます.この場合、ノイズベースの処理アダプタは依然として優先されている.
    スプリングは、さまざまなマッピング方式のハンドル、さまざまなハンドルの実装を同時に処理するためにアダプタモードを反映します.現在,マッピングもHandlerもシミュレーション方式が主流である.しかし、多形性に設計されているため、新しく登場した方式が主流になっても拡張しやすい.
    この記事では、キム・ヨンハンの「Spring MVC 1編−バックエンドWeb開発のキーテクノロジー」コースの内容と理解をまとめた.
    https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard