由于JSP的种种原因,现在web项目中视图层逐步转向视图模板:FreeMarker、Thylemeaf等,但是关于Thylemeaf的使用基本都是基于和Spring、SpringMVC 整合的,也有部分基于Servlet整合的(基于jar文件的形式),最近由于教学需要,和技术更新等web课程部分逐步弱化JSP,而去强化Maven和Thylemeaf,所以进行了Thylemeaf和Maven的整合,这对充分了解Thylemeaf和web相关的内容会有一个更深的了解,对于后面的内容也有一定的帮助。首先需要pom.xml文件需要导入thylemeaf的依赖:
- <dependency>
- <groupId>org.thymeleafgroupId>
- <artifactId>thymeleafartifactId>
- <version>3.0.15.RELEASEversion>
- dependency>
web.xml文件配置(视图的前缀和后缀)
- <context-param>
- <param-name>prefixparam-name>
- <param-value>/WEB-INF/view/param-value>
- context-param>
-
- <context-param>
- <param-name>suffixparam-name>
- <param-value>.htmlparam-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
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;
- }
- }
- }