[spring]Web開発の3つの方式(静的コンテンツ、MVC、API)



この記事は、キム・ヨンハンの「コードで学ぶSpringBoot、WebMVC、DBアクセス技術」コースの一部を学び、まとめたものだ.

3つのスプリングを使用したWeb動作


スプリングを使用してWebページをブラウザに送信する方法は、大きく3つあります.
1.静的コンテンツ方式
2.MVCとテンプレートエンジンの使用
3.API方式

1.静的コンテンツ方式

@GetMapping("hello")
public String hello(Model model) {
    model.addAttribute("data", "hello!!");
    return "hello";
}

1-1. 静的コンテンツ駆動の動作原理



画像ソース:金英漢-学習コードのSpringBoot、Web MVC、DBアクセス技術コース
静的コンテンツ方式は、ファイルをブラウザに送信し、何の処理も行わない方式である.公式文書を見ると、どのファイルを転送するかがわかります.index.htmlを介してcontrollerviewResolverに移動すると、画面に対応するファイルが戻り値で検索されます.Spring BootテンプレートエンジンはviewNameマッピングをサポートするため、ファイル名が一致するとすぐにブラウザに渡されます.
以下のspring公式ファイルの抜粋内容を参照してください.
7.1.6. Welcome Page
Spring Boot supports both static and templated welcome pages. It first looks for an index.html file in the configured static content locations. If one is not found, it then looks for an indext template. If either is found, it is automatically used as the welcome page of the application.
ソース:https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-welcome-page

2.MVCとテンプレートエンジンの使用


MVCとは?Model, View, Controller
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
    model.addAttribute("name", name);
    return "hello-template";
}
コントローラで使用される主な方法のコメント@GetMapping:Controllerでurlを照合します.@RequestParam():パラメータの値を取得するために使用されます.
public String helloMvc(@RequestParam("name") String name) 
前に示したように、@RequestParam()Controllerのパラメータがあれば、リクエストurlの後に?name=コントローラは、文字列がパラメータとしてのみマッピングされます.

2-1. MVC方式の動作原理



画像ソース:金英漢-学習コードのSpringBoot、Web MVC、DBアクセス技術コース
  • Controller:urlリクエストを受信すると、内蔵のTomcatサーバは対応するControllerを見つけます.
  • Model:Controller urlと一致するメソッドを検索して実行します.必要なデータを含むmodelをreturnを使用して渡します.
  • View:viewResolverテンプレートエンジンを使用して、戻り名に一致するViewファイルを検索し、ブラウザに表示します.
  • 3.API方式


    静的コンテンツ方式でなければ、2種類(MVC/API)を覚えるだけです.
    MVCに個別のビュー領域が存在し、htmlファイルを操作してブラウザにデータを送信する方式である場合、APIはブラウザにのみデータを送信し、画面の作成はブラウザが担当する方式である.
    @GetMapping("hello-mvc")
    @ResponseBody
    public String helloString(@RequestParam("name") String name) {
        return "hello" + name;
    }
    APIキーコメント@ResponseBody:htmlではなくhttpの通信プロトコルがヘッダとボリュームに分かれており、これらのコンテンツを直接ボリュームに置くことを意味します.返されたデータは、クライアントに直接渡されます.Viewは存在しません.データはそのまま転送されます.
    オブジェクトを送信する必要がある場合は、どうすればいいですか?
    api方式では、戻りタイプでオブジェクトを送信する場合、デフォルトではjsonオブジェクトがブラウザに送信されます.jsonって何?key:value構造からなる文字列データフォーマット.
    @GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name) {
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    
    }
    
    static class Hello {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }

    3-1. API操作原理


    APIは文字コンテンツを直接HTTPのbody領域に返す.別途画面を作成していないため、viewResolverの代わりにhttpMessageConverterが操作する.この機能はスプリングガイドによって自動的に提供されます.戻りタイプが文字列の場合、httpMessageConverterオブジェクトが使用され、戻りタイプがオブジェクトの場合、StringHttpMessageConverterが使用されます.MappingJackson2HttpMessageConverterは、スプリングがオブジェクトをjacksonに変換するために使用されるデバッガライブラリである.
    クライアントのHTTP受信ヘッダに特定の戻りタイプが指定されている場合、スプリングはコントローラの戻りタイプ情報を参照して自動的に適切なタイプを決定する.次に、対応するタイプのjsonを選択し、変換後にデータを転送する.