Thymeleaf 是一个用于服务器端的 java 模板引擎,它使用简单但功能强大,目前可以处理的模板类型包括:html、XML、TEXT、JavaScript、CSS 等。
首先创建一个 Maven web 项目,pom 文件依赖信息如下:
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.thymeleaf</groupId>
- <artifactId>thymeleaf</artifactId>
- <version>3.0.7.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-api</artifactId>
- <version>3.1.0</version>
- <scope>provided</scope>
- </dependency>
- </dependencies>
可见,thymeleaf 的依赖并不复杂,它只需要一个库文件。
这三个组件构成 thymeleaf 的核心:
为了让程序代码尽可能简单,这里只使用最基本的 servlet 处理 web 请求。
servlet 代码如下,它只是一个简单的 servlet,没有什么功能:
- @WebServlet(urlPatterns="/index")
- public class IndexServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- @Override
- public void init() throws ServletException {
- super.init();
- }
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- }
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
- }
要使模板引擎可以工作,至少需要创建 TemplateEngine 类和 ITemplateResolver 接口的实例,因此在刚才创建的 servlet 中创建两个类属性, 如下:
- @WebServlet(urlPatterns="/index")
- public class IndexServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- TemplateEngine templateEngine;
- ServletContextTemplateResolver templateResolver;
- //其他servlet方法
- }
这一步可以在 servlet 的 init 方法中初始化上面加入的两个属性。一般情况下,模板解析器有一些默认值,例如它默认以 html 方式解析模板。但是,模板的保存路径和后缀是空的,这两个必须由我们自己设置。
- @Override
- public void init() throws ServletException {
- super.init();
- templateEngine = new TemplateEngine();
- templateResolver = new ServletContextTemplateResolver(getServletContext());
- templateResolver.setPrefix("/WEB-INF/templates"); //模板位置
- templateResolver.setSuffix(".html"); //模板扩展名
- templateEngine.setTemplateResolver(templateResolver);
- }
其中 prefix 就是模板保存的路径,suffix 就是模板的扩展名(后缀)。
WebContext 是 IContext 的其中一个实现类,它的基本作用是保存变量。
- @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
- IOException {
- WebContext context = new WebContext(request, response, getServletContext());
- //添加变量message到context
- context.setVariable("message", "hello thymeleaf");
- //解析模板并显示到浏览器
- templateEngine.process("home", context, response.getWriter());
- }
当请求到来的时候,我们创建一个上下文对象用于保存变量,将来可以在模板中获取变量的值。
TemplateEngine 的
方法用于解析模板并利用当前
- process
对象的
- response
把模板输出到浏览器。
- writer
整个过程是非常简单清晰的。
home.html 文件内容:
- <!DOCTYPE html>
- <html xmlns:th="http://www.thymeleaf.org">
- <head>
- <meta charset="UTF-8">
- <title>Insert title here</title>
- </head>
- <body>
- <h3 th:text="${message}">this is a greeting</h3>
- </body>
- </html>
代码中的核心是
标签和
- th:text
占位符,它们用于把从上下文中获取到的变量值替换掉当前标签的文本,这里是:
- ${message}
- this is a greeting
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>cn.sharpcode</groupId>
- <artifactId>learnthymeleaf</artifactId>
- <packaging>war</packaging>
- <version>0.0.1-SNAPSHOT</version>
- <name>learnthymeleaf Maven Webapp</name>
- <url>http://maven.apache.org</url>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.thymeleaf</groupId>
- <artifactId>thymeleaf</artifactId>
- <version>3.0.7.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-api</artifactId>
- <version>3.1.0</version>
- <scope>provided</scope>
- </dependency>
- </dependencies>
- <build>
- <finalName>learnthymeleaf</finalName>
- <plugins>
- <plugin>
- <groupId>org.apache.tomcat.maven</groupId>
- <artifactId>tomcat7-maven-plugin</artifactId>
- <version>2.2</version>
- </plugin>
- </plugins>
- </build>
- </project>
- @WebServlet(urlPatterns = "/home")
- public class IndexServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- TemplateEngine templateEngine;
- ServletContextTemplateResolver templateResolver;
- @Override
- public void init() throws ServletException {
- super.init();
- templateEngine = new TemplateEngine();
- templateResolver = new ServletContextTemplateResolver(getServletContext());
- templateResolver.setPrefix("/WEB-INF/templates/");
- templateResolver.setSuffix(".html");
- templateEngine.setTemplateResolver(templateResolver);
- }
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- WebContext context = new WebContext(request, response, getServletContext());
- // 添加变量message到context
- context.setVariable("message", "hello thymeleaf");
- // 解析模板并显示到浏览器
- templateEngine.process("home", context, response.getWriter());
- }
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
- }
来源: http://www.cnblogs.com/ai-developers/p/7395588.html