相关资料
thymeleaf.org
thymeleaf3.0
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html
易学教程
创建工程
工程结构
侦听器(模板引擎模板解析器)
package com.thymeleaf1.listener;
import org.thymeleaf.TemplateEngine;
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 ListenerTest implements ServletContextListener {
private static final String TEMPLATE_ENGINE_INST = "com.test.thymeleaf.TemplateEngine";
public static void storeTemplateEngine(ServletContext context, TemplateEngine engine) {
context.setAttribute(TEMPLATE_ENGINE_INST, engine);
}
public static TemplateEngine getTemplateEngine(ServletContext context) {
return (TemplateEngine) context.getAttribute(TEMPLATE_ENGINE_INST);
}
// Public constructor is required by servlet spec
public ListenerTest() {
}
// -------------------------------------------------------
// ServletContextListener implementation
// -------------------------------------------------------
public void contextInitialized(ServletContextEvent sce) {
/* This method is called when the servlet context is
initialized(when the Web application is deployed).
You can initialize servlet context related data here.
*/
ServletContextTemplateResolver templateResolver =
new ServletContextTemplateResolver(sce.getServletContext());
// HTML is the default mode, but we set it anyway for better understanding of code
templateResolver.setTemplateMode(TemplateMode.HTML);
// This will convert "home" to "/WEB-INF/templates/home.html"
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");
// Template cache TTL=1h. If not set, entries would be cached until expelled
templateResolver.setCacheTTLMs(Long.valueOf(3600000L));
// Cache is set to true by default. Set to false if you want templates to
// be automatically updated when modified.
templateResolver.setCacheable(false);
TemplateEngine engine = new TemplateEngine();
engine.setTemplateResolver(templateResolver);
storeTemplateEngine(sce.getServletContext(), engine);
}
public void contextDestroyed(ServletContextEvent sce) {
/* This method is invoked when the Servlet Context
(the Web application) is undeployed or
Application Server shuts down.
*/
}
}
创建servlet
package com.thymeleaf1.servlet;
import com.thymeleaf1.listener.ListenerTest;
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(name = "ServletTest", urlPatterns = "/test")
public class ServletTest extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
TemplateEngine engine = ListenerTest.getTemplateEngine(request.getServletContext());
WebContext context = new WebContext(request, response, request.getServletContext());
response.setCharacterEncoding("utf-8");
context.setVariable("thymeleaf", "first thymeleaf page!!");
engine.process("index", context, response.getWriter());
}
}
在模板下创建消息文件
创建模板WEB-INF\templates
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>$Title$</title>
</head>
<body>
[[#{i18n.welcome}]]
<zsz th:text="#{i18n.welcome}">test</zsz> <hr>
[[${thymeleaf}]]
<input type="text" name="userName" th:value="${thymeleaf}" />
</body>
</html>
运行效果