あずきみるくのあずきはニガテ - for Engineer

ひよっこプログラマがやってみたことやハマっちゃったことなど、備忘録的な感じで書いていきます。

SpringBootをEclipse、Gradleで使ってみる - (5)Thymeleafってなんじゃらほい

Thymeleafとは・・・

「Thymeleaf」は、XHTMLHTML5、そしてXMLをサポートしたJavaアプリケーション向けののテンプレートエンジンである。テンプレートエンジンとは、テンプレートと呼ばれる雛形と、個別に用意された入力データを合成して、その結果を出力するソフトウェアの総称。見た目を記述するコードと、ロジック/データを記述するコードが分離できることや、共通部分のコード量を減らすことができるなどといったメリットがある。

出典:攻略! ツール・ド・プログラミング (57) XHTML/XML/HTML5をサポートしたテンプレートエンジン「Thymeleaf」 | マイナビニュース

らしいです。

なんか、とりあえず、便利なのかな?

テンプレート?

もうログイン画面とか当たり前にありそうなのを
テンプレートとして用意してくれてるってこと?!



SpringBootシリーズもここまで来たら迷走を極めてきました。


前回、中途半端はJSPバージョンをやったのですが、
いろいろ調べていたら、やれ、JSPはレガシー」やら、
「webappフォルダまだ作ってるなんてダサい」やら言われてます。

個人的には好きなのになー、JSP



で、迷走した挙句、今度はThymeleafに流れ着いたわけです。


ほんじゃま、早速HelloWorldでも作ってみますか。

1)build.gradleの編集

もう、お決まりの流れです。
とりあえず、Thymeleafを使うための記述を追記します。

apply plugin: 'java'
// eclipse for web
apply plugin: 'eclipse-wtp'



ext {
  // test dependencies
  junitVersion = "4.11"

  // loggers
  slf4jVersion = "1.7.9"
  logbackVersion = "1.1.2"

  // spring framework
  springVersion = "4.0.6.RELEASE"

  // spring boot plugin
  springBootVersion = "1.2.1.RELEASE"

  // mySQL connecterVersion
  mysqlVersion = '5.1.34'

  // tomcat
  tomcatVersion = "8.0.15"
  
  //Tthymeleaf 
  thymeleafVersion = "2.1.4.RELEASE" <--------------------------ここ
  
  // other
  guavaVersion = "18.0"
}

ext.defaultEncoding = 'UTF-8'
ext.artifactId = 'SpringBoot'
version = '1.0'

// Java Use Version
sourceCompatibility = targetCompatibility = 1.8
tasks.withType(AbstractCompile) each {
  it.options.encoding = ext.defaultEncoding
}

repositories {
  mavenCentral()
}

dependencies {
  // loggers
  compile "org.slf4j:slf4j-api:$slf4jVersion"
  compile "org.slf4j:jul-to-slf4j:$slf4jVersion"
  compile "ch.qos.logback:logback-classic:$logbackVersion"

  //spring-boot
  compile "org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion"
  compile "org.springframework.boot:spring-boot-starter-web:$springBootVersion"
  compile  "org.springframework.boot:spring-boot-starter-test:$springBootVersion"

  // tomcat-for read JSP
  compile "org.apache.tomcat.embed:tomcat-embed-jasper:$tomcatVersion"
  
  // Thymeleaf
  compile "org.thymeleaf:thymeleaf-spring4:$thymeleafVersion"
  // ↑-------------------------------------------------------ここ

}

くどいようですが、build.gradleを変更したら、リフレッシュ!
忘れないでくださいね!

リフレッシュしたら、いっぱい落としてきてくれましたw
(これでまた重くなるんだろうな~・・・)

2)hello.htmlの作成

場所は
[プロジェクト名]/src/main/resources/templates/hello.html

ちなみに、階層はこんな感じです。
f:id:azuki-milk-lush:20150130161608j:plain

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
</head>
<body>
    <!-- ここが、Themeleaf使ってるとこです。表示要素ここしかないけどw -->
	<p th:text="'Hello, ' + ${name} + '!'" />
</body>
</html>

一番上の<html xmlns:th="http://www.thymeleaf.org">で
Themeleaf使うよ、って宣言してて、Pタグの中の [th:text]っていうのが
Themeleafのテキストタグ、って意味だと理解しております。

他にも便利なタグはあるんだろうけど、とりあえず簡単にこれで。

3)SampleController.java の編集

package sample.hello;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;


@Controller
@EnableAutoConfiguration
public class SampleController {

	 @RequestMapping("/hellotl")
	 public String hellotl(Model model){
		 model.addAttribute("name", "Thymeleaf");
		 return "hello";
	 }
}

こんな感じです。



4)いらないもの削除

このシリーズを最初からやってくださってる方、限定です。
以下のファイルは削除しました。

 ・apprication.properties
 ・src/main/webapp以下すべて

(つまり、JSPの名残ですね・・・)

5)実行

今回、あずきは「@RequestMapping」に「/hellotl」で指定しているので、
http://localhost:8080/hellotl」で実行します。

f:id:azuki-milk-lush:20150130163358j:plain


立派に表示されました。



でも一つ疑問。

JSPの時は「prefix」「safix」って設定したから、
それで表示するのを紐づけてる、っていう理解があったんだけど、
今回は"hello"をreturnしただけで、なんでhello.htmlを探せたのか。
・・・勉強不足です。

謎はそのうち解決します。




そんなわけでまとめ。

・・・あーあ、JSPなしで出ちゃった・・・
しかも簡単やった・・・

これを見たら、やっぱJSPってレガシーになっちゃうんだろうな~。。。

<参考>
Java8 + Spring4 + Spring Boot + Thymeleaf でJavaのWebアプリ - ことばアルバム