精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

性能排名第一的模板引擎 JTE 在 Spring Boot 中的應用

開發 前端
FreeMarker通過特定的語法,如${參數},將數據注入模板中,實現動態內容的生成。它適用于生成復雜格式的Excel文件、PDF文檔等。

1. 簡介

模板引擎是為了解決用戶界面(顯示)與業務數據(內容)分離而產生的,它可以生成特定格式的文檔,如HTML、XML等。常見的模板引擎有FreeMarker和Thymeleaf等。

FreeMarker通過特定的語法,如${參數},將數據注入模板中,實現動態內容的生成。它適用于生成復雜格式的Excel文件、PDF文檔等。

Thymeleaf則提供標準和Spring標準兩種方言,可以直接套用模板實現JSTL、OGNL表達式效果。它特別適用于與SpringMVC集成的項目。

JTE(Java Template Engine)是一個輕量級的模板引擎,專為Java應用設計。它采用了獨特的DSL(領域特定語言)來簡化模板編寫過程,使得模板更加簡潔易讀。JTE支持強大的繼承和組合機制,這不僅有助于構建復雜的頁面結構,還能有效減少重復代碼。此外,JTE還提供了良好的錯誤報告功能,幫助開發者快速定位和解決問題,提高了開發效率。總之,無論是小型網站還是大型企業級應用,JTE都能提供靈活且高效的解決方案,是值得嘗試的一款模板引擎。

JTE性能

按設計,jte 提供了非常快的輸出速度。這是一個包含了 jte 的 mbosecke/template-benchmark 的分支版本,在 AMD Ryzen 5950X(單線程)上運行。

圖片圖片

mbosecke/template-benchmark github地址如下:https://github.com/casid/template-benchmark/

高并發

這是與上面相同的基準測試,但線程數被設置為@Threads(16),以充分利用所有核心。jte幾乎沒有序列化瓶頸,并且在具有多個CPU核心的服務器上能夠非常高效地并發運行:

圖片圖片

2. 實戰案例

2.1 快速入門

定義數據模型

public class Page {
  private String title ;
  private String description ;
  // getters, setters
}

定義jte模板

@import com.pack.jte.test.Page
@param Page page
<html>
  <head>
    <meta charset="UTF-8">
      @if(page.getDescription() != null)
          <meta name="description" content="${page.getDescription()}">
      @endif
      <title>${page.getTitle()}</title>
  </head>
  <body>
      <h1>${page.getTitle()}</h1>
      <p>歡迎使用JTE模板引擎</p>
  </body>
</html>
  • @import 直接轉換為 Java 或 Kotlin 的導入語句,在這種情況下,使得 com.pack.jte.test.Page 被模板識別。
  • @param Page page 是需要傳遞給此模板的參數。
  • @if / @endif 構成了一個條件塊。括號內的內容 (page.getDescription() != null) 是標準的 Java 代碼。
  • ${} 將內容寫入底層模板輸出,類似于其他多種模板引擎中的用法。

渲染模板

CodeResolver codeResolver = new DirectoryCodeResolver(Path.of("target/classes/templates/jte")) ;
TemplateEngine templateEngine = TemplateEngine.create(codeResolver, ContentType.Html) ;
StringOutput so = new StringOutput();
templateEngine.render("test.jte", new Page("xxxooo", "這里是饃饃社交"), so) ;
System.err.println(so.toString()) ;

控制臺輸出結果

圖片圖片

上面代碼中的TemplateEngine實現有很多,你可根據不同的場景選擇合適的輸出模板。

2.2 模板語法

數據顯示

要在模板中顯示數據,請用 ${} 將其包裹起來:

@import my.Model
@param Model model


Hello ${model.name}!

而對應的模型Model則如下:

package my ;
public class Model {
  public String name = "Pack" ;
}

上述模板的輸出將是 Hello Pack!

${} 可用來輸出以下類型:

  • String
  • Enum
  • boolean,byte,short,int,long,float,double,char
  • 任意實現了gg.jte.Content的類

注意:出于安全考慮,不會自動進行 .toString() 轉換。不支持的類型會產生編譯錯誤。

if語句塊

你可以使用關鍵字 @if、@elseif、@else 和 @endif 來構造 if 語句。這些關鍵字可直接轉換為 Java 對應的關鍵字:

@if(model.entries.isEmpty())
  I have no entries!
@elseif(model.entries.size() == 1)
  I have one entry!
@else
  I have ${model.entries.size()} entries!
@endif

自 Java 14+ 起,還可以對 instanceof 使用模式匹配:

@if (model instanceof SubModel subModel)
  ${subModel.getSpecial()}
@endif

就像寫Java代碼一樣。

循環

除了 if 語句,jte 還提供了 @for 和 @endfor 關鍵字,用于循環遍歷可迭代數據。同樣,@for 可以直接轉換為 Java 或 Kotlin 的對應關鍵字:

@for(Entry entry : model.entries)
  <li>${entry.title}</li>
@endfor


@for(var entry : model.entries)
  <li>${entry.title}</li>
@endfor


@for(int i = 0; i < 10; ++i)
  <li>i is ${i}</li>
@endfor

循環時,你可以使用 gg.jte.support.ForSupport 類獲取有關循環的信息,例如你是在循環的第一次迭代還是最后一次迭代。

@import gg.jte.support.ForSupport
@for(var entryLoop : ForSupport.of(model.entries))
<tr class="${(entryLoop.getIndex() + 1) % 2 == 0 ? "even" : "odd"}">
  ${entryLoop.get()}
</tr>
@endfor

自 jte 3.0 起,可以在 @endfor 之前使用 @else。如果循環中沒有遍歷任何元素,@else 內容就會渲染。這對顯示空列表狀態非常有用,無需額外的 @if。例如

@for(var item : datas)
  <tr>
    <td>${item.getName()}</td>
    <td>${item.getQuantity()}</td>
  </tr>
@else
  <tr>
    <td colspan="2">本月銷售總數</td>
  </tr>
@endfor

這功能不錯誤。

注釋

jte 允許你在模板中定義注釋。

<%-- 這里是注釋信息 --%>

注意:模板輸出中不包含 jte 注釋。

模板調用

要在模板之間共享共同功能,可以調用其他模板。所有模板都必須位于 jte 根目錄下。

通用模板定義templates/jte/common.jte

@import com.pack.jte.test.Entry
@param Entry entry
@param boolean verbose


<h2>${entry.getTitle()}</h2>
@if(verbose)
  <h3>xxxooo</h3>
@endif

在其它模板中調用該模板。

@template.common(page.getEntry(), false)

這里@template后面是你要調用模板的完整路徑。類似方法調用,該模板中需要什么數據,直接在這里傳入。

模板渲染示例:

CodeResolver codeResolver = new DirectoryCodeResolver(Path.of("target/classes/templates/jte")) ;
TemplateEngine templateEngine = TemplateEngine.create(codeResolver, ContentType.Html) ;
TemplateOutput so = new StringOutput();
Page page = new Page("xxxooo", "這里是饃饃社交");
page.setEntry(new Entry("你好中國")) ;

以上我們介紹了常用的一些語法,還有其它如需要了解可以查看官網。

2.3 在Spring Boot中的應用

我們只需要引入以下的依賴即可,根據你使用Spring Boot的版本,支持2.x、3.x

<dependency>
  <groupId>gg.jte</groupId>
  <artifactId>jte</artifactId>
  <version>3.1.12</version>
</dependency>
<dependency>
  <groupId>gg.jte</groupId>
  <artifactId>jte-spring-boot-starter-3</artifactId>
  <version>3.1.12</version>
</dependency>

配置文件如下配置

gg:
  jte:
    developmentMode: true
    # 生產環境設置,與上面的不能同時設置
    usePrecompiledTemplates: false
    # 注意這里的路徑,如果你打成的jar運行,則你應該在你當前jar所在目錄同級建立對應的目錄
    templateLocation: target/classes/templates/jte
    templateSuffix: .jte

設置了模板文件的路徑及文件的后綴。同時設置了當前為開發模式。

我們這里以上面的test.jte為例演示

@Controller
@RequestMapping("/jte")
public class TestController {


  @GetMapping("") 
  public String view(Model model, HttpServletResponse response) {
    Page page = new Page("xxxooo", "這里是饃饃社交");
    page.setEntry(new Entry("你好中國")) ;
    model.addAttribute("page", page);
    return "test";
  }
}

頁面展示:

圖片圖片

除了要注意模板路徑問題外,其它就像以前一樣該怎么寫就怎么寫,模板數據模型的使用方式都一樣的。

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2024-10-07 08:40:56

Spring應用程序Java

2024-01-22 00:20:00

2015-10-26 16:18:19

2014-09-30 11:28:14

戴爾

2016-10-10 17:17:16

戴爾

2016-12-26 18:04:01

戴爾

2009-09-23 10:46:40

供應鏈管理博科資訊

2016-03-11 17:11:32

金蝶云之家

2014-08-15 14:47:03

游久華為應用市場

2009-07-16 08:52:07

500強微軟

2011-07-29 14:34:13

2024-12-24 14:38:00

銳捷網絡WLAN

2012-03-06 09:28:32

Android移動瀏覽器Opera

2024-09-30 11:51:07

2021-11-01 14:28:06

新華三

2020-06-05 09:57:26

編程語言C語言Java
點贊
收藏

51CTO技術棧公眾號

日韩一二三区在线观看| 秋霞影院午夜丰满少妇在线视频| 亚洲乱亚洲高清| 亚洲美女精品成人在线视频| 另类小说第一页| 在线观看av免费| 99在线热播精品免费| 国产精品视频一区二区三区四| 日韩视频中文字幕在线观看| 老汉色老汉首页av亚洲| 欧美三级电影一区| 免费在线观看亚洲视频| 日本高清在线观看wwwww色| 成人精品gif动图一区| 国产日韩欧美黄色| 日韩美一区二区| 亚洲午夜精品久久久久久app| 亚洲午夜国产成人av电影男同| 日韩精品视频网址| 91p九色成人| 精品久久久精品| 中文字幕久久综合| 精品欧美不卡一区二区在线观看| 国产成人免费在线观看| 国产精品91久久久| 国产精品人人人人| 国内精品久久久久久久影视麻豆| 中文字幕亚洲欧美日韩2019| 国产又黄又粗又猛又爽的视频| av日韩在线免费观看| 91搞黄在线观看| 日本少妇高潮喷水视频| 青草影视电视剧免费播放在线观看| 欧美激情一区不卡| 日韩国产欧美精品| 国产综合无码一区二区色蜜蜜| 精品一区二区三区免费| 国产精品女视频| 青青国产在线视频| 蘑菇福利视频一区播放| 9.1国产丝袜在线观看| 青娱乐免费在线视频| 亚洲澳门在线| www.日韩视频| 亚洲一区电影在线观看| 国内成人自拍| 亚洲小视频在线观看| 在线免费观看日韩av| 97青娱国产盛宴精品视频| 欧美一区二区三区爱爱| 国产乱码一区二区三区四区| 91精品麻豆| 欧美视频中文字幕| 中文久久久久久| 黄色欧美视频| 欧美电影一区二区| 天天视频天天爽| 欧美a视频在线| 欧美日韩国产中文| 久国产精品视频| 日本精品视频| 精品日本一线二线三线不卡| 色哟哟视频在线| 女同久久另类99精品国产| 亚洲激情第一页| 国产伦理片在线观看| 欧美中文一区二区| xxav国产精品美女主播| 精品丰满少妇一区二区三区| 国产精品精品| 欧美国产欧美亚洲国产日韩mv天天看完整 | a一级免费视频| 在线中文一区| 久久久视频精品| 青青青国产在线| 男人的j进女人的j一区| 亚洲一区二区三区四区视频| 亚洲美女性生活| 久久久五月婷婷| 中文字幕色一区二区| 日本aa在线| 日韩欧美999| 狠狠干狠狠操视频| av不卡一区| 亚洲人a成www在线影院| 一本一本久久a久久| 欧美区国产区| 国产成人午夜视频网址| 国产精品久久欧美久久一区| 国产成人精品一区二区三区四区 | 最近中文字幕免费视频| 91一区在线| 97精品一区二区三区| 国产在线一级片| 国产成人福利片| 日韩国产精品一区二区| 亚洲制服国产| 在线观看一区二区视频| 中文字幕第10页| 国产videos久久| 欧美精品在线看| 国产精品熟女视频| 成人美女在线观看| 亚洲乱码国产乱码精品天美传媒| 在线免费av导航| 欧美性色综合网| 人妖粗暴刺激videos呻吟| 日本大胆欧美| 51精品国产黑色丝袜高跟鞋| 国产精品永久久久久久久久久| 99re热这里只有精品视频| 在线观看免费黄色片| 亚洲午夜天堂| 精品国产一区二区精华| 免费精品在线视频| 日韩中文字幕亚洲一区二区va在线| av资源一区二区| 日本三级在线视频| 欧美性xxxxxxxx| 亚洲av成人无码一二三在线观看| 亚洲精品一区二区妖精| 青青久久aⅴ北条麻妃| 丰满肉嫩西川结衣av| 成人欧美一区二区三区白人 | 成人美女视频在线看| 最新av在线免费观看| 国产亚洲人成a在线v网站| 精品亚洲一区二区| 欧美一级视频免费观看| 成人一区二区三区| 天天干天天色天天爽| 国产精品原创视频| 国产一区二区三区网站| 天天综合天天干| 波多野结衣中文一区| 欧美乱大交xxxxx潮喷l头像| 日韩激情精品| 欧美美最猛性xxxxxx| 国产免费一区二区三区最新不卡 | 在线观看精品视频| 国产精品伦一区二区| 尤物tv国产一区| 秋霞av一区二区三区| www国产成人免费观看视频 深夜成人网| 91免费国产精品| 日韩一区二区三区精品视频第3页| www.国产精品一二区| 一级特黄色大片| 综合av第一页| 亚洲综合123| 在线电影一区二区| 97人人模人人爽人人喊38tv| 四虎亚洲精品| 欧美tk—视频vk| 日韩黄色精品视频| 92精品国产成人观看免费| 乱妇乱女熟妇熟女网站| 国产va免费精品观看精品视频| 国产成人avxxxxx在线看| 国产尤物视频在线| 欧美日韩国产一二三| 艳妇荡乳欲伦69影片| 国产激情偷乱视频一区二区三区| 草草草视频在线观看| 国产精品调教| 国产97在线亚洲| 日韩美女网站| 日韩欧美激情在线| 日本系列第一页| 国产偷国产偷精品高清尤物| 少妇一级淫免费播放| 羞羞色午夜精品一区二区三区| 91在线看网站| 精品捆绑调教一区二区三区| 国产小视频国产精品| 亚洲自拍偷拍另类| 一区二区三区波多野结衣在线观看| 免费不卡的av| 可以免费看不卡的av网站| av不卡在线免费观看| 久久99精品国产自在现线| 国产精品69久久久久| 99视频免费在线观看| 精品视频www| 国产精品久久久久久免费免熟| 亚洲黄一区二区三区| 免费中文字幕av| 激情综合色综合久久| 分分操这里只有精品| 日韩欧美网址| 国偷自产av一区二区三区小尤奈| 国产91欧美| 国模精品视频一区二区三区| av网站大全在线观看| 欧美xxx久久| 无码人妻精品一区二区三区不卡| 中文字幕一区二区三区不卡| 久久丫精品国产亚洲av不卡| 九色综合狠狠综合久久| 2022亚洲天堂| 综合在线视频| 日韩三级电影| 国产伦理久久久久久妇女| 成人xxxx视频| 黄色成人免费网| 欧美精品999| 欧美日韩xx| 亚洲日韩中文字幕在线播放| 精品人妻aV中文字幕乱码色欲| 91精品福利在线| 五月天婷婷网站| 亚洲免费资源在线播放| 人人妻人人澡人人爽| 91在线porny国产在线看| 色婷婷综合在线观看| 日本va欧美va精品发布| 久久久999视频| 国产精品jizz在线观看美国| 一区二区视频国产| 久草在线成人| 精品福利影视| 波多野结衣欧美| 91福利视频导航| 国产精品视频一区二区三区综合| 国产精品久久久999| 亚洲美女久久精品| 7m第一福利500精品视频| 污污的网站在线看| 久久久国产一区二区| 午夜视频成人| 在线观看视频亚洲| 国产精品天堂| 伊人av综合网| 成年人视频在线观看免费| 国产视频精品免费播放| 无码国产精品高潮久久99| 欧美精品一区二区三区在线| 国产av一区二区三区| 欧美一区二区在线不卡| 国产免费叼嘿网站免费| 制服丝袜中文字幕亚洲| 国产精品羞羞答答在线| 91精品啪在线观看国产60岁| 一级黄色a毛片| 欧美精三区欧美精三区| 亚洲天堂久久久久| 欧美美女一区二区在线观看| 91影院在线播放| 欧美一区二区三区在线观看| 国产特级黄色片| 日韩欧美国产精品| 亚洲AV无码一区二区三区少妇| 欧美一卡2卡3卡4卡| av网站免费播放| 精品sm在线观看| 天堂在线观看视频| 日韩精品视频免费| 爱久久·www| 久久精品视频va| 性xxxxfjsxxxxx欧美| 久久久在线视频| 六月婷婷综合| 国产欧美精品在线播放| 国产精品2区| 国产日韩欧美一区二区三区四区| 六月丁香久久丫| 日本一区不卡| 99成人在线视频| 91网站在线观看免费| 亚洲欧美视频一区二区三区| 精品视频无码一区二区三区| 毛片av一区二区| 久久久久亚洲AV成人网人人小说| 99久久99久久精品免费观看| 国产免费看av| 亚洲天堂精品视频| 日韩特黄一级片| 欧美吞精做爰啪啪高潮| 国产黄a三级三级看三级| 亚洲激情第一页| 免费在线视频欧美| 97精品视频在线观看| 国产精品66| 高清国产在线一区| 国产欧美高清视频在线| 九九久久九九久久| 亚洲免费婷婷| 免费人成视频在线播放| 91蜜桃免费观看视频| 尤物在线免费视频| 欧美性少妇18aaaa视频| 日批视频免费观看| 欧美电影免费观看完整版| 四虎影视2018在线播放alocalhost| 最近2019年日本中文免费字幕 | 精品久久久一区| 一级黄色片网站| 亚洲久久久久久久久久久| 成人高清免费在线| 国产精品高潮在线| 国产精品xxx在线观看| 亚洲一区二区三区欧美| 一本一本久久| 久久综合在线观看| 国产色产综合色产在线视频| 精品无码av在线| 欧美日韩高清一区| 国产视频三级在线观看播放| 欧美精品videossex性护士| 懂色aⅴ精品一区二区三区| 国模一区二区三区私拍视频| 亚洲经典一区| 天天爽人人爽夜夜爽| 99久久精品免费看国产免费软件| 黄色a级片在线观看| 91国偷自产一区二区开放时间 | 欧洲精品99毛片免费高清观看| 日韩精品久久久毛片一区二区| 精品1区2区3区4区| 一区二区网站| 日韩欧美2区| 青青草成人av| 欧美色视频在线观看| 日韩一级片免费| 久久综合伊人77777尤物| 经典三级一区二区| 久久久精品国产一区二区三区| 欧美激情第8页| 在线视频观看一区二区| 日本一区二区三区国色天香| 亚洲第一精品在线观看| 337p日本欧洲亚洲大胆精品| 影院在线观看全集免费观看| 国产一区二区视频在线观看| 成人在线电影在线观看视频| 50路60路老熟妇啪啪| 91蜜桃传媒精品久久久一区二区| 国产一级做a爱免费视频| 日韩欧美一级二级三级久久久| 欧美jizzhd欧美| 91久久在线观看| 我不卡手机影院| 日韩在线一区视频| 国产精品高潮呻吟| 在线观看黄色国产| 中文字幕视频在线免费欧美日韩综合在线看 | 久久综合电影一区| 日本a人精品| 国产精品av免费| 精品一区精品二区高清| 久久人妻无码aⅴ毛片a片app| 69av一区二区三区| 成人国产免费电影| 国产精品国产精品| 亚洲精品综合| 一卡二卡三卡四卡| 欧美色欧美亚洲另类二区| 麻豆视频在线观看免费网站| 91精品视频在线看| 欧美国产激情| 中文字幕人妻一区二区三区| 欧美日韩激情小视频| 久久天堂电影| 国产欧美日韩精品在线观看| 婷婷亚洲五月色综合| 樱花草www在线| 亚洲大片在线观看| 欧美另类自拍| 国产伦精品免费视频| 一区二区影院| 国产精品麻豆入口| 欧洲一区二区三区在线| av在线下载| 久久久福利视频| 精品制服美女丁香| 国产一级淫片免费| 亚洲性视频网站| 国产亚洲精aa在线看| 国产精品无码一区二区在线| 久久久国产精品麻豆| 国产免费无遮挡| 668精品在线视频| 欧美激情理论| 波多野结衣影院| 欧美乱妇20p| 亚洲福利影院| 日韩不卡一二区| 国产亚洲自拍一区| 精品免费久久久| 欧美怡春院一区二区三区| 亚洲欧美网站在线观看| 三叶草欧洲码在线| 欧美精品电影在线播放| 国产理论在线| 综合国产精品久久久| 91欧美激情一区二区三区成人| 一级片在线观看视频| 91成人国产在线观看| 亚洲五月综合| 蜜桃久久精品成人无码av|