สำหรับเนื้อหา Spring Boot โดยวันนี้เราจะมาเริ่มจัดการเรื่อง view กัน
เราจะเริ่มเขียนคำสั่ง HTML กันครับ โดยเราจะเขียนคำสั่งนี้ลงไปใน .html file ผ่าน thymeleaf ซึ่งเป็น library theme engine ของฝั่ง Java ช่วยให้เราสามารถสร้าง dynamic HTML เช่น load ข้อมูลจาก database ขึ้นมาแสดงใน HTML page
มาเริ่มกันเลย
เปิด project spring-clinic
แก้ไข build.gradle เพิ่ม library thymeleaf และ nekohtml เข้าไปในส่วน dependencies configuration
build.gradle
group 'com.codesanook.springclinic'
version '1.0-SNAPSHOT'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.7.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'spring-boot'
sourceCompatibility = 1.7
repositories {
mavenCentral()
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-web:1.2.7.RELEASE")
compile("org.springframework.boot:spring-boot-starter-thymeleaf:1.2.7.RELEASE")
compile('net.sourceforge.nekohtml:nekohtml:1.9.22')
}
compile("org.springframework.boot:spring-boot-starter-thymeleaf:1.2.7.RELEASE") เพิ่ม library thymeleaf เข้าไปใน project เป็น view engine หลักที่ทำให้เราสร้าง dynamic HTML ได้
compile('net.sourceforge.nekohtml:nekohtml:1.9.22') เพิ่ม library nekohtml เข้าไป เพื่อช่วยให้ tag HTML บาง tag ที่ browser แสดงได้ถูกต้องแต่ความ strict ของ thymeleaf จะส่ง error ออกมาหากไม่มี lib ตัวนี้ช่วย มีประโยชน์มาก เมื่อนำ theme สำเร็จรูปมาใช้ แล้ว front end developer อาจจะใส่ tag บางอย่างที่เป็น HTML แบบเดิม ไม่ HTML 5 style tag 100%
**เสร็จแล้วอย่าลืม update gradle ที่ปุ่ม update gradle window กันด้วยนะครับ **
ให้เราเพิ่ม application.properties เข้าไปใน folder src/main/resources เพิ่มคำส่งต่อไปนี้เข้าไป
application.properties
spring.thymeleaf.mode=LEGACYHTML5
spring.thymeleaf.cache=false
application.properties เป็น file สำหรับเก็บ config ต่างๆ ของ spring application ครับ
template file ก็คือ file html ที่มีคำสั่งพิเศษของ Thymeleaf อยู่ด้วย
ให้เราสร้าง folder templates ใน folder src/main/resources/templates
จากนั้นให้เพิ่ม HTML file ชื่อว่า index.html ดังนี้
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<h1>
index page
</h1>
</body>
</html>
ส่งเกตว่า file index.html เป็นเพียง file HTML5 ธรรมดาเท่านั้นเอง
ข้อดีของ thymeleaf คือ design มาให้เราเปิดแบบ static ได้เลย ไม่ต้องผ่าน web server ก็ได้ ข้อดูสำหรับ design ครับ เขาสามารถเปิดด้วย browser แล้วดูผลลัพธ์ได้เลย แบบเปิด file ธรรมดาได้เลย
##เรียกใช้ template file ใน controller class
แก้ไข file HomeController.java เป็นดังนี้ครับ
package com.codesanook.springclinic;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@EnableAutoConfiguration
public class HomeController {
@RequestMapping("/")
String home() {
return "index";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(HomeController.class, args);
}
}
อธิบายคำสั่ง บรรทัดที่ 16 เรา return string index ออกไป นี่คือการ return ชื่อของ template ออกไปครับ ซึ่งก็คือ index.html นั่นเอง แต่เราไม่ต้องใส่ .html เข้าไป ใส่แค่ชื่อครับ
รูปแสดงโครงสร้างของ project ตอนนี้
ทดลอง run Spring boot ด้วยคำสั่ง bootRun ที่ gradle window กันเลย
ผลลัพธ์ที่ browser
บทความครั้งต่อไปจะ fancy ขึ้น เราจะทำให้ view ของเรา dynamic มากขึ้นครับ
ขอบคุณครับ
มีคำถามฝากไว้ได้เลยนะครับ