一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java之SpringBoot-Thymeleaf詳情

Java之SpringBoot-Thymeleaf詳情

2022-01-13 10:36CoLoo Java教程

聊Thymeleaf,需要知道為什么到了SpringBoot中就不用JSP了?這跟SpringBoot打包方式有點關系,SpringBoot項目打包是jar包,下面文章小編就對此做一個詳細介紹,需要的朋友可以參考一下

前言:

Thymeleaf,需要知道為什么到了SpringBoot中就不用JSP了?這跟SpringBoot打包方式有點關系,SpringBoot項目打包是jar包,我們就先簡單來了解下這個war包

war包代表JavaWeb應用程序,jar包是類的歸檔文件。war包不僅僅可以包含類的歸檔文件,它還可以包含 Servlet、HTML頁面、Java類、圖像文件,以及組成Web應用程序的其他資源。

JAR(Java Archive,Java 歸檔文件)是與平臺無關的文件格式,它允許將許多文件組合成一個壓縮文件。JAR 文件格式以流行的 ZIP 文件格式為基礎,所以可以直接將jar包后綴改成zip再進行解壓即可得到壓縮前的文件。與 ZIP 文件不同的是,JAR 文件不僅用于壓縮和發布,而且還用于部署和封裝庫、組件和插件程序,并可被像編譯器和 JVM 這樣的工具直接使用。包括我們常用的工具以及SpringBoot項目都是jar包。

war是一個可以直接運行的web模塊,通常用于網站,打成包部署到容器中。比如我們之前SSM寫的web程序可以直接將war包部署到tomcatwebapps目錄下,啟動tomcat后會自動解壓war包,就相當于發布了這個web應用程序。

 

1、About Thymeleaf

ThymeleafSpringBoot中的一個模版引擎,個人認為有點類似于Python中的Jinja2,負責渲染前端頁面。

之前寫JavaWeb和SSM的時候,前端頁面可能會用JSP寫,但是因為之前項目都是war包部署,而SpringBoot都是jar包且內嵌tomcat,所以是不支持解析jsp文件的。但是如果是編寫純靜態的html就很不方便,那么這時候就需要一個模版引擎類似于Jinja2可以通過表達式幫我們把動態的變量渲染到前端頁面,我們只需要寫一個template即可。這也就是到了SpringBoot為什么官方推薦要使用Thymeleaf處理前端頁面了。

 

2、Hello Thymeleaf

簡單來個demo看一下Thymeleaf效果

Pom.xml中引入依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

Java之SpringBoot-Thymeleaf詳情

Resources/templates/index.html

<!doctype html>

<!--注意:引入thymeleaf的名稱空間-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div th:text="${msg}"></div>
</body>
</html>

Controller

這里return "index";Thymeleaf會在templats目錄下尋找index.html

@Controller
public class IndexController {

    @RequestMapping("/index")
  public String test1(Model model){
      //存入數據
      model.addAttribute("msg","Hello,Thymeleaf");
       //classpath:/templates/index.html
      return "index";
 }
}

Java之SpringBoot-Thymeleaf詳情

也可以參考Thymeleaf的自動配置類。

Java之SpringBoot-Thymeleaf詳情

這里的注解需要使用@Controller,不能使用@RestController注解

  1. 如果只是使用@RestController注解Controller,則Controller中的方法無法返回jsp頁面,或者html,配置的視圖解析器 InternalResourceViewResolver不起作用,返回的內容就是Return 里的內容
  2. 如果需要返回到指定頁面,則需要用 @Controller配合視圖解析器InternalResourceViewResolver才行。如果需要返回JSON,XML或自定義mediaType內容到頁面,則需要在對應的方法上加上@ResponseBody注解。

關于@Controller@RestController

  • @RestController注解是@Controller@ResponseBody的合集,表示這是個控制器 bean,并且是將函數的返回值直 接填入 HTTP 響應體中,是 REST 風格的控制器。
  • 單獨使用 @Controller 不加 @ResponseBody的話一般使用在要返回一個視圖的情況,這種情況屬于比較傳統的 Spring MVC 的應用,對應于前后端不分離的情況。@Controller +@ResponseBody 返回 JSON 或 XML 形式數據

 

3、Thymeleaf 表達式

 

3.1配置文件聲明

spring:
  thymeleaf:
    cache: false # 緩存關閉,不然我們改變頁面之后可能不能及時看到更改的內容,默認是true。
    prefix: classpath:/templates/ #默認掃描的目錄去尋找我們return時寫的文件名,即模版文件所在位置
    encoding: UTF-8 #編碼
    suffix: .html #后綴
    mode: HTML 

 

3.2 常用表達式

 

3.2.1 0x01 ${} 變量表達式

從web作用域里面取到對應的值,作用域包括 requestsessionapplication

主要需要注意在template中利用獲取 requestsessionapplication 的代碼是不一樣的

requset: ${ago.id}
Session: ${session.agiao.id}
ServletContext: ${application.abc.id}


也可以通過如下形式獲取

<span th:text="${#request.getRequestURL()}"></span><br/>
<span th:text="${#session.getMaxInactiveInterval()}"></span><br/>
<span th:text="${#servletContext.getServerInfo()}"></span>


示例代碼:

Controller

@GetMapping("/varExpression")
public String varExpression(HttpServletRequest request, HttpSession session) {

    User ago = new User(1, "Ago", "123");
    request.setAttribute("ago", ago);
    User agiao = new User(2, "Agiao", "123");
    session.setAttribute("agiao", agiao);
    User abc = new User(3, "Abc", "123");
    ServletContext servletContext = request.getServletContext();
    servletContext.setAttribute("abc", abc);

    return "varExpression";
}

templates/varExpression.html

這里及時html中獲取request部分有報錯也無所謂,不影響正常前端頁面顯示

<!doctype html>

<!--注意:引入thymeleaf的名稱空間-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
request: <br/>
<div>
    編號: <label th:text="${ago.id}"></label><br/>
    用戶名:<label th:text="${ago.name}"></label> <br/>
    密碼:<label th:text="${ago.pwd}"></label><br/>
</div>

session:<br/>
<div>
    編號: <label th:text="${session.agiao.id}"></label><br/>
    用戶名:<label th:text="${session.agiao.name}"></label> <br/>
    密碼:<label th:text="${session.agiao.pwd}"></label><br/>
</div>

application:<br/>
<div>
    編號:<label th:text="${application.abc.id}"></label><br/>
    用戶名:<label th:text="${application.abc.name}"></label><br/>
    密碼:<label th:text="${application.abc.pwd}"></label><br/>
</div>

</body>
</html>

Java之SpringBoot-Thymeleaf詳情

 

3.2.2 0x02 *{} 選擇變量表達式#

比較適合偷懶,直接在獲取屬性值之前先把存儲于scope中的整個對象提出來,通過*{}獲取該對象的屬性值

request: <br/>
<div>
    編號: <label th:text="${ago.id}"></label><br/>
    用戶名:<label th:text="${ago.name}"></label> <br/>
    密碼:<label th:text="${ago.pwd}"></label><br/>
</div>

session:<br/>
<div>
    編號: <label th:text="${session.agiao.id}"></label><br/>
    用戶名:<label th:text="${session.agiao.name}"></label> <br/>
    密碼:<label th:text="${session.agiao.pwd}"></label><br/>
</div>

等價于

 request: <br/>
<div th:object="${ago}">
    編號: <label th:text="*{id}"></label><br/>
    用戶名:<label th:text="*{name}"></label> <br/>
    密碼:<label th:text="*{pwd}"></label><br/>
</div>

session:<br/>
<div th:object="${session.agiao}">
    編號: <label th:text="*{id}"></label><br/>
    用戶名:<label th:text="*{name}"></label> <br/>
    密碼:<label th:text="*{pwd}"></label><br/>
</div>

 

3.2.3 0x03 #{} 消息表達式

對于國際化的支持說明

 Java之SpringBoot-Thymeleaf詳情

配置文件聲明

## 配置國際化支持
spring.messages.basename=message


消息表達式

<span th:text="#{home.welcome}"></span><br />

 

3.2.4 0x04 @{} 鏈接表達式

指定跳轉的鏈接

<a th:href="@{/home}" rel="external nofollow" >url</a>

 

3.2.5 0x05 空值處理

如果為空則輸出null,有id值就輸出id

可以在調用對象或者方法的點(.)前面,使用問號(?)來判斷是否為null

<span th:text="${session?.user?.id}"></span>

 

4、標簽與屬性

常用的屬性大致有

  • th:text 文本顯示
  • th:object 一般和*{}一起用
  • th:if / th:unless 相當于if/else
  • th:each 遍歷循環元素
  • th:value 屬性賦值

所有的HTML5標簽的所有屬性都有一個自定義的Thymeleaf屬性對應。

Thymeleaf屬性只有當Thymeleaf模板引擎啟動的情況下,才會生效,即取代對應的HTML5屬性,相反,Thymeleaf屬性僅僅只是一個無用的自定義屬性,因為瀏覽器內核不認識,因此使用Thymeleaf模板引擎可以使得前端代碼和后端代碼分離,當出現顯示問題時,可以立即定位問題所在(是前端頁面還是后臺返回數據有錯),這也是Thymeleaf相對于JSP的一個優勢。

 Java之SpringBoot-Thymeleaf詳情

 Java之SpringBoot-Thymeleaf詳情

結尾:

簡單過了一下Thymeleaf,簡單留個印象,相較于JSP個人感覺Thymeleaf這種模版引擎才更像是前后端分離,也更方便了。但是在安全里,往往方便的地方就最容易存在漏洞,后續分析Thymeleaf時再深入研究下。

到此這篇關于Java之SpringBoot-Thymeleaf詳情的文章就介紹到這了,更多相關Java之SpringBoot-Thymeleaf內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/CoLo/p/15308848.html

延伸 · 閱讀

精彩推薦
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
主站蜘蛛池模板: 九九热只有精品 | 热99这里有精品综合久久 | 紧身裙女教师波多野结衣 | 99九九精品免费视频观看 | 欧美日韩国产亚洲人成 | 天天做天天爱天天综合网 | 色亚洲视频 | 好舒服好爽再快点视频 | 久久久久久久久女黄9999 | 西野翔全部作品在线观看 | 日韩精品一区二区三区视频 | 国产精品在线 | 狠狠色狠狠色综合日日小蛇 | 俄罗斯烧性春三级k8播放 | 经典千人斩一区二区视频 | 天堂va在线| 10个免费货源网站 | 男神插曲女生动漫完整版动漫 | 国内精品自产拍在线观看91 | 免费看日产一区二区三区 | 久久精品一区二区免费看 | 国产成年人视频 | 国内精品91最新在线观看 | 日本乱子 | 青草娱乐极品免费视频 | 日本无遮挡亲吻膜下面免费 | 风间由美在线播放 | 欧美夫妇野外交换hd高清版 | 日本动漫啪啪动画片mv | 青柠影视在线播放观看高清 | 日韩美毛片| 国产精品青青青高清在线观看 | 国产日产欧产精品精品软件 | 国产青草亚洲香蕉精品久久 | 四虎网址大全 | 精品久久免费观看 | 欧美操大逼视频 | 熟睡中的麻麻大白屁股小说 | 精品视频免费在线 | 成人伊在线影院 | 91精品国产美女福到在线不卡 |