• 模板引擎总结(Thymeleaf,FreeMarker,Enjoy,Velocity,JSP等)



    在java领域,表现层技术主要有以下几种,
    (1)jsp; 
    (2)freemarker; 
    (3)velocity; 
    (4)thymeleaf; 
    (5)Enjoy; 

    1.JSP

    优点:
    1、功能强大,可以写java代码
    2、支持jsp标签(jsp tag)
    3、支持表达式语言(el)
    4、官方标准,用户群广,丰富的第三方jsp标签库
    5、性能良好。jsp编译成class文件执行,有很好的性能表现
    缺点:
    jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。

    2.FeeMaker


    FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。

    特性:

          在所有采用网页静态化手段的网站中,FreeMarker使用的比例大大的超过了其他的一些技术。HTML静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以使用FreeMarker将HTML静态化。比如一些网站的公用设置信息,这些信息基本都是可以通过后台来管理并存储在数据库中,这些信息其实会大量的被前台程序调用,每一次调用都会去查询一次数据库,但是这些信息的更新频率又会很小,因此也可以考虑将这部分内容进行后台更新的时候进行静态化,这样就避免了大量的数据库访问请求,提高了网站的性能。

          (目前主流的模板引擎之一)

    目前企业中:主要用Freemarker做静态页面或是页面展示 

    使用

          导入相关依赖

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

          在配置文件中添加FreeMaker的配置如下后就可以使用了

    复制代码
    #       设定ftl文件路径
    spring.freemarker.tempalte-loader-path=classpath:/templates
    #        关闭缓存,及时刷新
    spring.freemarker.cache=false
    spring.freemarker.charset=UTF-8
    spring.freemarker.check-template-location=true
    spring.freemarker.content-type=text/html
    spring.freemarker.expose-request-attributes=true
    spring.freemarker.expose-session-attributes=true
    spring.freemarker.request-context-attribute=request
    #设置FreeMaker文件的后缀 spring.freemarker.suffix=.ftl
    复制代码

    语法:可以参考API文档

    优点:
    1、不能编写java代码,可以实现严格的mvc分离
    2、性能非常不错
    3、对jsp标签支持良好
    4、内置大量常用功能,使用非常方便
    5、宏定义(类似jsp标签)非常方便
    6、使用表达式语言
    缺点:
    1、不是官方标准
    2、用户群体和第三方标签库没有jsp多

    选择freemarker的原因:
    1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。
    2、宏定义比jsp tag方便
    3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便
    4、支持jsp标签
    5、可以实现严格的mvc分离

    3.Velocity

    优点:
    1、不能编写java代码,可以实现严格的mvc分离
    2、性能良好,据说比jsp性能还要好些
    3、使用表达式语言,据说jsp的表达式语言就是学velocity的
    缺点:
    1、不是官方标准
    2、用户群体和第三方标签库没有jsp多。
    3、对jsp标签支持不够好

    4.Thymeleaf

    Thymeleaf是个XML/XHTML/HTML5模板引擎,可以用于Web与非Web应用。

    Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。接下来,这些标签属性就会在DOM(文档对象模型)上执行预先制定好的逻辑。Thymeleaf的可扩展性也非常棒。你可以使用它定义自己的模板属性集合,这样就可以计算自定义表达式并使用自定义逻辑。这意味着Thymeleaf还可以作为模板引擎框架。

      特性

          1.Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。

          2.Thymeleaf 开箱即用的特性。它提供标准和spring标准两种方言,可以直接套用模板实现JSTL、 OGNL表达式效果,避免每天套模板、该jstl、改标签的困扰。同时开发人员也可以扩展和创建自定义的方言。
          3. Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
          (目前主流的模板引擎之一,Spring Boot推荐)
    使用(SpringBoot+IDEA):
          直接在pom文件中引入如下依赖
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

          导进相关依赖后

          

          然后只要将html文件放入classpath:templates文件下,thymeleaf就能自动完成渲染(例如控制器中返回的字符串会直接到该文件夹中找到对应的页面)

          

          导入Thymeleaf命名空间:在html文件中添加如下代码

    <html lang="en" xmlns:th="http://www.thymeleaf.org">

    语法:

          获取变量的值${...}

          链接@{...}

          文本替换th:text=${...}  (这里可以替换id值,class值以及内容等)

          判断语句th:if  th:unless  th:switch等

          遍历th:each

          ......可参考下图,如果需要了解更多可以查看对应的API文档

          

    优点:静态html嵌入标签属性,浏览器可以直接打开模板文件,便于前后端联调。springboot官方推荐方案。

    缺点:模板必须符合xml规范,就这一点就可以判死刑!太不方便了!js脚本必须加入/

    5.Enjoy

        特性

          Enjoy 是基于 Java 语言的极轻量极模板引擎且不依赖任何第三方。极简设计仅 if、for、switch、set、define、include、render 七个核心指令,让学习成本低到极致。独创 DKFF(Dynamic Key Feature Forward) 词法分析算法与 DLRD (Double Layer Recursive Descent)语法分析算法,避免使用 javacc、antlr、jflex 生成器,令代码量少到极致。

        优点:功能强大,扩展性强,与Java非常契合,学习成本低,轻量级等。

        缺点

        使用和语法:本人暂未使用,可参考https://www.jfinal.com/doc如下图所示

            

  • 相关阅读:
    老大叔开博感想
    模板
    Codeforces Round #685 (Div. 2) 题解
    CF830E Perpetual Motion Machine 题解
    THUWC2020游记
    数论
    后缀数组学习笔记
    Codeforces Round #466 (Div. 2)
    博客停写,搬家到www.54kaikai.com
    lda 主题模型--TOPIC MODEL--Gibbslda++结果分析
  • 原文地址:https://www.cnblogs.com/weixupeng/p/11395408.html
Copyright © 2020-2023  润新知