ControllerとThymeleafの作成

前置き

少し前に勉強し始めたJavaに関するメモです。

本日のお題はControllerとThymeleafです。

フレームワークとしては、Spring Bootを使用しています。

概略〜Thymeleafとは

Controllerは他の言語でもよく出てきますがThymeleafという単語は自分にとっても初めてだったので念の為。

Thymeleafは、Spring Bootで用いられるテンプレートエンジンですね。

Railsでいうerb, Laravelならbladeです。

これらとの違いは、拡張子がなんの変哲もない.htmlになるということですね。

その代わりに、htmlタグに属性を付与してThymeleafであることを明示します(後述)。

詳細〜Thymeleafについて

Thymeleafファイルの配置

Thymeleafファイルは、以下の箇所に配置します。

src/main/resources/templates(templatesディレクトリまではデフォルトで用意されています。)

このtemplatesディレクトリの中に、好きなファイル名でThymeleafファイルを作成します。

今回は、Hello Worldを表示するための"hello.html"を作成します。

f:id:keishiprogramming:20210930164935p:plain

Thymeleaf内の記述

中身の記述についてですが、通常のhtmlファイルと変わるところは2点あります。

1点目は、htmlタグの書き方、2点目は、Javaのコードの埋め込み方です。

 

まず1点目のhtmlタグの書き方ですが、以下のように記述します。

これは、このhtmlファイルをThymeleafとして利用できるようにするためのものですね。

<html xmlns:th="http//www.thymeleaf.org">

 

次に、Javaのコードの埋め込み方についてです。

他のテンプレートエンジン同様に、ThymeleafでもJavaのコードを埋め込むための方法が用意されています。

<p th:text=${ message }></p>

他にもいくつか方法がありますが、基本形はこのやり方になります。

Controllerについて

Thymeleafが終わったので、次はControllerを見ていきます。

 

ファイルの配置

今回はHelloControllerを作成するので、まずhelloディレクトリとその中にHelloController.javaを作成します。

そして、それらをsrc/main/java/com/example/xxxディレクトリの中に移動します(xxxにはプロジェクト名が入ります)。

 

ファイル内の記述

次に、HelloControllerファイルに以下のように記述します。

package com.example.xxx.hello;

// comディレクトリからhelloディレクトリまでのパスを明記

import org.springframework.stereotype.Controller;

// Controllerアノテーション(後述)を利用するための記述

import org.springframework.bind.annotation.GetMapping;

// GetMapping アノテーション(同じく後述)を利用するための記述

 

@Controller

public class HelloController{
   

    @GetMapping("/hello")

    public String getHello (){
        return "hello";

    }

}

 

解説

  • @Controller
    コントローラアノテーションと呼ばれます。
    この後に定義されたクラスはコントローラとして扱われます。
  • @GetMapping("/hello")
    GetMappingアノテーションと呼ばれます。
    他のフレームワークでいうところのルーティングの役割をするものです。
    localhost:8080/helloにgetメソッドでアクセスした場合には、このアノテーションの後に定義されているアクションが呼び出されます。
  • public String getHello(){ ~ }
    HelloControllerクラスのgetHelloアクションを定義しています。
    Thymleafファイルは全て文字列の扱いなので、関数とともに宣言する戻り値の型はStringになります。

  • return "hello";
    アクションが呼び出された際に返却するThymeleafファイルを、templatesディレクトリからの相対パスで表示します。
    上記の記述で、hello.htmlが表示されます。