spring boot初探(三)Thymeleaf篇

Web開發是我們平時開發中至關重要的,這裏就來介紹一下Spring Boot對Web開發的支持。

正文

Spring Boot提供了spring-boot-starter-web爲Web開發予以支持,spring-boot-starter-web爲我們提供了嵌入的Tomcat以及Spring MVC的依賴。

項目結構推薦

一個好的項目結構會讓你開發少一些問題,特別是Spring Boot中啓動類要放在root package下面,我的web工程項目結構如下:

Spring Boot乾貨系列:(四)Thymeleaf篇

  • root package結構:com.dudu

  • 應用啓動類Application.java置於root package下,這樣使用@ComponentScan註解的時候默認就掃描當前所在類的package

  • 實體(Entity)置於com.dudu.domain包下

  • 邏輯層(Service)置於com.dudu.service包下

  • controller層(web)置於com.dudu.controller層包下

  • static可以用來存放靜態資源

  • templates用來存放默認的模板配置路徑

Spring Web MVC框架介紹

Spring Web MVC框架(通常簡稱爲”Spring MVC”)是一個富”模型,視圖,控制器”的web框架。

Spring MVC允許你創建特定的@Controller或@RestController beans來處理傳入的HTTP請求。

示例:

Spring Boot乾貨系列:(四)Thymeleaf篇

Spring Boot爲Spring MVC提供適用於多數應用的自動配置功能。在Spring默認基礎上,自動配置添加了以下特性:Spring MVC自動配置

  1. 引入ContentNegotiatingViewResolver和BeanNameViewResolver beans。

  2. 對靜態資源的支持,包括對WebJars的支持。

  3. 自動註冊Converter,GenericConverter,Formatter beans。

  4. 對HttpMessageConverters的支持。

  5. 自動註冊MessageCodeResolver。

  6. 對靜態index.html的支持。

  7. 對自定義Favicon的支持。

如果想全面控制Spring MVC,你可以添加自己的@Configuration,並使用@EnableWebMvc對其註解。如果想保留Spring Boot MVC的特性,並只是添加其他的MVC配置(攔截器,formatters,視圖控制器等),你可以添加自己的WebMvcConfigurerAdapter類型的@Bean(不使用@EnableWebMvc註解),具體攔截器等配置後續文章會解析。

靜態文件

默認情況下,Spring Boot從classpath下一個叫/static(/public,/resources或/META-INF/resources)的文件夾或從ServletContext根目錄提供靜態內容。這使用了Spring MVC的ResourceHttpRequestHandler,所以你可以通過添加自己的WebMvcConfigurerAdapter並覆寫addResourceHandlers方法來改變這個行爲(加載靜態文件)。

在一個單獨的web應用中,容器默認的servlet是開啓的,如果Spring決定不處理某些請求,默認的servlet作爲一個回退(降級)將從ServletContext根目錄加載內容。大多數時候,這不會發生(除非你修改默認的MVC配置),因爲Spring總能夠通過DispatcherServlet處理請求。

此外,上述標準的靜態資源位置有個例外情況是Webjars內容。任何在/webjars/**路徑下的資源都將從jar文件中提供,只要它們以Webjars的格式打包。

:如果你的應用將被打包成jar,那就不要使用src/main/webapp文件夾。儘管該文件夾是一個共同的標準,但它僅在打包成war的情況下起作用,並且如果產生一個jar,多數構建工具都會靜悄悄的忽略它

模板引擎

Spring Boot支持多種模版引擎包括:

  • FreeMarker

  • Groovy

  • Thymeleaf(官方推薦)

  • Mustache

JSP技術Spring Boot官方是不推薦的,原因有三:

  1. tomcat只支持war的打包方式,不支持可執行的jar。

  2. Jetty 嵌套的容器不支持jsp

  3. Undertow

  4. 創建自定義error.jsp頁面不會覆蓋錯誤處理的默認視圖,而應該使用自定義錯誤頁面

當你使用上述模板引擎中的任何一個,它們默認的模板配置路徑爲:

src/main/resources/templates

。當然也可以修改這個路徑,具體如何修改,可在後續各模板引擎的配置屬性中查詢並修改。

Thymeleaf模板引擎

Thymeleaf是一款用於渲染XML/XHTML/HTML5內容的模板引擎。類似JSP,Velocity,FreeMaker等,它也可以輕易的與Spring MVC等Web框架進行集成作爲Web應用的模板引擎。與其它模板引擎相比,Thymeleaf最大的特點是能夠直接在瀏覽器中打開並正確顯示模板頁面,而不需要啓動整個Web應用。它的功能特性如下:

  • Spring MVC中@Controller中的方法可以直接返回模板名稱,接下來Thymeleaf模板引擎會自動進行渲染

  • 模板中的表達式支持Spring表達式語言(Spring EL)

  • 表單支持,併兼容Spring MVC的數據綁定與驗證機制

  • 國際化支持

Spring官方也推薦使用Thymeleaf,所以本篇代碼整合就使用Thymeleaf來整合。

引入依賴

Spring Boot乾貨系列:(四)Thymeleaf篇請點擊此處輸入圖片描述
Spring Boot乾貨系列:(四)Thymeleaf篇

如圖所示,spring-boot-starter-thymeleaf會自動包含spring-boot-starter-web,所以我們就不需要單獨引入web依賴了。

編寫controller

Spring Boot乾貨系列:(四)Thymeleaf篇

編寫html

引入依賴後就在默認的模板路徑

src/main/resources/templates

下編寫模板文件即可完成。這裏我們新建一個index.html:

Spring Boot乾貨系列:(四)Thymeleaf篇

:通過xmlns:th=”http://www.thymeleaf.org“ 命令空間,將靜態頁面轉換爲動態的視圖,需要進行動態處理的元素將使用“th:”前綴。

ok,代碼都寫好了,讓我們看對比下直接打開index.html和啓動工程後訪問http://localhost:8080/learn 看到的效果,Thymeleaf做到了不破壞HTML自身內容的數據邏輯分離。

Spring Boot乾貨系列:(四)Thymeleaf篇

Thymeleaf的默認參數配置

在application.properties中可以配置thymeleaf模板解析器屬性

Spring Boot乾貨系列:(四)Thymeleaf篇

整合一個bootstrap框架給大家

Spring Boot乾貨系列:(四)Thymeleaf篇

大家可以直接打開vanilla-cream-css下面的index.html來查看靜態效果,如下:

Spring Boot乾貨系列:(四)Thymeleaf篇

動態效果的話可以查看template.html

這裏把上面的資源例子重新用bootstrap寫了下,效果不錯哦,如下:

Spring Boot乾貨系列:(四)Thymeleaf篇

總結

本章到此就結束了,下一篇準備介紹下如何整合jsp,畢竟現在絕大多數的企業還是用jsp來作爲模板引擎的。

源碼下載

( ̄︶ ̄)↗[相關示例完整代碼]

https://github.com/tengj/SpringBootDemo/tree/master


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章