SpringBoot整合thymeleaf,完成页面的显示
1、创建SpringBoot项目

引入SpringWeb模板
引入thymeleaf模板

编写配置文件
# thymeleaf页面缓存设置(默认为true),开发中方便调试应设置为false,上线稳定后应保持默认truespring.thymeleaf.cache=false
创建web控制类
在com.slin.controller包下,创建一个控制类@Controllerpublic class LoginController {// 获取并封装当前年份跳转到登录页login.html@RequestMapping("/toLoginPage")public String toLoginPage(Model model){model.addAttribute("currentYear", Calendar.getInstance().get(Calendar.YEAR));return "login"; //去到resources/templates下面找到login这个页面,后缀是html,并携带信息过去}}

4.创建模板页面并引入静态资源文件
在“classpath:/templates/”目录下引入一个用户登录的模板页面login.html
<!DOCTYPE html><html lang="en" xmlns:th="http://www.thymeleaf.org"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1,shrinkto-fit=no"><title>用户登录界面</title><link th:href="@{/login/css/bootstrap.min.css}" rel="stylesheet"><link th:href="@{/login/css/signin.css}" rel="stylesheet"></head><body class="text-center"><!-- 用户登录form表单 --><form class="form-signin"><img class="mb-4" th:src="@{/login/img/login.jpg}" width="72" height="72"><h1 class="h3 mb-3 font-weight-normal">请登录</h1><input type="text" class="form-control"th:placeholder="用户名" required="" autofocus=""><input type="password" class="form-control"th:placeholder="密码" required=""><div class="checkbox mb-3"><label><input type="checkbox" value="remember-me"> 记住我</label></div><button class="btn btn-lg btn-primary btn-block" type="submit" >登录</button><p class="mt-5 mb-3 text-muted">© <spanth:text="${currentYear}">2019</span>-<spanth:text="${currentYear}+1">2020</span></p></form></body></html>

5.效果测试
启动主程序,然后从页面访问
到此,SpringBoot对thymeleaf的引用已经OK。后续的也是这种类型。
配置国际化页面(基础版)
1、创建文件夹,创建配置文件
在项目的类路径resources下创建i18n的文件夹,并在该文件夹中根据需要编写对应的多语言国际化配置文件login.properties(默认配置文件)、login_zh_CN.properties(中文配置)和login_en_US.properties英文配置文件 

login.tip=请登录login.username=用户名login.password=密码login.rememberme=记住我login.button=登录
创建配置文件要遵循的命名规则
Spring Boot默认识别的语言配置文件为类路径resources下的 messages.properties;其他语言国际化文件的名称必须严格按照“文件前缀名语言代码国家代 码.properties”的形式命名 
(那么自定义的login…配置文件它是不会自动加载的,因为不是 messages.properties,要让这些配置文件生效,就需要一个基础名配置。)
在项目类路径resources下自定义了一个i18n包用于统一配置管理多语言配置文件,并 将项目默认语言配置文件名自定义为login.properties,因此,后续还必须在项目全局配置文件中进行 国际化文件基础名配置,才能引用自定义国际化文件。
2. 编写配置文件
打开项目的application.properties全局配置文件,在该文件中添加国际化文件基础名设置,内容 如文件
# 配置国际化文件基础名spring.messages.basename=i18n.login

spring.messages.basename=i18n.login  设置了自定义国际化文件的基础名。
i18n表示国际化文件相在项目类路径resources的位置
login表示多语言配置文件的前缀名
如果开发者完全按照 Spring Boot默认识别机制,在项目类路径resources下编写messages.properties等国际化文件,可以 省略国际化文件基础名的配置 
整到这里就可以结合thymeleaf以及表达式,来实现语言切换。
通过thymeleaf表达式,用#{},因为它可以获取国际化配置,根据login.tip这个key来显示其值。


重启看效果
重启之后能正常显示,说明国际化切换成功。它是根据请求头。更具体点就是根据区域信息解析器LocalResovel 返回封装的信息判断的。


配置国际化页面(升级版)
下面实现自定义区域信息解析器来实现手动切换语言环境。
1、现在login页面中添加两个链接标签

自定义一个区域信息解析器,覆盖原来的,从而通过接收前端传过来的参数来判断所要显示的语言环境。
创建一个文件夹,再在文件夹下面创建一个自定义解析器类。
config.MyLocaleResovel。让他实现LocaleResolver,重写里面的方法
还需要将MyLocaleResovel生成实例,存到容器中,这样才能覆盖原来的配置文件:添加@Configration
//通过@Configuration把MyLocaleResovel生成实例,存到容器中,这样才能覆盖原来的配置文件// 标明它是一个配置类,并且扫描@Configurationpublic class MyLocaleResovel implements LocaleResolver {// 自定义区域解析方式@Overridepublic Locale resolveLocale(HttpServletRequest httpServletRequest) {// 获取页面手动切换传递的语言参数l zh_CN en_USString l = httpServletRequest.getParameter("l");// 获取请求头自动传递的语言参数Accept-Language(因为可能存在传递过来用空串,这时要根据语言参数判断)String header = httpServletRequest.getHeader("Accept-Language");Locale locale=null;// 如果手动切换参数不为空,就根据手动参数进行语言切换,否则默认根据请求头信息切换if(!StringUtils.isEmpty(l)){// 根据下划线进行分割String[] split = l.split("_");// 根据切割后的两个值,来构建一个locale对象,来构建它是一个中文环境还是英文环境。locale=new Locale(split[0],split[1]);}else {// 如果参数为空,那么就直接用请求头来切割判断,封装locale// Accept-Language: en-US,en;q=0.9 zh-CN;q=0.8,zh;q=0.7String[] splits = header.split(",");String[] split = splits[0].split("-");locale=new Locale(split[0],split[1]);}return locale;}@Overridepublic void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {}// 将自定义的MyLocalResovel类重新注册为一个类型LocaleResolver的Bean组件,存到容器中// 这时候自定义的MyLocaleResovel就覆盖原来的LocaleResovel,也就是说自定义的这个生效了@Beanpublic LocaleResolver localeResolver(){return new MyLocaleResovel();}}
重新启动服务器
查看效果


