Version: Next

模板引擎

前端交给后端开发人员的页面,是html页面。在过去,我们会将其转变为JSP页面,其好处是我们可以将后端处理好的数据在JSP页面上进行展示,交互。

JSP已经过时了,它的代码耦合度太高了,已经不适应当今开发的需求了。SpringBoot默认不支持JSP

SpringBoot推荐使用模板引擎

常用的模板引擎有freemarkerThymeleaf等,其本质思想是类似的

模板引擎的作用就是写一个页面模板,其中一些数据是动态的,通过一些表达式来设置。而这些数据来自后端服务器的处理结果。将页面模板和数据交给模板引擎,模板引擎就会解析表达式,将数据填充到指定位置,最终将包含数据的页面输出出来。

不同的模板引擎,其语法存在一定差异。

Java Web开发经历的几个阶段

  • JSP

    jsp就是页面端的servlet,jsp文件糅合了三种元素:Java代码、动态的数据、HTML代码结构。从抽象层次来看,Java代码部分不仅用来组织数据,还被用来控制HTML页面结构。这样在层次划分上属于比较含糊不清的。

  • 模板引擎

    在这个阶段就出现了freemarker、velocity这样的严格数据模型与业务代码分离的模板引擎。实现了严格的MVC分离,模板引擎的另外一个好处就是:宏定义或者说是组件模板,比jsp标签好用,极大的减少了重复页面组件元素的开发。另外,相对于jsp而言,模板引擎的开发效率会更高。我们都知道,JSP在第一次执行的时候需要转换成Servlet类,开发阶段进行功能调适时,需要频繁的修改JSP,每次修改都要编译和转换,那么试想一天中我们浪费在程序编译的时间有多少。但是java模板引擎,仍然是使用的服务器端的渲染技术,也就是没有办法将html页面和后台服务层面全面解耦,这就要求前端工程师和后端工程师在同一个项目结构下工作,而且前端工程师及其依赖于后端的业务数据,页面无法脱离于后端请求数据在浏览器独立运行。

  • 前端工程化

    随着VUE、angularjs、reactjs的大行其道,开始实现真正的前后端分离技术。前端的工程师负责页面的美化与结构,后端工程师可以专注于业务的实现。在ajax和nodejs出现之后,可以说为前端的发展带来了革命性的变化,前端可以做自己的工程化实践。这些新的前端技术通常是“所见即所得”,写完的代码可以直接在浏览器上查看,将前端后端的串行化工作模式转变为并行工作的模式。前端专注于布局、美化,后端专注于业务。专业的人越来越专业,工作效率也更高。

Java模板引擎选型

Thymeleaf

  • 优点
    • 使用静态html嵌入标签属性,浏览器可以直接打开模板文件,便于前后端联调。也就是贴近于“所见即所得”。
  • 缺点
    • Thymeleaf使用标签属性去放数据,也导致它的语法违反了自然人对于html的理解。
    • Thymeleaf的性能一直为人所诟病。

Freemarker

  • Thymeleaf代码

    <tr th:each="item : ${users}">
    <td th:text="${item.userId}"></td>
    <td th:text="${item.username}"></td>
    <td th:text="${item.password}"></td>
    <td th:text="${item.email}"></td>
    <td th:text="${item.mobile}"></td>
    </tr>
  • Freemarker代码

    <#list users as item>
    <tr>
    <td>${item.userId}</td>
    <td>${item.username}</td>
    <td>${item.password}</td>
    <td>${item.email}</td>
    <td>${item.mobile}</td>
    </tr>
    </#list>

去学前端框架

个人觉得模板引擎还是Freemarker语法友好一些,而大神推荐干脆去学Vue、angular、react前端三剑客