Like Share Discussion Bookmark Smile

J.J. Huang   2019-03-15   Spring Boot   瀏覽次數:次   DMCA.com Protection Status

SpringBoot - 第四章 | Web開發

在前面 第一章 - SpringBoot專案建立 中我們完成了一個簡單的RESTful Service,體驗到快速又簡單的開發特性。而在這邊我們要教學的是如何把處理的結果資料渲染到頁面上。

靜態資源

第三章 - SpringBoot目錄結構 中有特別提到靜態資源的目錄結構,因為我們在開發web的時候,大量使用到js、css、圖片等靜態資源。

預設配置

SpringBoot的預設的靜態文件目錄是:

  • /static
  • /public
  • /resources
  • /META-INF/resources

註:我們在src/main/resources/static下面放入一張圖片xxx.jpg,然後啟動專案,瀏覽 http://localhost:8080/xxx.jpg ,將會看到該圖片被正常開啟。

渲染頁面

在之前的範例中,我們通過@RestController來處理請求,這邊稍微講解一下:

  • @RestController 註解相當於 @ResponseBody + @Controller合在一起的作用。
  • 如只使用 @RestController註解Controller,則Controller中的方法無法返回web頁面,配置的視圖解析器InternalResourceViewResolver不起作用,返回的內容就是Return內的內容。
  • 如果需要返回到指定頁面,則需要用 @Controller配合視圖解析器InternalResourceViewResolver才行。

模板引擎

為了實現動態的html,SpringBoot是通過模版引擎進行頁面結果渲染的,官方提供預設配置的模版引擎主要為:

以下教學主要拿Thymeleaf、FreeMarker做教學,而官方已經不推薦使用JSP了,因網路上已經有需多JSP使用教學,這邊就不再贅述

Thymeleaf

  • Thymeleaf是一個適用於Web和獨立環境的伺服器端Java模板引擎。

  • Thymeleaf的主要目標是為你的開發工作流程帶來優雅的自然模板 - 可以在瀏覽器中正確顯示的HTML,也可以用作靜態原型,從而在開發團隊中實現更強大的協作。

  • 通過Spring Framework模組,與你喜歡的工具的大量集成,以及插入你自己的功能的能力,Thymeleaf是現代HTML5 JVM Web開發的理想選擇 - 儘管它可以做得更多。

官方範例:

Thymeleaf編寫的HTML模板仍然像HTML一樣工作,讓在你的應用程序中運行的實際模板繼續作為有用的設計工件。

Spring Boot中使用Thymeleaf,需要引入下面依賴,並在預設的模板路徑src/main/resources/templates下編寫模板文件。

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

使用教學:

  • 新建controllerpackage
1
com.jj.learning.springboot.chapter4.controller
  • 新建ThymeleafController.class
  • 新建模板文件thymeleaf.html
1
src/main/resources/templates/thymeleaf.html

如上頁面,直接打開html頁面展現Hello World!預設值,但是啟動程序後,瀏覽 http://localhost:8080/thymeleaf/mv?name=jjHuang 或者 http://localhost:8080/thymeleaf/map?name=jjHuang ,則是展示Controller中name 和 from的值,做到了不破壞HTML自身內容的資料邏輯分離。

Thymeleaf的預設參數配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 啟用緩存:建議生產開啟
spring.thymeleaf.cache=false
# 建議模版是否存在
spring.thymeleaf.check-template-location=true
# Content-Type 值
spring.thymeleaf.content-type=text/html
# 是否啟用
spring.thymeleaf.enabled=true
# 模版編碼
spring.thymeleaf.encoding=UTF-8
# 應該從解析中排除的視圖名稱列表(用逗號分隔)
spring.thymeleaf.excluded-view-names=
# 模版模式
spring.thymeleaf.mode=HTML5
# 模版存放路徑
spring.thymeleaf.prefix=classpath:/templates/
# 模版後綴
spring.thymeleaf.suffix=.html

Freemarker

  • Apache FreeMarker™是一個模板引擎:一個Java庫,用於根據模板和更改資料生成文本輸出(HTML網頁,電子郵件,配置文件,源代碼等)。模板是用FreeMarker模板語言(FTL)編寫的,這是一種簡單的專用語言(不像PHP這樣的完整編程語言)。通常,使用通用編程語言(如Java)來準備資料(發布資料庫查詢,進行業務計算)。然後,Apache FreeMarker使用模板顯示準備好的資料。在模板中,你將專注於如何呈現資料,而在模板之外,你將關注於要呈現的資料。

官方範例:

Spring Boot中使用Freemarker,需要引入下面依賴,並在預設的模板路徑src/main/resources/templates下編寫模板文件。

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

使用教學:

  • application.properties加入相關配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 緩存配置 開發階段應該配置為false 因為經常會改
spring.freemarker.cache=false
# 模版後綴名 默認為ftl
spring.freemarker.suffix=.html
# 文件編碼
spring.freemarker.charset=UTF-8
# 模版加載的目錄
spring.freemarker.template-loader-path=classpath:/templates/
# 配置
# locale 該選項指定該模板所用的國家/語言選項
# number_format 指定格式化輸出數字的格式:currency、
# boolean_format 指定兩個布爾值的語法格式,默認值是true,false
# date_format,time_format,datetime_format 定格式化輸出日期的格式
# time_zone 設置格式化輸出日期時所使用的時區
# 數字 千分位標識
spring.freemarker.settings.number_format=,##0.00
  • 新建FreemarkerController.class
  • 新建模板文件freemarker.html
1
src/main/resources/templates/freemarker.html

如上頁面,直接打開html頁面展現Hello World!名稱:${name},来自:${from},但是啟動程序後,瀏覽 http://localhost:8080/freemarker/mv?name=jjHuang 或者 http://localhost:8080/freemarker/map?name=jjHuang