语法不用全方位学因为thymeleaf在开发中基本上用的比较少不用花大量时间去学thymeleaf但是得学因为直接在servlet里面去out.print打html代码是很难受的所以就分离出来了是模板引擎当前项目的弊端当前在java代码中编写了大量html代码职责不分离应该是专门搞前端的人搞前端。后端应该搞业务处理而不是弄视图层的这些。jsp解决的不太好现在用thymeleaf了概述解释说明1jsp离不开web容器thymeleaf除了可以在web容器中运行也可以没有web容器作为一个独立的环境去运行2自然模板在html文件中写了thymeleaf的语法就算你没有thymeleaf的环境浏览器也能打开最起码不会报错。3静态原型就是html结尾的文件4thymeleaf是与spring框架是深度集成的spring中默认支持的模板就是thymeleaf模板学一个技术他是持续更新的社区活跃就没啥问题5java模板引擎是一种工具是一种动态网页技术而且是一种模板引擎技术可以将动态的数据静态的模板文件两个动态的融合在一起生成一个动态的html代码thymeleaf以下几点偶尔还是会用的不然springboot不会说还集成他了早就给他干掉了。现在springboot里面还深度集成了thymeleaf说明项目开发中还是多多少少会用的。处理流程模板文件.html结尾的文件th: 代表thymeleaftext一个指令生成一个字符串将该字符串设置到p标签中如果有内容就把原来的Hello,Alice覆盖清空了——为什么这样写上面说了支持自然模板就是如果没有thymeleaf环境你这个html的页面还是正常显示。会显示这个HelloGuest, 如果有thymeleaf环境就显示thymeleaf的了。显示的就是动态页面了就不是静态的了。动态数据是动态的比如下面的name可以是张三可以是李四可以是王五你是张三就是张三你是李四就是李四你是王五就是王五。美元符大括号${}代表从域对象中取数据。处理流程解析先解析html模板处理表达式解析的时候会遇到表达式会计算表达式得出值渲染然后把值设置到里面这个叫渲染如果有特殊字符会自动转义防止xss攻击比如你放一段js代码门都没有括号直接给转成符号了。thymeleaf离开tomcat照样可以可以在非web的环境中使用。thymeleaf里面没有java代码jsp不是这样的jsp里面是可以写java代码的。jsp本来是视图技术你又让里面可以编写java代码会显得很乱所以thymeleaf里面直接就避免了不允许。使用thymeleafjava web项目中集成thymeleaf刚开始使用thymeleaf是有点麻烦的。引入jar包首先要引入一堆jar包:编译不报错只需要themeleaf…这个jar包只需要将他放进去写监听器(web容器集成thymeleaf)注意以后如果要用springboot框架里面帮我们把这个代码给写好了我们不用写这个监听框架都封装好了。但是你在springboot里面一定有办法改这个东西springboot里面一定有配置文件就是那个application.yaml文件配置文件里面是可以配置这些东西的配上就行了这些代码实际上是不需要你写的。我下面这个也是没写粘贴过来的。写个监听器(web容器集成thymeleaf的步骤)第一步弄个桥梁然后把桥梁对象放到模板解析器对象里创建模板解析器第二步模板解析器设置模板文件存放位置模板文件扩展名模板解析器主要是以什么格式解析这个文件缓存禁用还是开启(设置为true意思就是他生成这个模板就在缓存里放着下次再用的时候他就不去解析这个模板了直接从缓存里取出这个模板所对应的文件直接访问就省去了解析的过程比较适合在生产环境里去设置成true因为生产环境你不会再改代码了模板文件你是不是只希望在服务器启动阶段只解析一次以后用户访问你不希望他模板再解析了就从缓存里面走就行了开发阶段改成false就是只要改模板文件就重新解析不想让他走缓存)第一二步创建一个模板解析器出来并设置好模板解析器的一些相关的属性然后解析器有了后要创建模板引擎模板引擎里面要包含解析器。从此把模板引擎和桥梁对象存到application最大的域里面后面servlet里面要使用桥梁对象和模板引擎对象将来用的话用模板引擎就行了他就可以去解析文件编写servlet里面写上的name下面的页面里面会取出来。然后写上下面页面的名字first下面一大行代码将来不管哪个servlet里面都要写除非包装到工具类里面我们调用工具类就行了。下面的代码解释第一句防止响应时的中文乱码问题第二句拿servletContext对象三四句从servletcontext对象里面去拿之前塞进去的桥梁对象再通过application.Application去拿模板引擎。就是从application域里面去取桥梁对象和模板引擎第五句获取thymelef里面提供的WebContext获取上下文的对象。将来我们也可以把数据存在Web上下文对象里面我们也可以使用${}的语法从这个上下文对象里面取数据也是可以的。最后一句用模板引擎去处理这个first他会这样做把你监听器里基础路径拿出来放到first的位置上然后把上面那个扩展名.abc也拿过来拼上这样他就找到了这个文件找到这个文件后模板引擎就开始解析这个文件解析这个文件的过程中他把那个html代码和动态的数据融合在一起最终生成一个静态的html代码然后html代码响应给浏览器上面的WebContext也作为参数传进去然后response.getWriter获取响应流相当于把这个流给了这个模板引擎模板引擎将来把这个html代码在响应给浏览器的时候这个模板引擎会用这个对象来完成html代码的响应写页面代码这里定的这个按照上面路径建templates文件夹再在里面新建文件在里面写html代码必须要加上命名空间然后下面写的美元符号大括号就会从域对象里面取出东西name放里面整体是个计算表达式这个计算表达式执行结果会把原来的那个html内容覆盖掉也可以从WebContext里面取数据塞里面。运行结果其他说明现在文件是.abc结尾这样在idea里面写上html代码太费事了idea不会提示啥的可以改成.html结尾的但是还是不是html的文件不是一样的但是你浏览器能打开就像上面说的他是一个静态的除非thymelef引擎解析了才能动态。thymeleaf添加日志框架介绍日志作用thymeleaf语法写错后台会打印日志信息不加日志也行只不过thymeleaf语法解析报错后你看不见为了方便调试不然出了错后台连个错误信息都没有不好调错。在这里引入了这个thymeleaf的日志框架。用的是logback。上面引入的slfj只是一套接口不是具体实现日志门面只是一套抽象的规范对日志门面实现的框架非常多log4j, logback这里用logback因为spring框架默认集成的日志框架就是logback集成如何集成按照步骤来就行了第一步引入logback的jar包第二步添加配置文件必须放在根路径下(src就是根路径下面新建文件)文件名必须叫这个名字文件内容下面的给粘贴进去然后如果你需要调节日志的级别可以调节他的level日志级别越低日志信息越详细日志级别越高日志信息越简洁。配置error表示你只有在发生错误的时候才会去打印日志调试这时候出错了就会打印错误信息就是经常看见的这些东西thymeleaf必须掌握的语法基础模板结构(必须掌握)首先上面说过了要用thymeleaf一定要加上命名空间th是固定写法不能写成别的网址也不能写成别的必须写thymeleaf官网地址th开头然后有个texttext你可以认为是一个表达式美元符大括号就相当于从域里面取数据取完数据整个表达式执行执行结果把html里面那个覆盖替换掉几乎每一个标签下都能用他不只是演示的标签,,标签等都行所有thymeleaf属性以th开头变量表达式掌握两个就行了一个是th:text 一个是th:utext他们都可以把我们变量里的数据取出来只不过取出来的东西一个是html代码的话text的只会帮html代码当做普通的字符串来处理不会对html代码进行解析执行如果是utext如果里面是html代码的话会把他解释并执行建议用text的因为可以防止xss攻击就算是html代码只会当普通字符串处理如果是utext对js和html解释执行就相当于给他机会了。text的经常用utext的不咋用但是得说一下这个代码演示条件判断在thymeleaf里面if和unless都是独立的语法没有联系不像if else这两个是单独使用的合起来可以模拟一个if else演示演示二关于if的小细节vo是javaee的设计模式之一dao指的是数据的访问对象vo专门做页面展示的演示建一个vo:创建vo并塞入属性页面取数据键.值来取实际上.name是调用的get方法可以在这里打印看下是不是调用了执行结果演示二获取admin:发现出了异常解析异常OGNL导航语法表达式异常没有isAdmin原因生成的get方法不叫getIsAdmin叫getAdminidea生成的事情修改改页面代码或把get方法改个名字都行运行结果:循环遍历||两个竖线可以做字符串的拼接连接与路径给我们动态生成url项目的名字写上下面这个路径后会自动在前面给我们加上项目的名字后面小括号可以加上参数表单绑定(重点)在form标签上加一个th:object然后从域对象或变量取出来一个对象放在object上面对象有了后里面不是有表单项吗表单项你想取数据语法*{}星号大括号表示从user对象里面取出来username属性但是这个不是必须的如果你没写th:object在下面这样写${对象.属性}也可以演示成功用美元符方式小总结片段复用就是在一个网页中有可能每一个页面都包含一个公共的部分比如网页头部部分在每一个网页都要写一遍一模一样。我们把公共的部分提取出来放到单独的html里面需要用的时候把他引进来定义公共片段部分再引入片段演示定义片段引用在当前页面也可以定义和引用实用工具函数这里只提两个想学的话去看下官方文档在thymeleaf中给我们提供了非常多的工具类这些工具类的用法统一都是${#工具名.调用方法}官网可以在线看文档也可以下载pdf格式的在线看演示thymeleaf变量查找顺序如果webContext和httpServletRequest里面存一样的优先从webContext里面取里面没有才会从request里面取向session和servletContext里绑定数据thymeleaf里面内置了sesson和application对象用于从session和application域里面取数据运行结果域总结session和application要加前缀request和webContext不用前缀但是有个优先级servlet就三大域thymeleaf里面多了一个webContext一共就这四个直接取从webContext和request里面按照优先级取param对象thymeleaf里面还内置了一个param对象可以取用户在浏览器地址栏上提交的查询参数的数据然后测试时手动输入参数场景用户发了这样一个请求提交了这样一个查询参数你想获取后面提交的数据就这样获取就行了回车数据取出来了getAttribute和getParameter区别区分下两个八竿子打不着一个从域里面取数据一个获取用户提交的数据表单里的或者url里面的thymeleaf内联js语法