Java中的模板引擎有什么作用?

7
我是一名安卓开发者,有将近两年的经验。最近,我想尝试构建 Web 应用程序。于是我开始研究 Spring Boot,发现一切都很棒。但是,我接触到了一个叫做模板引擎(thymeleaf)的东西,它按定义可以将代码与呈现分离。

令我困惑的是后端服务器怎么可能拥有 HTML 呢?难道呈现不应该由前端的 HTML、CSS 和 JavaScript 处理吗?我甚至看到过教程中他们在控制器中直接输入 HTML 代码作为返回值。

我的理解是后端服务器通过 AJAX 提供 API 给前端使用,然后前端会操作这些数据并将信息呈现在屏幕上。那么,为什么后端要提供 HTML 代码呢?

谢谢。


可能你错误地标记了javascript,请编辑。 - Nidhin Joseph
你看了那篇文章吗? - Brendon Cheung
2
并非每个应用程序都是单页应用程序(SPA)-例如,此网站不是SPA,HTML在服务器上使用模板引擎呈现而不是在前端呈现。这有优点和缺点。 - Benjamin Gruenbaum
5个回答

9

前端将操作这些数据

什么前端?你是指HTML页面中的JavaScript代码吗?它来自哪里?哦,对了,是服务器

是服务器向客户端提供HTML页面以及任何.js和.css文件。

服务器可以提供静态页面,任何动态内容都由JavaScript处理。或者,服务器可以使用模板引擎 动态 构建HTML页面。

通常不希望JavaScript最初构建页面,而是使用JavaScript处理任何动态行为。有些页面甚至不需要任何动态行为。

除非你在考虑 单页应用程序(SPA),其中只有一个根HTML页面,其他所有内容都是使用JavaScript和AJAX调用在客户端构建的,但大多数Web应用程序都不是SPA。


1

Thymeleaf通过提供模板引擎,替代了JSP来使用HTML页面。控制器请求HTML文件,Spring Boot在使用提供的Model构建后提供该模板。

Thymeleaf很棒,因为它允许您动态重建模板。例如,您正在前端向用户显示他们的积分,但积分可能会增加或减少。

您可以使用Model在后台构建模板。 Model引用被神奇地提供给解析它的模板。

@RequestMapping(...)
public String request(Model model) {
    model.put("points", 5);
    return "my-template.html"
}

然后使用Thymeleaf语言将您的对象提供给HTML文件,在运行时在引擎中进行处理。
<html..>
    <head>...</head>

    <body>
    <h1 th:text="${points}"></h1>
</html>

Spring Boot模板引擎将在后台构建此内容并呈现给用户,但它将向最终用户显示实际点数!希望这有一点帮助。

1
我知道这个问题已经得到了很好的回答,但是作为一个经常使用Thymeleaf的人,我想加上我的两分钱。
最简单的想法就是模板引擎允许根据控制器方法传递的信息动态开发html。这使您可以放置通常不存在的逻辑,或者显示某个部分,如果用户可能已登录为管理员。
如果网页是房子,那么html是框架,css是墙壁,Javascript是灯和电力,而模板引擎基本上只是建筑师根据买家(用户输入)的需求在框架建造之前即兴设计计划。

0

好的,新一代的应用程序和网站可能只需加载/启动/打开一次,然后通过 AJAX 请求拉取或推送数据,这很好,可以节省流量并且速度快。

但事实并非总是如此,有些框架仍然不会在小请求上构建所有内容。Java 中的 Spring 或 PHP 中的 Symfony 是 MVC 框架,使用模板引擎构建页面。这听起来可能有点过时,但仍有许多网站在使用。

如果您为慢速 PC 或其他设备的客户构建 Web 应用程序,并且页面内容性能较重,则可能希望尽可能多地在服务器上处理工作,以便用户不必等待太久。而且您还可以缓存渲染的页面。甚至可以对 React 页面进行服务器端渲染,以加快初始页面加载速度...

使用 Java 和 Spring 时,我只使用了 JSP,我不知道 thymeleaf。只需使用您喜欢的东西,也许是最受支持/记录的东西。

像这样构建网站并不意味着您不能使用 AJAX,但如果使用模板,则需要考虑何时使用它。


0
让我感到困惑的是后端服务器怎么会有HTML呢?
“后端”必须有HTML,因为这是交付给客户端并由其呈现的内容。
可能只是后端“服务器”只是提供HTML/JS SPA的CDN,但仍然有某些内容传递到浏览器。
话虽如此:服务器端渲染仍然存在,并且最近有了复兴-React应用程序可能在服务器上完成其初始渲染,因此客户端获得了一个带有HTML和相关数据的页面,然后开始像正常的SPA一样运行。
我的理解是后端服务器通过使用AJAX公开API供前端使用,前端将操作这些数据并在屏幕上呈现信息,为什么后端要提供HTML代码呢?
因为需要运行JS来访问这些API。
一些历史:

过去浏览器很糟糕。JS曾经是一个不错的附加功能,网站相对静态,基本上所有的渲染都是在服务器上完成的。后端从任何地方获取数据并生成完整的HTML页面,客户端除了一些表单字段、可能的验证外,几乎没有什么活动。


我明白了,但是在前端使用HTML、CSS和JavaScript的情况下,为什么还要让后端发送HTML呢?我的理解是,在前端向后端请求特定信息数据时,如何在屏幕上呈现数据取决于前端。 - Brendon Cheung
它还能从哪里来呢?HTML除了从某处获取,无论其中包含什么内容,都不会出现在客户端上。你可能认为所有应用程序都只是调用API并进行所有渲染,但这不是Web的起源。所有这些客户端应用程序都是相对较新的。而且,正如我所说,即使只是为了第一次加载,SSR也已经回来了。 - Dave Newton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接