由于本人对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>