Article directory
009- Thymeleaf template
9.1 Introduction
不使用jsp
jsp早就过时了
使用 Thymeleaf 模版 代替jsp
9.2 First example
9.3 Expressions
表达式是在页面获取数据的一种 thymeleaf 语法。类似 ${key}
(1) Standard variable expression
语法:${key}
作用:获取key对应的文本数据,key 是request作用域中的key,
使用request.setAttribute()或者model.addAttribute()都可以
在页面中的 html标签中,使用 th:text="${key}"
(2) Select variable expression
星号变量表达式
语法: *{key}
作用: 获取这个key对应的数据, *{key}需要和th:object 这个属性一起使用。
目的是简单获取对象的属性值。
(3) Link expression (url expression)
语法:@{链接url}
说明:主要用于链接、地址的展示,
可用于<script src="...">、<link href="...">、<a href="...">、<form action="...">、
<img src="">等,可以在 URL 路径中动态获取数据
9.4 Properties
大部分属性和 html 的一样,只不过前面加了一个 th 前缀。
加了 th 前缀的属性,是经过模版引擎处理的。
属性是放在html元素中的,就是html元素的属性,加入了th前缀。属性的作用不变。
加入上th,属性的值由模板引擎处理了。在属性可以使用变量表达式。
例如:
<form action="/loginServlet" method="post"></form>
<form th:action="/loginServlet" th:method="${methodAttr}"></form>
(1) Basic attributes
(2)th:each
Loop list collection:
loop array:
Loop the List collection:
List and map collection nesting:
(3)th:if 和 th:unless
(4)th:switch 和 th:case
(5)th:inline
9.5 Literals
9.6 String concatenation
9.7 Operators
算术运算: + , - - , * , / , %
关系比较 : > , < , >= , <= ( gt , lt , ge , le )
相等判断: == , != ( eq , ne )
<div style="margin-left: 400px">
<h3>使用运算符</h3>
<p th:text="${age > 10}">年龄大于 10 </p>
<p th:text="${ 20 + 30 }">显示运算结果</p>
<p th:if="${myuser == null}">myuser是null</p>
<p th:if="${myuser eq null}">myuser是null</p>
<p th:if="${myuser ne null}">myuser不是null</p>
<p th:text="${isLogin == true ? '用户已经登录' : '用户需要登录'}"></p>
<p th:text="${isLogin == true ? ( age > 10 ? '用户是大于10的' : '用户年龄比较小') : '用户需要登录'}"></p>
</div>
三元运算符:
表达式 ? true的结果 : false的结果
三元运算符可以嵌套
9.8 Basic built-in objects
模板引擎提供了一组内置的对象,这些内置的对象可以直接在模板中使用,
这些对象由#号开始引用
#request 表示 HttpServletRequest
#session 表示 HttpSession
session 是#session的简单表示方式, 用来获取session中指定的key的值
#session.getAttribute("loginname") == session.loginname
param 表示请求的参数集合
这些是内置对象,可以在模板文件中直接使用。
文档地址:
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#web-context-namespaces-for-requestsession-attributes-etc
9.9 Built-in utility objects
http://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html
#dates
#numbers
#strings
#lists
null handling
9.10 Content reuse (custom template)
模板是内容复用, 定义一次,在其他的模板文件中多次使用。
模板使用:
1.定义模板
模板定义语法:
th:fragment="模板自定义名称"
例如:
<div th:fragment="head">
<p>
动力节点-java开发
</p>
<p>
www.bjpowernode.com
</p>
</div>
2.使用模板
1) ~{templatename :: selector}
templatename: 文件名称
selector: 自定义模板名称
2)templatename :: selector
templatename: 文件名称
selector: 自定义模板名称
对于使用模板:有包含模板(th:include), 插入模板(th:insert)
010- Summary
Spring + SpringMVC + SpringBoot
创建对象的:
@Controller: 放在类的上面,创建控制器对象,注入到容器中
@RestController: 放在类的上面,创建控制器对象,注入到容器中。
作用:是一个复合注解,包括@Controller,@ResponseBody,
使用这个注解的类里面的控制器方法的返回值都是数据
@Service : 放在业务层的实现类上面,创建service对象,注入到容器
@Repository : 放在dao层的实现类上面,创建dao对象,放入到容器。
没有使用这个注解,是因为现在使用MyBatis框架,
dao对象是MyBatis通过代理生成的,不需要使用@Repository,所以没有使用。
@Component: 放在类的上面,创建此类的对象,放入到容器中。
赋值的:
@Value : 简单类型的赋值
例如 在属性的上面使用
@Value("李四")
private String name
还可以使用@Value,获取配置文件者的数据(properties或yml)。
@Value("${server.port}")
private Integer port
@Autowired: 引用类型赋值自动注入的,支持byName, byType. 默认是byType 。
放在属性的上面,也可以放在构造方法的上面。
推荐是放在构造方法的上面
@Qualifer: 给引用类型赋值,使用byName方式。
@Autowird, @Qualifer都是Spring框架提供的。
@Resource : 来自jdk中的定义, javax.annotation。
实现引用类型的自动注入, 支持byName, byType.
默认是byName, 如果byName失败, 再使用byType注入。在属性上面使用
其他:
@Configuration : 放在类的上面,表示这是个配置类,相当于xml配置文件
@Bean:放在方法的上面, 把方法的返回值对象,注入到spring容器中。
@ImportResource : 加载其他的xml配置文件, 把文件中的对象注入到spring容器中
@PropertySource : 读取其他的properties属性配置文件
@ComponentScan: 扫描器 ,指定包名,扫描注解的
@ResponseBody: 放在方法的上面,表示方法的返回值是数据, 不是视图
@RequestBody : 把请求体中的数据,读取出来, 转为java对象使用。
@ControllerAdvice: 控制器增强, 放在类的上面, 表示此类提供了方法,可以对controller增强功能。
@ExceptionHandler : 处理异常的,放在方法的上面
@Transcational : 处理事务的, 放在service实现类的public方法上面, 表示此方法有事务
SpringBoot中使用的注解
@SpringBootApplication : 放在启动类上面,是复合注解,包含了
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
MyBatis相关的注解
@Mapper : 放在接口的上面,让MyBatis找到接口, 创建他的代理对象
@MapperScan :放在主类的上面 , 指定扫描的包, 把这个包中的所有接口都创建代理对象。 对象注入到容器中
@Param : 放在dao接口的方法的形参前面, 作为命名参数使用的。
Dubbo注解
@DubboService: 在提供者端使用的,暴露服务的, 放在接口的实现类上面
@DubboReference: 在消费者端使用的, 引用远程服务, 放在属性上面使用。
@EnableDubbo : 放在主类上面, 表示当前引用启用Dubbo功能。
Quote template syntax:
1) ~{templatename :: selector}
templatename: 文件名称
selector: 自定义模板名称
2)templatename :: selector
templatename: 文件名称
selector: 自定义模板名称
对于使用模板:有包含模板(th:include), 插入模板(th:insert)