servlet+thymeleaf改良版
一、maven坐标
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.12.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
二、web.xml配置
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>view-prefix</param-name>
<param-value>/WEB-INF/templates/</param-value>
</context-param>
<context-param>
<param-name>view-suffix</param-name>
<param-value>.html</param-value>
</context-param>
</web-app>
三、监听器
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.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class ThymeleafListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
// 获取ServletContext对象
ServletContext servletContext = sce.getServletContext();
// 从web.xml中读取配置参数
String templatePrefix = servletContext.getInitParameter("template-prefix");
String templateSuffix = servletContext.getInitParameter("template-suffix");
// 创建Thymeleaf模板解析器
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(servletContext);
// 设置模板解析器的前缀、后缀、编码方式和模板模式
templateResolver.setPrefix(templatePrefix);
templateResolver.setSuffix(templateSuffix);
templateResolver.setCharacterEncoding("utf-8");
templateResolver.setTemplateMode(TemplateMode.HTML);
// 创建Thymeleaf模板引擎
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
// 将模板引擎存储在ServletContext中,以便其他组件可以共享
servletContext.setAttribute("templateEngine", templateEngine);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// 在应用程序销毁时执行一些清理操作
}
}
四、demoServlet
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.WebContext;
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 java.io.IOException;
@WebServlet("/hello")
public class HelloWorldServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取ServletContext中的Thymeleaf模板引擎
TemplateEngine templateEngine = (TemplateEngine) getServletContext().getAttribute("templateEngine");
// 创建WebContext对象,传入request和response对象
WebContext webContext = new WebContext(req, resp, getServletContext(), req.getLocale());
// 添加数据到上下文,用于在模板中渲染
webContext.setVariable("message", "Hello, Thymeleaf!");
// 渲染模板并将结果写入响应
templateEngine.process("hello-template", webContext, resp.getWriter());
}
}
五、html页面
<!DOCTYPE html>
<html>
<head>
<title>Hello Page</title>
</head>
<body>
<h1>Welcome to Thymeleaf Example</h1>
<p>Message: ${message}</p>
</body>
</html>