6.4 使用 Thymeleaf

尽管 JSP 已经存在了很长的时间,并且在 Java Web 服务器中无处不在,但是它却存在一些缺陷。JSP 最明显的问题在于它看起来像 HTML 或 XML,但它其实上并不是。大多数的 JSP 模板都是采用 HTML 的形式,但是又掺杂上了各种 JSP 标签库的标签,使其变得很混乱。这些标签库能够以很便利的方式为 JSP 带来动态渲染的强大功能,但是它也摧毁了我们想维持一个格式良好的文档的可能性。作为一个极端的样例,如下的 JSP 标签甚至作为 HTML 参数的值:

<input type="text" value="<c:out value="${thing.name}" />" />

标签库和 JSP 缺乏良好格式的一个副作用就是它很少能够与其产生的 HTML 类似。所以,在 Web 浏览器或 HTML 编辑器中查看未经渲染的 JSP 模板是非常令人困惑的,而且得到的结果看上去也非常丑陋。这个结果是不完整的 —— 在视觉上这简直就是一场灾难!因为 JSP 并不是真正的 HTML,很多浏览器和编辑器展现的效果都很难在审美上接近模板最终所渲染出来的效果。

同时,JSP 规范是与 Servlet 规范紧密耦合的。这意味着它只能用在基于 Servlet 的 Web 应用之中。JSP 模板不能作为通用的模板(如格式化 Email),也不能用于非 Servlet 的 Web 应用。

多年来,在 Java 应用中,有多个项目试图挑战 JSP 在视图领域的统治性地位。最新的挑战者是 Thymeleaf,它展现了一些切实的承诺,是一项很令人兴奋的可选方案。Thymeleaf 模板是原生的,不依赖于标签库。它能在接受原始 HTML 的地方进行编辑和渲染。因为它没有与 Servlet 规范耦合,因此 Thymeleaf 模板能够进入 JSP 所无法涉足的领域。现在,我们看一下如何在 Spring MVC 中使用 Thymeleaf。

Last updated