由于JSP的种种原因,现在web项目中视图层逐步转向视图模板:FreeMarker、Thylemeaf等,但是关于Thylemeaf的使用基本都是基于和Spring、SpringMVC 整合的,也有部分基于Servlet整合的(基于jar文件的形式),最近由于教学需要,和技术更新等web课程部分逐步弱化JSP,而去强化Maven和Thylemeaf,所以进行了Thylemeaf和Maven的整合,这对充分了解Thylemeaf和web相关的内容会有一个更深的了解,对于后面的内容也有一定的帮助。首先需要pom.xml文件需要导入thylemeaf的依赖:
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.15.RELEASE</version>
</dependency>
web.xml文件配置(视图的前缀和后缀)
<context-param>
<param-name>prefix</param-name>
<param-value>/WEB-INF/view/</param-value>
</context-param>
<context-param>
<param-name>suffix</param-name>
<param-value>.html</param-value>
</context-param>
Thylemeaf的工具类(主要完成对页面进行渲染前的准备工作)
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;
/**
* Thymeleaf 视图处理
* @author TonySong
*/
public class ThymeleafViewServlet extends HttpServlet {
private TemplateEngine templateEngine;
@Override
public void init() throws ServletException {
//获取ServletContext对象
ServletContext servletContext = this.getServletContext();
//创建Thymeleaf解析对象
ServletContextTemplateResolver templateResolver =
new ServletContextTemplateResolver(servletContext);
//设置模板模式为HTML
templateResolver.setTemplateMode(TemplateMode.HTML);
//从web.xml文件获取视图的前缀
String prefix = servletContext.getInitParameter("prefix");
System.out.println("prefix>>>>>>>>>>>>>"+prefix);
templateResolver.setPrefix("/WEB-INF/view/");
//获取后缀
String suffix = servletContext.getInitParameter("suffix");
System.out.println("suffix....>"+suffix);
templateResolver.setSuffix(".html");
//关闭缓存
templateResolver.setCacheable(false);
//设置编码方式
templateResolver.setCharacterEncoding("utf-8");
//实例化视图引擎
this.templateEngine = new TemplateEngine();
//设置视图引擎为templateResolver
this.templateEngine.setTemplateResolver(templateResolver);
}
protected void processTemplate(String templateName, HttpServletRequest req, HttpServletResponse resp) throws IOException,ServletException{
resp.setContentType("text/html;charset=utf-8");
req.setCharacterEncoding("utf-8");
//根据请求对象和响应对象和全局对象创建web上下文全局对象
WebContext context = new WebContext(req, resp, getServletContext());
//根据模板名称和全局对象并依据响应输出流来渲染页面: 前缀+名称+后缀 /WEB-INF/view/list.html
this.templateEngine.process(templateName,context,resp.getWriter());
}
}
Servlet:
@WebServlet( urlPatterns = {"/list"})
public class HelloServlet extends ThymeleafViewServlet {
private StudentDao studentDao = new StudentDaoImpl();
protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String currentPage=req.getParameter("currentPage");
Pager<Student> pager= this.studentDao.pageList(currentPage, 5);
pager.setUrl("list");
req.setAttribute("pager", pager);
this.processTemplate("list", req, resp);
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String path = req.getServletPath();
switch (path){
case "/list": this.list(req, resp);break;
}
}
}