thymeleaf学习
一、在web.xml中根据逻辑视图配置物理视图的前缀和后缀。
<!-- 在上下文参数中配置视图前缀和视图后缀 -->
<context-param>
<param-name>view-prefix</param-name>
<param-value>/WEB-INF/view/</param-value>
</context-param>
<context-param>
<param-name>view-suffix</param-name>
<param-value>.html</param-value>
</context-param>
二、创建Servlet基类ViewBaseServlet
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.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class ViewBaseServlet extends HttpServlet {
private TemplateEngine templateEngine;
@Override
public void init() throws ServletException {
// 1.获取ServletContext对象
ServletContext servletContext = this.getServletContext();
// 2.创建Thymeleaf解析器对象
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(servletContext);
// 3.给解析器对象设置参数
// ①HTML是默认模式,明确设置是为了代码更容易理解
templateResolver.setTemplateMode(TemplateMode.HTML);
// ②设置前缀
String viewPrefix = servletContext.getInitParameter("view-prefix");
templateResolver.setPrefix(viewPrefix);
// ③设置后缀
String viewSuffix = servletContext.getInitParameter("view-suffix");
templateResolver.setSuffix(viewSuffix);
// ④设置缓存过期时间(毫秒)
templateResolver.setCacheTTLMs(60000L);
// ⑤设置是否缓存
templateResolver.setCacheable(true);
// ⑥设置服务器端编码方式
templateResolver.setCharacterEncoding("utf-8");
// 4.创建模板引擎对象
templateEngine = new TemplateEngine();
// 5.给模板引擎对象设置模板解析器
templateEngine.setTemplateResolver(templateResolver);
}
protected void processTemplate(String templateName, HttpServletRequest req, HttpServletResponse resp) throws IOException {
// 1.设置响应体内容类型和字符集
resp.setContentType("text/html;charset=UTF-8");
// 2.创建WebContext对象
WebContext webContext = new WebContext(req, resp, getServletContext());
// 3.处理模板数据
templateEngine.process(templateName, webContext, resp.getWriter());
}
}
三、创建PeopleServlet类
@WebServlet("/people")
public class PeopleServlet extends ViewBaseServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Peoples peoples = new Peoples();
People[] peopleList = peoples.peoples();
// System.out.println(peopleList[1].getName());
HttpSession session = req.getSession();
session.setAttribute("peopleList",peopleList);
//people是逻辑视图,通过thymeleaf加上前缀和后缀可得物理视图即/WEB-INF/view/people.html
super.processTemplate("people",req,resp);
}
}
四、创建People类作为dao实体类,通过类Peoples返回一个People对象的数组peopleList手动模拟数据库的数据
public class People {
private String name;
private Integer age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
public class Peoples {
People[] peoples(){
People[] p = new People[3];
People p1 = new People();
People p2 = new People();
People p3 = new People();
p1.setName("张三");
p1.setAge(18);
p1.setSex("男");
p2.setName("李四");
p2.setAge(20);
p2.setSex("男");
p3.setName("王二");
p3.setAge(10);
p3.setSex("女");
p[0] = p1;
p[1] = p2;
p[2] = p3;
return p;
}
五、people.html`
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>people</title>
</head>
<body>
<table>
<tr>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
</tr>
<tr th:each="people : ${session.peopleList}">
<td th:text="${people.name}"></td>
<td th:text="${people.age}"></td>
<td th:text="${people.sex}"></td>
</tr>
</table>
</body>
</html>
六、运行结果
七、总结
- 视图放在WEB-INF下可以防止浏览器随意访问视图,必须通过servlet访问
- 导入外部依赖必须放在WEB-INF/lib目录下,否则Tomcat启动会出错