Java学习笔记-SpringBoot整合Thymeleaf

    Thymeleaf是一个XML/XHTML/HTML5模板引擎,可用于Web与非Web环境中的应用开发。它是一个开源的Java库,基于ApacheLicense2.0许可,由DanielFernández创建,该作者还是Java加密库Jasypt的作者。
    Thymeleaf提供了一个用于整合Spring MVC的可选模块,在应用开发中可以使用Thymeleaf来完全代替JSP或其他模板引擎,如Velocity、FreeMarker等。Thymeleaf 最大的特点是即使不启动Web应用,也可以直接在浏览器中打开并正确显示模板页面。Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。
Thymeleaf的主要特性:
1、动静结合:Thymeleaf既可以直接使用浏览器打开,查看页面的静态效果,也可以通过Web应用程序进行访问,查看动态页面效果。
2、开箱即用:Thymeleaf提供了Spring标准方言以及一个与SpringMVC完美集成的可选模块,可以快速地实现表单绑定、属性编辑器、国际化等功能。
3、多方言支持:它提供了Thymeleaf标准和Spring标准两种方言,可以直接套用模板实现JSTL、OGNL表达式;必要时开发人员也可以扩展和创建自定义的方言。
4、与SpringBoot完美整合:SpringBoot为Thymeleaf提供了的默认配置,并且还为Thymeleaf设置了视图解析器,因此Thymeleaf可以与Spring Boot完美整合。

下面是SpringBoot整合Thymeleaf的简单示例:

依赖包版本:

<!-- SpringBootThymeleaf依赖包 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    <version>2.7.14</version>
</dependency>

Thymeleaf配置属性:

@Data
@ConfigurationProperties(prefix = "template.thymeleaf")
public class ThymeleafProperties {

	/** 是否开启 */
	private Boolean enable;

	/** 模版解析 */
	private List<TemplateResolver> templateResolvers;

	@Data
	static class TemplateResolver {
		/** 前缀 */
		private String prefix;
		/** 后缀 */
		private String suffix;
		/** 模版模式 */
		private String templateMode;
		/** 是否开启 */
		private Set<String> resolvablePatterns;
		/** 是否缓存 */
		private Boolean cacheable = false;
		/** 顺序 */
		private Integer order;
	}

}

SpringBoot整合Thymeleaf自动配置:

@EnableConfigurationProperties({ ThymeleafProperties.class })
@Configuration
public class ThymeleafAutoConfiguration {

	private static final String FILE_PREFIX = "file:";

	@Bean(name = "thymeleafTemplateEngine")
	@ConditionalOnProperty(prefix="template.thymeleaf", name = "enable", havingValue = "true", matchIfMissing = false)
	public SpringWebFluxTemplateEngine thymeleafTemplateEngine(ThymeleafProperties thymeleafProperties) {
		SpringWebFluxTemplateEngine templateEngine = new SpringWebFluxTemplateEngine();
		Set<ITemplateResolver> templateResolvers = new HashSet<>();
		if (null == thymeleafProperties || null == thymeleafProperties.getTemplateResolvers()) {
			templateResolvers.add(templateResolver(0, "/templates/", ".html", TemplateMode.HTML,
				new HashSet<>(Arrays.asList("html/*", "*/html/*")), true));
			templateResolvers.add(templateResolver(1, "/templates/", ".xml", TemplateMode.XML,
				new HashSet<>(Arrays.asList("xml/*", "*/xml/*")), true));
			templateResolvers.add(templateResolver(2, "/templates/", ".txt", TemplateMode.TEXT,
				new HashSet<>(Arrays.asList("text/*", "*/text/*")), true));
		} else {
			thymeleafProperties.getTemplateResolvers().forEach(templateResolver -> {
				templateResolvers.add(templateResolver(templateResolver.getOrder(), templateResolver.getPrefix(),
					templateResolver.getSuffix(), TemplateMode.parse(templateResolver.getTemplateMode()),
						templateResolver.getResolvablePatterns(), templateResolver.getCacheable()));
			});
		}
		templateEngine.setTemplateResolvers(templateResolvers);
		return templateEngine;
	}

	@Bean(name = "thymeleafTemplateService")
	@ConditionalOnProperty(prefix="template.thymeleaf", name = "enable", havingValue = "true", matchIfMissing = false)
	public TemplateService thymeleafTemplateService(TemplateEngine thymeleafTemplateEngine) {
		return new ThymeleafTemplateServiceImpl(thymeleafTemplateEngine);
	}

	private ITemplateResolver templateResolver(int order, String prefix, String suffix, TemplateMode templateMode,
			Set<String> resolvablePatterns, boolean cacheable) {
		AbstractConfigurableTemplateResolver templateResolver =
			prefix.startsWith(FILE_PREFIX) ? new FileTemplateResolver() : new ClassLoaderTemplateResolver();
		templateResolver.setOrder(order);
		templateResolver.setPrefix(prefix.startsWith(FILE_PREFIX) ? prefix.substring(FILE_PREFIX.length()) : prefix);
		templateResolver.setSuffix(suffix);
		templateResolver.setTemplateMode(templateMode);
		templateResolver.setResolvablePatterns(resolvablePatterns);
		templateResolver.setCharacterEncoding("UTF-8");
		templateResolver.setCacheable(cacheable);
		return templateResolver;
	}

}

spring.factories配置:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.component.template.config.ThymeleafAutoConfiguration

配置文件配置:

template:
  thymeleaf:
    enable: true
    template-resolvers:
      - prefix: "/template/"
        suffix: ".html"
        templateMode: HTML
        resolvablePatterns:
          - "html/*"
          - "*/html/*"
        cacheable: true
        order: 0
      - prefix: "/template/"
        suffix: ".xml"
        templateMode: XML
        resolvablePatterns: ["xml/*","*/xml/*"]
        cacheable: true
        order: 1
      - prefix: "file:D:/template/"
        suffix: ".html"
        templateMode: HTML
        resolvablePatterns:
          - "html/*"
          - "*/html/*"
        cacheable: true
        order: 2

  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值