Thymeleaf模板引擎使⽤
什么是Thymeleaf
Thymeleaf是⼀个Java库。它是⼀个XML / XHTML / HTML5模板引擎,能够在模板⽂件上应⽤⼀组转换,将程序产⽣的数据或者⽂本显⽰到模板⽂件上。
Thymeleaf依赖的jar包
要使⽤Thymeleaf,需要在我们的web应⽤的classpath路径中引⼊相关的jar,如下:
thymeleaf-2.1.3.RELEASE.jar
ognl-3.0.6.jar
javassist-3.16.1-GA.jar
政府html5模板unbescape-1.0.jar
servlet-api-2.5.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
log4j-1.2.15.jar
mail-1.4.jar
activation-1.1.jar
创建模板解析器
使⽤Thymeleaf的前提⾮常简单,⾸先创建⼀个模板解析器,⽤来加载模板,如下:
1//Create Template Resolver
2 ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
3//ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
创建模板解析器可以⽤Servlet上下⽂模板解析器ServletContextTemplateResolver或者类加载模板解析器ClassLoaderTemplateResolver。创建模板解析器将指定我们从Servlet上下⽂检索模板⽂件作为资源,并考虑应⽤程序的根路径作为资源的路径。如下:
// XHTML is the default mode, but we will set it anyway for better understanding of code
templateResolver.setTemplateMode("XHTML");
// This will convert "home" to "/WEB-INF/templates/home.html"
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");
如上所⽰,通过解析器创建模板节点,当使⽤Thymeleaf渲染名为“home”的模板的的时候,将,解析器将会⾃动加上前缀和后缀(扩展名)。
创建模板引擎
创建了模板解析器加载模板后,接下来需要创建⼀个模板引擎去做实际的处理⼯作,如下:
//Create Template Engine
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
创建模板引擎很近单,只需要⼀个模板解析器实例。创建了关键的模板解析器和模板引擎之后,我们就可以创建模板页⾯使⽤Thymeleaf。创建模板
我们的模板⽂件放在/WEB-INF/templates/路径下。创建模板⽂件只需要指定Thymeleaf特定的DOCTYPE和命名空间。如下:
<!DOCTYPE html SYSTEM "/dtd/xhtml1-strict-thymeleaf-4.dtd">
<html xmlns="/1999/xhtml"
xmlns:th="">
<head>
<title>Hello thymeleaf</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<p>
<span th:text="#{home.welcome}">this is text will not be show</span>
</p>
</body>
</html>
如上图所⽰,模板⽂件中还定义了⼀个“th:text”属性,我们认为模板⽂件是有效的,因为我们已经通过doctype声明了Thymeleaf dtd,这个类库⾥⾯声明了这个属性。当这个模板被处理时,这个“th:text”属性将被移除,模板⽂件将被替换成⼀个严格的标准的XHTML⽂件。
模板⽂件中的th:text”属性的值是⼀个变量表达式,它将获取变量“hellword”的值作为<span>标签的⽂本显⽰到页⾯上。
创建模板上下⽂
为了能显⽰变量“hellword”的值,我们需创建模板上下⽂,将变量输出到模板⽂件中。如下图:
/
/Create Servlet context
WebContext ctx = new WebContext(req, resp, ServletContext(), Locale());
ctx.setVariable("helloword","hello thymeleaf,wellcome!");
执⾏模板引擎
万事具备,只⽋引擎没有开⽕。现在我们需要做的就是执⾏模板引擎,执⾏模板引擎需要传⼊模板名、上下⽂对象以及响应流。如下:
//Executing template engine
templateEngine.process("home", ctx, Writer());
让我们看看执⾏模板引擎后的结果:
OK,如上所说,模板⽂件被替换成了标准的XHTML⽂件了。
更多了解请访问官⽅⽹站/。
附源码:
public class thymeleafServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//Create Template Resolver
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
//ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
// XHTML is the default mode, but we will set it anyway for better understanding of code
templateResolver.setTemplateMode("XHTML");
// This will convert "home" to "/WEB-INF/templates/home.html"
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");
// Set template cache TTL to 1 hour. If not set, entries would live in cache until expelled by LRU
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(true);
//Create Template Engine
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
//Write the response headers
resp.setContentType("text/html;charset=UTF-8");
resp.setHeader("Pragma", "no-cache");
resp.setHeader("Cache-Control", "no-cache");
resp.setDateHeader("Expires", 0);
//Create Servlet context
WebContext ctx = new WebContext(req, resp, ServletContext(), Locale());
ctx.setVariable("helloword","hello thymeleaf,wellcome!");
//Executing template engine
templateEngine.process("home", ctx, Writer());
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。