03 Viewプリファレンス


静的ページ


対応するコードを作成し、localhost:9090に次の静的ページ(welcomePage)を表示します.
hello-spring/src/main/resources/static/index.html
<!DOCTYPE HTML>
<html>
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=Utf-8" />
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>

Spring BootはWelcome Page機能を提供する
https://docs.spring.io/spring-boot/docs/current/reference/html/web.html#web.servlet.spring-mvc.welcome-page

ダイナミックページ


Spring Bootは4つのTemplate Engineを提供します.
  • FreeMarker
  • Groovy
  • Thymeleaf
  • Mustache
  • https://docs.spring.io/spring-boot/docs/current/reference/html/web.html#web.servlet.spring-mvc.template-engines
    ここで、thymeleafという名前のTemplate Engineを使用してダイナミックページを作成します.
    まず、コントローラに次のjavaクラスを作成します.
    hello-spring/src/main/java/hello/hellospring/controller/HelloController.java
    package hello.hellospring.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    
    @Controller
    public class HelloController {
    
        @GetMapping("hello")
        public String hello(Model model) {
            model.addAttribute("data", "hello!!");
            return "hello";
        }
    }
    このメソッドは、Webアプリケーションが/helloにリクエストを送信した場合に実行されます.MVCでは、モデルに対応するモデルオブジェクトにhelloという文字列をaddAttributeとして渡し、helloという文字列を返します.
    これで、コントローラは入力したデータを受信し、次のような表示テンプレートを作成します.
    hello-spring/src/main/resources/templates/hello.html
    <!DOCTYPE HTML>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>Hello</title>
        <meta http-equiv="Content-Type" content="text/html; charset=Utf-8" />
    </head>
    <body>
    <p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
    <a></a>
    </body>
    </html>
    xmlのモードでtymeleaf.orgにパスを決定したらthymeleafを使用できます.${data}の位置はHelloControllerのhelloメソッドの「hello!!」値上げします.

    動作原理



  • localhost:8080/hello,要求時のみ内蔵Tomcatから/helloを受信して転送する.

  • Get方式でURLに一致するメソッドが実行され、このメソッドで必要なモデルオブジェクトが作成され、それが挿入されます.

  • メソッドは、helloという名前の値をモデルオブジェクトに配置し、helloを返します.

  • ViewResolverは、戻り値templates/helloに従います.htmlを参照してレンダリングします.