【JavaWeb】Thymeleaf-视图模板技术

本文探讨了为何使用Thymeleaf作为JavaWeb的视图模板技术,其主要优势在于能够方便地在HTML中动态设置和渲染查询数据。通过四个步骤介绍了如何集成和使用Thymeleaf:添加依赖、创建处理模板的类、定义Servlet继承自处理类,并在HTML中利用Thymeleaf的条件判断、遍历等标签来显示数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为啥要用thymeleaf

显示动态数据。
没有thymeleaf之前,如下图所示,需要查询出数据,然后将数据保存到session里面,然后重定向到index页面,显示查询出来的数据,
在这里插入图片描述利用thymeleaf技术,可以将查询出来的数据,在html文件中动态的进行设置。这个过程称为渲染。
在这里插入图片描述

如何使用thymeleaf

step1:添加jar包或者maven依赖;

 <dependency>
 		<groupId>org.thymeleaf</groupId>
 		<artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-java8time</artifactId>
 </dependency>

step2:新建一个类,ViewBaseServlet ,这个类中processTemplate函数主要用来给html中动态添加数据。

package com.lucky.myssm.myspringmvc;

import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.WebContext;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.
### Thymeleaf 在纯 Java Web 开发中的应用和配置 #### 配置 Maven 或 Gradle 依赖项 为了在纯 Java Web 应用程序中集成 Thymeleaf,首先需要引入相应的库。对于基于 Maven 的项目,在 `pom.xml` 文件内添加如下依赖: ```xml <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf</artifactId> <version>3.0.15.RELEASE</version> </dependency> ``` 如果使用的是 Gradle,则应在 build.gradle 中加入: ```groovy implementation 'org.thymeleaf:thymeleaf:3.0.15.RELEASE' ``` #### 初始化 Servlet 和 Listener 创建一个监听器类用于启动时初始化模板引擎实例,并将其注册到 web.xml 中。 ```java public class TemplateEngineListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { // 创建并设置TemplateResolver对象 ITemplateResolver templateResolver = new ClassLoaderTemplateResolver(); ((ClassLoaderTemplateResolver)templateResolver).setPrefix("/WEB-INF/templates/"); ((ClassLoaderTemplateResolver)templateResolver).setSuffix(".html"); ((ClassLoaderTemplateResolver)templateResolver).setCharacterEncoding("UTF-8"); // 设置TemplateEngine对象 TemplateEngine templateEngine = new TemplateEngine(); templateEngine.setTemplateResolver(templateResolver); // 将其存储于ServletContext以便后续访问 sce.getServletContext().setAttribute("TEMPLATE_ENGINE", templateEngine); } @Override public void contextDestroyed(ServletContextEvent sce) {} } ``` 接着修改 `web.xml` 来声明这个监听器: ```xml <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>com.example.TemplateEngineListener</listener-class> </listener> ``` #### 处理请求与响应 编写控制器处理 HTTP 请求并将数据传递给视图层渲染页面。这里展示了一个简单的例子,其中包含了获取模板引擎实例以及填充上下文的过程[^1]。 ```java @WebServlet(urlPatterns={"/hello"}) public class HelloController extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{ // 获取之前保存下来的TemplateEngine实例 TemplateEngine engine=(TemplateEngine)getServletContext().getAttribute("TEMPLATE_ENGINE"); // 准备要传入HTML的数据模型 Context ctx=new Context(Locale.getDefault()); Map<String,Object> variables=Maps.newHashMap(); variables.put("message","Hello,Thymeleaf!"); ctx.setVariables(variables); // 渲染后的结果写回客户端浏览器 String htmlContent=engine.process("index",ctx); PrintWriter out=response.getWriter(); out.println(htmlContent); out.flush(); } } ``` 上述代码片段展示了如何在一个标准的Servlet环境中利用Thymeleaf完成基本的功能需求。需要注意的是实际生产环境下还需要考虑更多因素如安全性、性能优化等方面的问题[^2]。 #### 定义 HTML 页面结构 最后一步是在项目的 `/WEB-INF/templates/` 路径下放置名为 `index.html` 的文件作为前端界面的一部分。此文件可以包含任何合法的HTML标签加上特定语法标记以供Thymeleaf解析。 ```html <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head lang="en"> <meta charset="utf-8"/> <title>Hello Page</title> </head> <body> <h1 th:text="${message}">Default Message</h1> </body> </html> ``` 通过以上步骤就可以成功搭建起一套完整的Thymeleaf工作流了。当然这只是最基础的部分,随着应用场景复杂度增加还可以进一步探索诸如国际化支持等功能特性[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值