2022年04月19日TIL


Spring MVC



DispatcherServlet

  • Front Controller Pattern
  • DispatcherServlet = Front Controller
  • コントローラは、1つの位置で繰り返し処理する必要があることを処理する.
  • リクエストを適切なコントローラに委任します.
  • 異常処理
  • プロセスの処理

  • DispatcherServicelet HTTP要求
  • を受信
  • DispatcherServiceletは、HTTP要求をコントローラ
  • に委任する.
  • Controllerdml作成登録情報
  • Contorlerは結果を返します:モデルとビュー
  • DispatcherServiceletのビューを呼び出し、モデル
  • を参照します.
  • は、HTTP応答
  • を返す.

    DispatcherServiceletからコントローラへのリクエストのマッピング

  • Controller = Handler
  • Handler Mapping
  • ポリシー
  • は、要求をどのコントローラに委任するかを決定するために使用される
  • Handler Adapter
  • マッピング対象コントローラ処理要求に送信される.
  • は、DispatcherServiceletが他の方法およびフォーマットのコントローラを呼び出すことを可能にする.
  • View Resolver
  • コントローラからビューを返すと、対応するビューが見つかり、顧客に返されます.

  • 静的リソースの処理


    resourceHandler


    resourceHandlerはリクエストをdefault servletに委任し、default servletはリソースを提供します.

    @EnableWebMvc


    Spring MVCの登録に必要なbean.

    resourceChain()

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**")
                .addResourceLocations("/resources/")
                .setCachePeriod(60) 
                .resourceChain(true)
                .addResolver(new EncodedResourceResolver()); 
    }
  • setCachePeriod()キャッシュ設定
  • resourceChain(true)リクエストに応じてリソースをresourceResolverにマッピングします(デフォルトの解析器はpathResolverですが、chainを使用すると優先度が低下します)
  • .resourceChain(true).addResolver(new EncodedResourceResolver())gzipファイルを優先的に参照します.ファイルが提供されている場合は、ファイルが一般ファイルを提供していません.
  • Thymeleaf


    Controller

    @GetMapping("/customers")
    public String findCustomers(Model model) {
        var allCustomers = customerService.getAllCustomers();
        model.addAttribute("serverTime", LocalDateTime.now());
        model.addAttribute("customers", allCustomers);
        return "views/customers";
    }

    変数式:${変数}

    <p th:text="'The time on the server is' + ${serverTime}">----</p>

    リンク式:@{リンク}

    <img th:src="@{/resources/bg.png}" class="img-fluid">

    変数式の選択:*{~}

    <tr th:each="customer: ${customers}" th:object="${customer}" >
        <td th:text="${customer.customerId}"></td>
        <td th:text="*{name}"></td>
        <td th:text="*{email}"></td>
        <td th:text="*{createdAt}"></td>
        <td th:text="*{lastLoginAt}"></td>
    </tr>

    その他のクリア)


    servlet container

  • Web container
  • TOMCAT
  • 管理サーバ
  • IOC Container

  • Spring Container
  • beanファクトリ(beanを読み取り、beanを作成)
  • ApplicationContext

  • BeanFactory+アペンド
  • IOC Container+付加機能(リソースロード)
  • ApplicationContext extends BeanFactory