`
Adan-Chiu
  • 浏览: 21832 次
社区版块
存档分类
最新评论

Spring Boot 使用Thymeleaf模板引擎解析模板内容

 
阅读更多

       在我们系统开发中,常常会遇到样式格式一致但内容不一致的页面,比如用户注册后发送的用户激活邮件,找回密码邮件(html格式邮件)以及商品详情页等,先看看邮件发送服务API:

@Service
public class EmailServiceImpl implements EmailService {
    @Autowired private JavaMailSender mailSender;
    @Override @Async
    public void sendSimpleEmail(String sendTo, String subject, String content) {
        SimpleMailMessage mailMessage = new SimpleMailMessage();
        mailMessage.setFrom("");//发件人
        mailMessage.setTo(sendTo);//收件人
        mailMessage.setSubject(subject);//邮件主题
        mailMessage.setText(content);//邮件内容
        mailSender.send(mailMessage);//发送该邮件
    }

    @Override @Async
    public void sendMimeMessageSend(String sendTo, String subject, String content) {
        MimeMessage message = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message,true,"UTF-8");
            helper.setFrom("");
            helper.setTo(sendTo);
            helper.setSubject(subject);
            helper.setText(content,true);
            mailSender.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

 当用户注册成功后我们需要给用户发送一封账号激活邮件



上面激活邮件中(很明显是一封HTML格式的邮件),除了红色框住的部分(动态渲染部分),其余部分内容样式都是一样的,针对这样的内容,我们一般做成一个公共模板,动态内容通过添加给模板的context使用thymeleaf的表达式进行获取渲染,现摘取出动态渲染部分:

<span class="cntext" th:inline="text" th:inline="text">[[${user.username}]]</span><br>
 &nbsp; &nbsp; &nbsp; &nbsp; 您好!感谢您对XXX的信任与支持!<br>&nbsp; &nbsp;

<span class="cntext">&nbsp; <strong>点击下面链接激活账号</strong></span>:<br/>
   <a th:href="@{http://192.168.138.128/portal/user/active(username=${user.username}&code=${user.password})}"
      th:text="|http://192.168.138.128/portal/user/active?username=${user.username}&code=${user.password}|">
   </a>
<br/>

       在发送邮件时不能直接发送html(模板)文件,需要将模板渲染后解析成字符串内容进行发送,如何解析呢,springboot中添加spring-boot-starter-thymeleaf依赖后,springboot会自动注入

SpringResourceTemplateResolver(模板解析器),SpringTemplateEngine(模板引擎),ThymeleafViewResolver(thymeleaf视图解析器)等对象,

我们使用模板引擎就可以将模板解析成字符串以及生成文件等

@Service
@Transactional
public class BuyerServiceImpl implements BuyerService {
    @Autowired private BuyerRepository repository;
    @Autowired private EmailService emailService;
    @Autowired private TemplateEngine templateEngine;
    @Override
    public void registe(Buyer buyer) {
        //用户名不存在
        if (!checkUsername(buyer.getUsername())) {
            //MD5加密
            buyer.setPassword(MD5.MD5Encode(buyer.getPassword()));
            repository.save(buyer);

            //解析邮件模板并绑定变量参数
            var context = new Context();
            context.setVariable("user", buyer);
            var content = templateEngine.process("mailContent", context);
            //异步发送电子邮件
            emailService.sendMimeMessageSend(buyer.getEmail(), "账户激活", content);
        }
    }
}

 

 生成新的文件,如商品详情页需要生成详情页的静态html文件,只需指定特定的writer就可以了,比如

 var realpath = servletContext.getRealPath("/product");
 var file = new File(realpath);
 if(!file.exists()) file.mkdirs();
 var htmlFile = new File(file,info.getCode() + ".html");
 //productview为模板名称
 templateEngine.process("productview",context,new FileWriter(htmlFile));

 就会在自己的容器中指定位置生成相应的html文件,当然这个就不能使用springboot默认提供的容器,我们需要对器进行排除

providedCompile("org.springframework.boot:spring-boot-starter-tomcat:2.0.3.RELEASE")

 排除后我们的war部署在指定的服务器中,服务器需要启动spring boot

/**
 * 修改启动类,继承 SpringBootServletInitializer 并重写 configure 方法
 */
public class SpringBootStartApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 注意这里要指向原先用main方法执行的Application启动类
        return builder.sources(ItemApplication.class);
    }
}

@SpringBootApplication
public class ItemApplication {
    public static void main(String[] args) {
        SpringApplication.run(ItemApplication.class,args);
    }
}

 

分享到:
评论

相关推荐

    Spring MVC / Spring Boot中使用Thymeleaf模板引擎

    Thymeleaf则是一个流行的服务器端模板引擎,它允许开发者使用HTML来编写视图,并在服务器端解析这些模板,生成动态内容。这篇博文将深入探讨如何在Spring MVC和Spring Boot中集成和使用Thymeleaf。 首先,Thymeleaf...

    《Spring Boot 2+Thymeleaf企业应用实战》_杨恩雄.pdf

    《Spring Boot 2+Thymeleaf企业应用实战》是杨恩雄编著的一本面向Java Web开发的技术书籍,这本书籍主要介绍了Spring Boot框架及其与Thymeleaf模板引擎的结合使用。内容覆盖了从Spring Boot和Spring MVC基础,到...

    spring boot+thymeleaf项目实战

    Spring Boot简化了Spring的配置,而Thymeleaf则是一个功能强大的服务器端模板引擎,为HTML页面提供了动态数据绑定和表达式语言。 首先,Spring Boot的核心特性包括自动配置、内嵌Web服务器(如Tomcat)以及起步依赖...

    spring boot+thymeleaf+bootstrap 简单实现后台管理系统界面

    Spring Boot作为现代化的Java应用开发框架,极大地简化了配置和启动流程,而Thymeleaf则是一个现代的服务器端JavaScript模板引擎,主要用于生成HTML。Bootstrap则为前端界面设计提供了强大的支持,它是一个流行的...

    总体 总体 总体 总体 总体 总体

    5. **Spring Boot与Thymeleaf的数据绑定**:通过`Model`对象,可以在控制器中向视图传递数据,Thymeleaf模板可以使用这些数据进行渲染。例如,`th:text="${myVariable}"`会显示控制器中传递的`myVariable`值。 6. *...

    spring boot 连接thymeleaf的很简单的Demo

    然后,在Spring Boot的主类(通常带有`@SpringBootApplication`注解)或者一个控制器类(使用`@RestController`或`@Controller`注解)中,注入Thymeleaf的`TemplateEngine`,并创建一个视图解析方法: ```java ...

    spring-boot html thymeleaf

    1. **模板引擎集成**:Spring Boot 默认已经集成了 Thymeleaf,只需在配置文件中声明视图解析器即可。 2. **视图解析**:视图解析器会根据逻辑视图名(例如 "home")找到对应的模板文件(如 `src/main/resources/...

    Gradle/Spring Boot/Thymeleaf

    这个应用可能包含了基本的Gradle构建配置,Spring Boot启动类,以及使用Thymeleaf模板引擎的视图文件。开发者可能已经配置了Spring Security来保护应用的某些部分。通过分析`MyFirstApp`的源代码和相关配置,我们...

    spring-boot-Thymeleaf 模板

    ### Spring Boot Thymeleaf 模板引擎详解 #### Thymeleaf 简介 Thymeleaf 是一种现代的服务器端 Java 模板引擎,它的独特之处在于支持 HTML 原型,这意味着它的文件扩展名为 `.html`,可以直接在浏览器中打开。...

    Spring Boot 与 kotlin 使用Thymeleaf模板引擎渲染web视图的方法

    Spring Boot与Kotlin结合使用Thymeleaf模板引擎渲染Web视图是一种常见的做法,尤其在构建现代化的MVC应用程序中。Thymeleaf是一个强大的、灵活的模板引擎,支持XML、XHTML和HTML5,其设计目标是提供一种在前端展示...

    springboot整合thymeleaf模板

    SpringBoot整合Thymeleaf模板是一项常见的Web开发任务,它结合了SpringBoot的便捷性和Thymeleaf的动态模板引擎,使得开发人员可以快速构建功能丰富的Web应用。下面将详细介绍这个过程及其涉及的关键知识点。 首先,...

    Spring Boot + Thymeleaf 实现的任务发布网站

    在Spring Boot项目中,虽然可以直接使用Spring Data JPA或R2DBC进行数据访问,但也可以通过配置实现对SSM的支持,以满足特定需求或兼容已有的代码库。 **项目结构与源代码** "springboot-recruit-public-master"这...

    spring boot thymeleaf mybatis

    7. Thymeleaf模板引擎根据视图名称解析对应的HTML模板,结合传入的数据生成动态HTML页面。 8. Spring Boot将这个HTML页面作为响应内容返回给用户。 在项目结构中,`.gitignore`文件用于指定版本控制系统忽略的文件...

    spring_boot使用的 模版引擎 thymeleaf3.0

    在Spring Boot项目中使用Thymeleaf作为模板引擎是目前Web开发中常见的实践之一,而Thymeleaf 3.0作为最新版本,已经广泛地集成在Spring MVC应用中,其功能和使用方式都成为开发人员必须掌握的技术要点。Thymeleaf是...

    Spring Boot 2.0 + Thymeleaf模板+简单增删改查分页

    在本项目中,我们主要探讨的是如何利用Spring Boot 2.0.4版本与Thymeleaf模板引擎来实现一个包含基本CRUD操作(创建、读取、更新、删除)和分页功能的Web应用程序。Spring Boot是Spring框架的一个简化版,它提供了...

    基于SSM + Spring Boot + Thymeleaf开发的论坛社区网站.zip

    这个项目是一个采用Java技术栈,融合了传统的SSM(Spring、SpringMVC、MyBatis)框架与Spring Boot微服务框架,以及Thymeleaf模板引擎构建的论坛社区网站。它展现了在现代Web开发中如何整合不同的技术组件来实现一个...

    springboot整合thymeleaf完整例子

    Thymeleaf则是一个现代服务器端HTML模板引擎,它能够处理XML、HTML、JavaScript等格式的文档,尤其适用于Web应用程序的视图层。本案例将详细讲解如何将SpringBoot与Thymeleaf进行整合,构建一个完整的Web应用。 ...

    springboot与thymeleaf

    Thymeleaf与Spring MVC结合,可以在控制器中设置模型数据,然后在视图层使用Thymeleaf模板展示。 6. **Thymeleaf的布局功能**:Thymeleaf提供了一种叫做"布局分发器"的机制,允许我们创建一个主布局,然后其他页面...

    第 2-6 课:使⽤ Spring Boot 和 Thymeleaf 演示上传⽂件1

    总结来说,结合Spring Boot的MultipartFile接口和Thymeleaf的模板引擎,我们可以轻松创建一个文件上传系统。通过合理的配置,可以控制文件上传的大小限制,防止系统被恶意文件上传攻击。同时,对于大文件上传,还...

    spring boot使用thymeleaf为模板的基本步骤介绍

    在Spring Boot中,Thymeleaf是一个常用的模板引擎,用于生成动态HTML内容。Thymeleaf允许开发者编写静态HTML模板,然后在运行时将这些模板与应用程序的数据结合,生成最终的网页。 ### Thymeleaf 的优势 Thymeleaf...

Global site tag (gtag.js) - Google Analytics