如何在基于Eclipse的Web应用中配置Thymeleaf(Servlet场景)
集成Thymeleaf到Servlet Web应用(Eclipse环境)
一、需要下载的资源
- Thymeleaf核心库:
thymeleaf-x.x.x.jar(建议使用最新稳定版,如3.1.2.RELEASE) - Thymeleaf Servlet集成库:
thymeleaf-servlet-x.x.x.jar(版本需与核心库保持一致) - 可选补充:若需使用复杂表达式功能,可添加
ognl-x.x.x.jar,Thymeleaf 3.x已内置简化版OGNL,多数场景无需额外下载
将以上Jar包直接放入Web项目的WEB-INF/lib目录,Eclipse会自动识别并添加到类路径。
二、配置与实现步骤
1. 初始化Thymeleaf模板引擎
创建Servlet上下文监听器,在应用启动时完成模板引擎的配置:
import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import org.thymeleaf.TemplateEngine; import org.thymeleaf.templatemode.TemplateMode; import org.thymeleaf.templateresolver.ServletContextTemplateResolver; @WebListener public class ThymeleafInitializer implements ServletContextListener { private TemplateEngine templateEngine; @Override public void contextInitialized(ServletContextEvent sce) { ServletContext servletContext = sce.getServletContext(); ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(servletContext); // 设置模板模式为HTML templateResolver.setTemplateMode(TemplateMode.HTML); // 模板文件存放路径前缀 templateResolver.setPrefix("/WEB-INF/templates/"); // 模板文件后缀 templateResolver.setSuffix(".html"); // 编码格式 templateResolver.setCharacterEncoding("UTF-8"); // 开发环境关闭缓存,生产环境可设为true templateResolver.setCacheable(false); templateEngine = new TemplateEngine(); templateEngine.setTemplateResolver(templateResolver); // 将引擎存入ServletContext,供后续Servlet调用 servletContext.setAttribute("templateEngine", templateEngine); } @Override public void contextDestroyed(ServletContextEvent sce) { // 销毁阶段无需额外操作 } }
2. 创建Thymeleaf模板文件
在WEB-INF/templates目录下创建示例HTML模板index.html:
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Thymeleaf Servlet Demo</title> </head> <body> <h1>Hello, <span th:text="${username}"></span>!</h1> <p>当前时间:<span th:text="${currentTime}"></span></p> </body> </html>
3. 在Servlet中设置变量并渲染模板
编写Servlet,获取模板引擎、设置变量并输出渲染结果:
import java.io.IOException; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.WebContext; @WebServlet("/hello") public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); // 从ServletContext获取初始化好的模板引擎 ServletContext servletContext = getServletContext(); TemplateEngine templateEngine = (TemplateEngine) servletContext.getAttribute("templateEngine"); // 创建Web上下文对象 WebContext context = new WebContext(request, response, servletContext); // 设置模板变量 context.setVariable("username", "Lorenzo"); String currentTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); context.setVariable("currentTime", currentTime); // 渲染模板并输出到响应流 templateEngine.process("index", context, response.getWriter()); } }
4. 传统XML配置(可选)
若项目未使用Servlet 3.0+注解,需在WEB-INF/web.xml中配置监听器和Servlet:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <listener> <listener-class>com.example.ThymeleafInitializer</listener-class> </listener> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.example.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
三、运行测试
将Web应用部署到Tomcat等Servlet容器,访问http://localhost:8080/你的项目名/hello,即可看到渲染后包含变量内容的页面。
内容的提问来源于stack exchange,提问作者Lorenzo Zorri
相关产品推荐
相关产品推荐

