00:00
那接下来我们来说第五小节,视图解析与模板引擎。首先所谓的视图解析指的就是spring boot在处理完请求以后,想要跳转到某个页面的这个过程,那我们经常使用的方式呢,就是我们处理完请求以后,可以转发或者重定向到一个指定的JSP页面,当然呢,我们现在使用spring boot boot呢默认打包方式,它是一个炸包,炸包呢是一个压缩包,我们JSP呢不支持在压缩包内编译的方式,所以我们4BOOT呢默认是不支持GSP的,那么想要进行页面渲渲染,页面跳转等这些功能,我们就需要引入第三方的模板引擎来进行实现,当然我们说这个GSP它呢其实也是一种模板引擎,那boot到底支持哪些第三方的模板引擎技术,我们可以参照spring boot官方文档,在using spring boot里边。我们看来看它的starts所有的场景启动器,看BOO官方能整合哪些场景,其中呢就有一个这个场景frame marker,它呢就是一个模板引擎们,Spring boot可以使用它来做我们的页面渲染,来做视图解析技术功能,以及我们的他们类次spring boot也可以整合它来做我们的视图解析功能,以及我们spring BOO也推荐使用我们的这个SIM Le来整合进行我们的视图解析。当然SIM Le呢是什么东西,我们可以百度来查一下,直接来到我们的这个官方文档SIM雷,来到这SIM雷官方呢,是这么来说说呢simli它是一个现代化的服务端的Java模板引擎,所以呢,也就是说既然是服务端的Java模板引擎,也就是说我们以后是我们的后台开发人员经常要使用SIM雷夫的,所以呢,我们SIM雷夫的它的这个优缺点也很明显,他的这个优点呢,就是因为他要面向我们后端开发人员,所以他的语法呢是非常。
01:53
当时简单非常贴近于我们以前使用GSP的方式,然而我们上手起来呢也非常快,但是它的缺点呢,就是这个模板引擎呢,并不是一个高性能的模板引擎,所以如果我们要开发高并发的应用,还想要页面跳转,那么最好啊,做一个前后分离,我们让职业的前端来做,或者呢,我们要做一个后台管理系统啊,我们这个后台管理系统还是一个高并发的,我们应该选取其他的模板引擎,而不应该选SIM,那我们一个简单的单体应用,我们可以可以来使用它,好,那么就来使用一下这个SIMSIM呢,我们整个的使用可以参照官方文档,包括呢,它这有一个示例,说SIM啊,它最大优点就是一个自然语言的模板,呃,非常方便,你使用起来呢,就这比如这是我们HTM2标签,你想要动态取值了啊,使用它的这个表达式动态取个值,接下来呢,就是SIM的一些关键语法TH什么什么th test就指的就是我们取出的这个值放在我们这个标签的这个文本里边,而且呢,如果我们取。
02:53
取出了值,它就放在里边,如果没取出值啊,我们这个标签呢,就用它标签里边的这个默认值,所以呢,相当于我们这个,即使是我们的这个前端开发人员把这个页面拿到以后呢,没有经过我们后台的渲染,他也有一些默认值啊,我们前后协调起来也比较方便来我们得测试了。再说这我们SIM live官方文档呢,参照这个啊,DOS里边using SIM live,我们大家可以下载PDF版,我们也可以来找它的这个线上文档read online。那么现在呢,就来测试一下整个simli该怎么使用,Simli的简单语法我们先来过一遍,因为大家都用过GSP,所以呢,Simli的整个语法呢,基本跟GSP非常像,比如SIM life可以使用一些这个表达式,第一个表达式,SIM的这些语法的总结,大家也可以参照官方文档第四小节,标准的语法,表达式语法,表达式语法呢,我们SIM官方可以兼容这五种表达式的写法,表达式就是动态获取值的。
03:53
这五种都是什么意思,老师也给大家总结了,比如Dollar大括号,就跟我们E拉表达式一样,Dollar负大括号动态取出一个值放在页面,然后呢,还有我们的星号大括号,这个simif呢,一般用于我们前面有一个复杂对象,那们星号呢就代表前面这个上下文对象,然后直接星号大括号写我们这个复杂对象里面的属性,就可以获取到这个复杂对象里面的这个值。然后呢,接下来还有我们的这个消息,我们取国际化消息,就用井号大括号,如果我们要构造一个超链接,我们就用an服大括号,我们使用an大括号构造的超链接,它可以自动的帮我们来拼上我们整个项目的访问路径,然后呢,包括我们的片段表达式,我们使用波浪线打call,这个片段表达式就类似于我们GSP使用的JSP include。那么以前呢,比如有一个公共页面,页面的这个头跟第二个页面,它的这两个头呢,导航条都是一模一样的,我们就可以把它抽取出来,第二个页面呢,直接JSP include把引入进来。
04:53
所以呢,我们这个片段表达式指的就是这个,当然我们下边测试了再说,还有我们simif里边常用的这些语法,那那我们以前怎么用,现在还怎么用,我们的文本值,用单引号啊,把整个文本值括起来,还有我们的数字随便写,我们也可以写不尔值,除false带有不尔值,空值呢,那就是捺小写的这个nu,然后呢,接下来变量,那就是one two three four,我们这些变量呢,中间不能有空格,这变量呢,一旦放到这些表达式里边,那么接下来就开始动态取值,还有我们的这个数学运算,加减乘除,还有我们的取啊取模等等,都支持一们的不尔运算,按二的二元运算,以及我们的非的这些一元运算,包括我们的呃,比较运算,大于小于各种等于的判断,以及等式判断都兼容,以及我们的条件运算,比如if前面成功了,接下来后面怎么办?还有我们的三元运算,前面成功了,做后面的,否则做我们最后的,以及我们这一块的这个啊,默认值前。
05:53
如果前面成功了啊,我们使得这儿呢,直接冒号,后边给它一个默认值,对吧?所以呢,等等等等,我们整个的这个用法呢,基本上跟我们的GSP很像,呃,唯一的有点区别的就是比如我们写GSP页面,我们想要给input光标签的这个Y6属性来赋值,我们以前在JSP里边呢,是在Y6这一块,在这呢写刀乐福大括号动态取值,只不过呢,我们这个SIM live变了,你想要给某个属性取值,使用的是R这个冒号,这就是simf的写法的意思呢,那就是我们要给它某一个属性给值,哪个属性呢?我们在这写Y6属性,它值是什么?我们可以用前面的表达式,如果值是一个链接,就用at服务,如果值是一个呃,国际化消息,就用井号的大括号来,这样获取值就行了,当然这种写法呢,你前比较复杂,也可以用下边,比如我们以前GSP给VALUE6取值是VALUE6等于Dollar。
06:53
大括号整什么?现在呢,有了SIM就是TH冒号Y6 TH冒号Y6就是我们接下来这个属性,经过SIM live解析,动态取出值来覆盖我们这个value就行了,包括我们也可以用来进行标签迭代,以及我们条件运算等等等等,我们现在就来诊断来简单测试一下。
07:15
怎么使用SIM来到官方文档,因为SIM live呢,我们想要整合,直接呢引入它的starter就行了,所以来到我们以前的这个啊WEB01里边啊,我们先来做一个简单的测试,我们引入SIM live的start depend,走这一块呢,前置的这一个路径还是spring boat,官方这是官方整合SIM live的这个start,来我们来稍等一下,让他来下载我们整个SIM live的依赖,那整合进来以后该怎么做,其实呢,我们现在我们来看一下这个SIM live该怎么使用,那直接来到下边,我们来记录一下,那simli的使用呢,也非常方便这个simli使用,使用首先呢,那就是第一个我们引入starter,引入starter,引入starter,我们接下来把这个SIM的starter完整拿过来,所以我们想要使用模板引擎,那我们就引入首先。
08:16
我们选中了simli,那么就来引SIM的starter,就是它我们只需要做的就是第一步引入simli starter加第二步,因为既然引了T的这个start,所以spring呢,其实已经自动配置好了,自动配置好了SIM,那怎么自动配置好的,我们可以大概分析一下我们SIM怎么自动配置好的,那大概就会有一个SIM live,因为我们影的是SIM它的,诶比如这有一个auto configuration SIM的自动配置control home,我们直接来到这,哎,我们来找SIM的auto configuration走,那SIM的auto呢,我们看到,诶这一块呢,这就是SIM已经自动配置好了,SIM已经自动配置好了,我们把这个自动配置好的这一块拿过来,来看看自动配置好的哪些,那么要做哪些它呢,自动配置好的这个规则呢?
09:16
我们大概来看一下,就是下边simli呢,它在呃官方给我们是这么来配置的,会给我们呃整个spring容器中放一个模板引擎的这个解析器,然后这些解析器呢就来指定,哎我们simif呢,有前缀有后缀,但是这些前后缀等等规则都是从这个properties就是SIM properties里边啊绑定的,我们后来再说,比如呢,它会给我们整个容器中放一个模板引擎spring time啊NG,这就是我们SIM的模板引擎,以及呢还呃SIM live的一些规则,SIM live的视图解析器,所以呢,它官方呢配好了两个东西,自动配置配好的,自动配好的策略,我们可以来看一下自动配好的策略,首先呢,第一个策略自动配好的第一个,那就是呢,它已经把我们这个啊,我们首先得。
10:16
知道所有这个SIM的配置属性都在这个里边,配置值都在这个里边,都在这个里边绑定着,我们把它拿过来叫similar properties。然后呢,它给我们配好了两个东西,第一个配置好了,看一下这个东西叫什么呢?叫SIM live的模板解析器,那个不看,我们主要看这个模板引擎,配好了这个模板引擎,然后SIM live的主引擎,它帮我们来放到容器中了,而且是跟我们这个spring整合的这个主引擎,然后呢,接下来它还配好了,配好了我们这个东西叫SIM的,呃,View reserver视图解析器,那什么是视图解析器,我们后来讲视图解析原理,我再来说配置好了这个,然后呢,要我们做的其实就是我们只需要直接开发页面就行了啊,我们只需要直接开发页面,只需要直接开发页面,那开发页面呢,就有一些规则,我们页面放哪等等,这些规则我们全全部呢参照这包括呢,我们来看视图解析器。因为我们以前。
11:31
还有视图解析器,我们整合spring spring mvc,视图解析器呢,可能还配过前缀后缀,我们的,包括我们的这个什么字符编码等等一大堆,所以呢,它的这个视图解析器也一样,它所有的这个配置大家看其实也都是从这个properties里边拿到的,Properties都是SIM,所以呢,我们看到这个properties里边呢,它有两个东西,一个叫默认的前缀叫class pass ten,一个呢叫HTMR,所以呢我们关键性把这两个拿过来知道吧,Simli的这个页面你给我放到类路径下timel里边,其实我们创建的整个spring boot工程一进来,然默认就会有一个time,所以这个里边以后就给我们放页面,然后呢,接下来我们的后缀是HTMR,也就是我们所有的SIM默认都是都会跳转到一个叉叉叉HTM2页面啊,这就是我们以后呢,页面要放到这个位置,前缀后缀人家都已经指定了。
12:31
那我们接下来直接开发,那既然SIM live引进来了,我们就来写一个SIM live的hello word我们给这个里边呢,我们放一个页面,比如我们就叫ci.htmmr这个页面,这个页面呢,哎,我们要新建一个HTMMR,我们最好在这直接新建一个HTMMR叫success2.ht,我们把以前的这个HTM2呢删掉,好我们这个二们来shift f6我们来给它改个名字,我们就叫success,好,我们这呢是一个HTML页面,我们SIM开发,首先页面呢要加一个模板,我们可以来参照SIM live的官方文档,我们所有的这个页面,最一开始呢,得有一个这一块说我们用的是SIM live的啊这个方式,诶在这有它的这个名称空间CTRLC,我们给这一加以后呢,下来我们就有提示了,比如我们在这写G什么什么,哎,我们就有提示了,所以我们把SIM。
13:31
名称空间先加进来,然后呢,我们就想让他给我们来打个招呼,比如这是H1标签,这个标签呢,我们想给它里边,比如我们呢,现在呢叫哈哈,如果我们把这个页面CTRLC我们放到外边,那前端呢看见的就是哈哈,但是呢,真正的这个内容是什么?我们应该经过后台模板渲染,比如我们发一个请求,发一个at归谷请求,来一个ctrler,哎,我们就叫我们现在来测试页面,跳转我们5u text测试视图的controltrler,好,然后呢,我们现在来写一个,既然我们要跳转页面,我们就不能写risk和controller,我们来写一个controlrler,然后呢,Public string,然后呢,我们就叫发一个at归故请求给我们去success页面,所以接下来我们要处理的请求get map处理的请求呢,比如我们就叫at硅谷,然后呢,这个请求处理完了以后,给我跳转到一个页面,跳转到哪个页面,因为按照SIM live官方的这个规则,我页面都在temps下边放。
14:31
缀有前缀,而且呢有后缀,所以我们在这儿呢,只需要写页面的这个名字,不用加HTML,因为我们后缀已经写了,它是HTM,所以我们跳到这个页面,当然我们想给页面放一些数据,那我们一般呢都是这么来写,来写写一个model,我们凡是给model里边放的数据,它会自动放到请求域中,Model中的数据会被放在请求域种,也就是相当于我们调用了request request.set和tribute这个方法啊,给它里边呢放了一个什么东西,所以呢,我来放谁呢,我们就给model里边来放一个非常简单的and attribute,我属性呢就叫message取出一个消息,消息值呢,就是啊,你好,At硅谷好,我们就来写一个式哈,所以我们想要到页面取出这个值也非常简单,直接来到页面,以前我们GSP的写法,前面可能要导一大堆等。
15:31
等等,那么SIM内呢,你只需要导一个名称空间,导了它以后呢,有提示你非要不倒它也行,然后呢,接下来我们在这一块写法,如果以前是GSP,那应该是Dollar符大括号,我们来取出message,但SIM呢,不一样,SIM的第一个语法就是我们说的这个,如果我们想要改变一个标签内的文本值,我们使用它th test th test呢,那就是我来修改这个标签的文本值,这个文本怎么取呢?我使用Dollar符大括号,所有域中的属性的取值我们都是Dollar乐符大括号,只有取国际化等等才用井号大括号了,And符了,所以我们来取一个它Dollar乐福大克呢,那我就来取一个值,取谁呢?我们就叫message好,然后呢,我们再来写一个,我们再来一个H2吧,H2H2里边呢,有一个A标签,A标签呢要去百度,只不过呢,A标签的这个超链接到底要去哪,比如呢,我们默认让他去呢,去3W点啊哈哈。
16:31
我们点at硅谷的an硅谷点com,但是呢,真正只要去哪,你给我动态取出来,那我就可以放在域中啊,我们给model里边再放一个点and,比如呢,我们放一个link,还要去呢,去的这个地址呢,我们来放上HTTP冒号,然后呢3w.do.com,所以呢,我们可以放一个这个地址,那放这个地址呢,我们也可以在这来取出这个地址。
17:00
去百度,那我们怎么写呢?要现在呢,我们以前是来取出文本值,现在呢,我们相当要改这个属性的值,如果是GSP是直接在这Dollar了,夫大括号是E来EL表达式的,那SIM要求你改哪个属性,就是GH这个属性名,那么属性名呢,叫h ref,好我们就来写它,然后等于什么,那么可以到大括号取值,取谁呢?因为我们现在把这个链接的值放在了这个ink里边,放在域中了,好,所以呢我们就来取它,然后有些同学说,诶不是说S有一个链接取值的方式是我们的这个叫。Anf大括号嘛,好,我们可以给anf大括号也给大家取一个,大家可以看一下两个有什么区别,好,现在我们这个就写好了,非常方便使用。SIM live呢,第一个引入SIM live的这个啊,Starter,第二个接下来我们就直接开发页面就行了,所以因为所有的东西都被自动配置好了,我们只需要把页面放在这个,呃,Timelas下,他们都是HTM2页面就行,下来我们直接开发来我们的这个页面开发,页面开发呢,我们最终开发出来就是这个效果,这个效果核心呢,大家注意,哎,咱们这引入了一个SIM live的这个名称空间啊,这一块呢,注意一下剩下的这个取值语法就这么来写,我们先来写一个hello word,下节课呢,我们来完整测试一下,好,我们现在来重新启动我们的这个BOOT05,把这个项目测试一下。
18:44
好,现在呢,页面启动起来,启动起来呢,接下来我们在这,呃,我们发送请求,我们只要发送at归故请求,那就会来到我们的success页面,可以来看一下local。八零八零下的at特硅谷请求回车,好,来到success页面,大家看取出的值叫你好,硅谷,我们原页面的这个success呢叫啊哈哈,我们把原页面复制过来,目标页面复制过来,所以我们说simli的一大优点就是你把这个原页面直接发给前端,前端打开,哎,它页面呢也能运行的,它是没有经过我们模板引擎的默认值,而如果只要一旦经过我们模板引擎刷新,然后呢,这就是取出我们的动态值,然后接下来我们来看取出这两个取出的值,首先们来看啊,取出我们的link的值,安特符大括号,大家注意,如果我们是取Dollar符大括号,然后Dollar符大括号呢,相当于真正的取出了link值,而an符大括号,An符大括号这是什么呢?这相当于他把link认为是一个要去的地址,然后呢,他给你拼装到我们的这个地址,但是而且我们这是相对路径写法,如果我写。
19:59
绝对路径写法大家注意啊,就是我加一个杠,像我要去当前项目下的link,所以呢,对于艾服大括号里边来说,这个里边的所有东西都是什么,哎,都是我们的这个字符串,所以他只需要把这个字符串拼装一下就行了,哎,这就是他要去的地址,而这一块呢,大家感觉好像没有什么,呃,没有什么效果,那真正的效果在这儿,如果我们这个项目有访问的前置路径,它还会给这个地址动态加上前置路径,比如我们修改一下项目的配置文件,项目配置文件里边呢,我们可以来改给一个前置路径,这这个前置路径呢,叫s pass contextest和pass来,我们这叫访问路径,我们服务器的访问路径呢,比如我们就叫,呃,就叫杠word来,我们整个路径呢,加一个word,所以后所有的请求都必须以杠位的开始,这就是我们的项目的访问路径。
20:54
啊,我们让它启动,启动以后呢,我们看到他们看的在8080端口启动,而整个项目的访问路径是杠word,所以如果我们在这来访问原来的an特硅谷,这就已经没法用了,我们必须访问整个项目的杠word的at特硅谷,其他的请求也都得加杠word,所以我们一旦一有杠word以后,来右键查看源代码,它呢也会自动的给这个link加上我们项目的访问路径,也非常方便。好这就是我们对SIM这个模板引擎的出体验,我们呢只需要给我们这个request域中放一些数据,然后呢去页面,只要跳转到页面,然后呢我们默认就能取出这些数据的值,那么下节课呢,就来做这么一个小实验,老师在这呢给大家给了一个简易的后台管理系统,我们可以给大家打开这后台管理系统里面呢,有非常多的页面,我们把后台管理系统的整个框架搭出来,比如这个后台管理系统,我们来随便来打开一个页面吧,它有没有登录页,哎,它有这个首页。
21:54
首页里边呢,有非常多的页面,你点哪个就跳转到哪个页面来,可以看一下啊,好,点这个跳转到这个页,点这个跳转到这个页,包括呢,我们肯定也有登录页,注册页啊,我们来让他退出啊,我们来到这个看有没有登录页login.htmmr走哎,它也有登录页,我们点一个对号也能登进来,包括呢我们页面也能跳转,我们来看,如果我们使用SIM模板引擎将整个这个页面整合到spring boot里边该怎么做?
我来说两句