使用模板来实现页面

模板其实就是一个(缺失了一些关键信息)的html页面,我使用的是Thymeleaf模板

使用模板的步骤:
(1)先去编写html页面,使用thymeleaf中的一些(特殊标记符号,也就是占位符比如th:each,th:text="${}",把这个html页面中的关键数据进行占位

(2)Servlet代码中获取到这些关键数据,再通过thymeleaf把这些关键性数据替换到Html页面中的特殊标记符号,也就是占位符中

(3)而在对关键性数据进行替换之前,要先对thymeleaf模板进行初始化

初始化模板一般是4个步骤(其实就是造引擎,找页面给引擎):

(1)创建一个TemplateEngine对象(模板引擎),负责把在Servlet代码中获取到这些关键数据,替换到模板中

(2)创建一个ServletContextTemplateResolver(servlet上下文模板解析器),负责找到html页面在哪,并加载供engine(引擎)来使用

(3)给resolver(解析器)设置一些属性,让他能够找到html模板页面在哪(啥样的文件被加载到内存中作为模板)

一般是用前后缀两个属性就可以找到:

① resolver.setPrefix("路径"),表示前缀,就是从那个路径开始(一般是在项目webapp/WEB-INF/template/路径下存放所有的模板文件)

② resolver.setSuffix("路径"),表示后缀(一般是 .html)

(4)找到了模板页面要交给engine引擎,所以就把resolver和engine要关联起来

方法就是引擎有一个方法engine.setTemplateResolver(解析器对象)

初始化完毕后模板引擎就可以使用解析到的模板html页面,也就可以使用thymeleaf来进行渲染

初始化有一个问题:同一个引擎要在很多servlet之间共享,可以使用ServletContext实现

把初始化engine的工作交给ServletContext,同时也把engine实力交给ServletContext管理

此时,因为任意servlet都能拿到同一个ServletContext对象,也就可以拿到同一个engine对象了

实现的方法:

希望ServletContext初始化完毕后立即初始化engine

借助监听器Listener

创建一个配置模板的类来实现ServletContextListener接口,并把这个类注释为@WebListener来声明为一个监听器,监听两个部分:ServletContext初始化完毕,ServletContext销毁完毕

(4)进行具体渲染

①渲染的时候需要定义“数据集合”这样的概念

使用WebContext,功能就是把要替换的数据收集起来,统一的传给模板引擎

收集的方式:webContext.setVariable()参数是一个或多个键值对,键就是${}里面的数据名称,值就是收集到的数据

②模板引擎进行渲染

模板引擎engine.process()参数a是模板文件名字(用那个模板页面),b是WebContext对象(传入收集到的数据),最后返回值就是一个html页面

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DU777DU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值