由于本人对HTML5比较有兴趣,看到资讯里Thymeleaf 1.1.1 发布,基于Java的XML/XHTML/HTML5模板引擎。牛人的东西,所以抽时间看了看,感觉不错,抛开性能的问题,本人感觉上手比较容易。模版userdetail.html保存在/WEB-INF/templates。采用javaee5。
下面将主要代码贴出来:
1、域类User.java非常简单:
package org.penguin.study.thymeleaf.domains; import java.io.Serializable; import java.util.Date; import java.util.List; public class User implements Serializable { /** * */ private static final long serialVersionUID = -1166971076916234412L; public User() { super(); } public User(String userName, Boolean sex, Date birthday, Integer age, List<String> favs) { super(); this.userName = userName; this.sex = sex; this.birthday = birthday; this.age = age; this.favs = favs; } public User(Long userId, String userName, Boolean sex, Date birthday, Integer age, List<String> favs) { super(); this.userId = userId; this.userName = userName; this.sex = sex; this.birthday = birthday; this.age = age; this.favs = favs; } private Long userId; private String userName; private Boolean sex; private Date birthday; private Integer age; private List<String> favs; public Long getUserId() { return userId; } public void setUserId(Long userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Boolean getSex() { return sex; } public void setSex(Boolean sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public List<String> getFavs() { return favs; } public void setFavs(List<String> favs) { this.favs = favs; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((userId == null) ? 0 : userId.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; User other = (User) obj; if (userId == null) { if (other.userId != null) return false; } else if (!userId.equals(other.userId)) return false; return true; } @Override public String toString() { return "User [userId=" + userId + ", userName=" + userName + ", sex=" + sex + ", birthday=" + birthday + ", age=" + age + ", favs=" + favs + "]"; } }
2、PrintUserServlet.java代码:
package org.penguin.study.thymeleaf.web; import java.io.IOException; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; 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 javax.servlet.http.HttpSession; import org.penguin.study.thymeleaf.domains.User; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.thymeleaf.TemplateEngine; import org.thymeleaf.TemplateMode; import org.thymeleaf.context.WebContext; import org.thymeleaf.templateresolver.ServletContextTemplateResolver; @WebServlet("/printuser") public class PrintUserServlet extends HttpServlet { private static final long serialVersionUID = 392217069528789775L; private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); private static final Logger logger = LoggerFactory.getLogger(PrintUserServlet.class); private static TemplateEngine templateEngine; public PrintUserServlet() { super(); initializeTemplateEngine(); } protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String result = ""; try { User zhaojing = new User(100L, "赵静", false, dateFormat.parse("1978-11-22"), 34, new ArrayList<String>() { { add("听音乐"); add("读书"); add("慢跑"); add("旅游"); } }); User chengyinghua = new User(200L, "程英华", false, dateFormat.parse("1978-02-04"), 34, new ArrayList<String>() { { add("听音乐"); add("读书"); add("慢跑"); add("旅游"); } }); Map<String, Integer> map = new HashMap<String, Integer>() { { put("a", 96); put("b", 97); put("c", 98); } }; HttpSession session = request.getSession(true); session.setAttribute("admin", chengyinghua); session.setMaxInactiveInterval(3600); request.setAttribute("user", zhaojing); request.setAttribute("map", map); response.setContentType("text/html;charset=UTF-8"); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); final WebContext ctx = new WebContext(request); ctx.setVariable("user", zhaojing); result = templateEngine.process("userdetail", ctx); response.getWriter().write(result); } catch (ParseException e) { logger.error("格式化生日数据时发生异常,请检查生日数据是否符合yyyy-MM-dd格式,范例:1978-02-04"); } } private static void initializeTemplateEngine() { ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); // 设置模版类型 templateResolver.setTemplateMode(TemplateMode.HTML5); // 设置模版路径 templateResolver.setPrefix("/WEB-INF/templates/"); // 设置后缀 templateResolver.setSuffix(".html"); // 设置缓存时间为1个小时 templateResolver.setCacheTTLMs(Long.valueOf(3600000L)); templateEngine = new TemplateEngine(); templateEngine.setTemplateResolver(templateResolver); } }
3、模版代码userdetail.html:
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8" /> <title>Thymeleaf入门</title> <style type="text/css"> li.odd { background-color: #f0faaa; } </style> </head> <body> 一个超简单的Thymeleaf应用。从模版中读取数据: <div th:text="${user.userName }" /> <div th:text="${session.admin.userName }" /> 爱好:<li th:each="fav : ${user.favs}" th:text="${fav}" th:class="${favStat.odd}? 'odd'" /> <br /> 兴趣:<input type="radio" th:each="object : ${map.entrySet()}" th:text="${object.value}" th:id="${object.key}" name="chars" th:checked="${objectStat.index==0}?'checked'" /> </body> </html>