• Servlet 整合Thylemeaf (基于Maven构建)


          由于JSP的种种原因,现在web项目中视图层逐步转向视图模板:FreeMarker、Thylemeaf等,但是关于Thylemeaf的使用基本都是基于和Spring、SpringMVC 整合的,也有部分基于Servlet整合的(基于jar文件的形式),最近由于教学需要,和技术更新等web课程部分逐步弱化JSP,而去强化Maven和Thylemeaf,所以进行了Thylemeaf和Maven的整合,这对充分了解Thylemeaf和web相关的内容会有一个更深的了解,对于后面的内容也有一定的帮助。首先需要pom.xml文件需要导入thylemeaf的依赖:

    1. <dependency>
    2. <groupId>org.thymeleafgroupId>
    3. <artifactId>thymeleafartifactId>
    4. <version>3.0.15.RELEASEversion>
    5. dependency>

    web.xml文件配置(视图的前缀和后缀)

    1. <context-param>
    2. <param-name>prefixparam-name>
    3. <param-value>/WEB-INF/view/param-value>
    4. context-param>
    5. <context-param>
    6. <param-name>suffixparam-name>
    7. <param-value>.htmlparam-value>
    8. context-param>

    Thylemeaf的工具类(主要完成对页面进行渲染前的准备工作)

    1. import org.thymeleaf.TemplateEngine;
    2. import org.thymeleaf.context.WebContext;
    3. import org.thymeleaf.templatemode.TemplateMode;
    4. import org.thymeleaf.templateresolver.ServletContextTemplateResolver;
    5. import javax.servlet.ServletContext;
    6. import javax.servlet.ServletException;
    7. import javax.servlet.http.HttpServlet;
    8. import javax.servlet.http.HttpServletRequest;
    9. import javax.servlet.http.HttpServletResponse;
    10. import java.io.IOException;
    11. /**
    12. * Thymeleaf 视图处理
    13. * @author TonySong
    14. */
    15. public class ThymeleafViewServlet extends HttpServlet {
    16. private TemplateEngine templateEngine;
    17. @Override
    18. public void init() throws ServletException {
    19. //获取ServletContext对象
    20. ServletContext servletContext = this.getServletContext();
    21. //创建Thymeleaf解析对象
    22. ServletContextTemplateResolver templateResolver =
    23. new ServletContextTemplateResolver(servletContext);
    24. //设置模板模式为HTML
    25. templateResolver.setTemplateMode(TemplateMode.HTML);
    26. //从web.xml文件获取视图的前缀
    27. String prefix = servletContext.getInitParameter("prefix");
    28. System.out.println("prefix>>>>>>>>>>>>>"+prefix);
    29. templateResolver.setPrefix("/WEB-INF/view/");
    30. //获取后缀
    31. String suffix = servletContext.getInitParameter("suffix");
    32. System.out.println("suffix....>"+suffix);
    33. templateResolver.setSuffix(".html");
    34. //关闭缓存
    35. templateResolver.setCacheable(false);
    36. //设置编码方式
    37. templateResolver.setCharacterEncoding("utf-8");
    38. //实例化视图引擎
    39. this.templateEngine = new TemplateEngine();
    40. //设置视图引擎为templateResolver
    41. this.templateEngine.setTemplateResolver(templateResolver);
    42. }
    43. protected void processTemplate(String templateName, HttpServletRequest req, HttpServletResponse resp) throws IOException,ServletException{
    44. resp.setContentType("text/html;charset=utf-8");
    45. req.setCharacterEncoding("utf-8");
    46. //根据请求对象和响应对象和全局对象创建web上下文全局对象
    47. WebContext context = new WebContext(req, resp, getServletContext());
    48. //根据模板名称和全局对象并依据响应输出流来渲染页面: 前缀+名称+后缀 /WEB-INF/view/list.html
    49. this.templateEngine.process(templateName,context,resp.getWriter());
    50. }
    51. }

    Servlet:

    1. @WebServlet( urlPatterns = {"/list"})
    2. public class HelloServlet extends ThymeleafViewServlet {
    3. private StudentDao studentDao = new StudentDaoImpl();
    4. protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    5. String currentPage=req.getParameter("currentPage");
    6. Pager pager= this.studentDao.pageList(currentPage, 5);
    7. pager.setUrl("list");
    8. req.setAttribute("pager", pager);
    9. this.processTemplate("list", req, resp);
    10. }
    11. @Override
    12. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    13. String path = req.getServletPath();
    14. switch (path){
    15. case "/list": this.list(req, resp);break;
    16. }
    17. }
    18. }

  • 相关阅读:
    【无标题】
    【动态规划】动态规划经典例题 力扣&牛客
    scanpy filter总结
    oracle学习20-ora-00604和ora-00018
    10.MySQL 约束
    好用软件推荐
    Redis
    docker 部署 RabbitMQ
    Linux基础
    Python字典制作“编码本”“密码本”,“试炼”加、解密文本操作
  • 原文地址:https://blog.csdn.net/tonysong111073/article/details/126199306