当前位置:   article > 正文

springboot整合jsp_SpringBoot2.x系列教程33--整合SpringMVC之模板引擎

springboot 2.x 模版jsp

SpringBoot2.x系列教程33--整合SpringMVC之模板引擎

作者:一一哥

其实现在的很多web项目开发,都采用了前后端完全分离的模式,也就是说后端只提供数据接口,前端通过AJAX请求获取数据,所以完全不需要用的模板引擎。

但是前后端分离的这种模式也有缺点,比如不利于SEO,并且在性能上也会稍微差一点。另外还有一些场景,使用模板引擎会更方便,比如说使用邮件模板。

所以本章节给大家简单介绍在Spring boot中使用Thymeleaf、Freemaker等模板引擎以及对JSP的集成。

一. SpringMVC的模板技术

Spring MVC支持各种各样的模板技术,包括Velocity, FreeMarker和JSP等,很多其他的模板引擎也提供了它们自己与Spring MVC集成的API。

1. Spring Boot支持的模板引擎

Spring Boot支持以下的模板引擎,为他们提供了自动配置。

  • FreeMarker
  • Groovy
  • Thymeleaf
  • Velocity(1.4已不再支持)
  • Mustache

默认情况下,对以上的任意模板引擎,Spring Boot都会默认从src/main/resources/templates目录下自动加载模板引擎文件。

2. 使用注意事项

1.由于在内嵌的servlet容器中使用JSP会存在一些限制,所以建议尽量不要在Spring Boot中使用JSP。

2.IntelliJ IDEA会根据运行应用的方式不同,会对classpath进行不同的排序。在IDEA里通过main方法运行应用,跟从Maven,或Gradle,或打包好的jar中运行相比,会导致不同的顺序,这可能导致Spring Boot不能从classpath下成功地找到模板。

如果遇到这个问题,你可以在IDEA里重新对classpath进行排序,将模块的类和资源放到第一位。比如可以配置模块的前缀为classpath*:/templates/,这样会查找classpath下的所有模板目录。

模板引擎有好几个,本章节就就讲解最常用的Thymeleaf,FreeMarker及与jsp的结合实现。

二. SpringBoot中整合Thymeleaf

我在前面的章节中,已经讲过SpringBoot与Thymeleaf的整合,所以本节略过。

请参考我前面的章节:
15_SpringBoot2.x系列教程15--Web开发01之Thymeleaf使用

知乎地址:

https://zhuanlan.zhihu.com/p/113864980

CSDN地址:

https://blog.csdn.net/syc000666/article/details/105087519

三. SpringBoot中整合JSP

我在前面的章节中,已经讲过SpringBoot与JSP的整合,所以本节略过。

请参考我前面的章节:
17_SpringBoot2.x系列教程17--Web开发03之支持jsp

知乎地址:

https://zhuanlan.zhihu.com/p/114074328

CSDN地址:

https://blog.csdn.net/syc000666/article/details/105087545

四. SpringBoot中整合FreeMarker

1. FreeMarker简介

FreeMarker是一个不错的模板引擎,在众多的网页静态化模板中口碑很好,今天就用Spring Boot来整合这个模板。

2. 创建web项目

我们创建一个Spring Boot项目,该项目结构如下。

919fe89cd342ae0d2a66628b09b7b881.png

3. 添加FreeMarker依赖

在pom.xml文件中添加FreeMarker依赖包。

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-freemarker</artifactId>
  5. </dependency>
  6. </dependencies>

4. 添加FreeMarker配置信息

在application.properties文件中,添加FreeMarker的一些配置信息。
spring.freemarker.template-loader-path指的是freemarker文件的路径信息;
spring.freemarker.cache这个表示的是缓存是否打开;
spring.freemarker.suffix=.ftl指明了freemarker文件的后缀名为.ftl;
其他几个都是常规配置,基本不需要修改的。

  1. #.ftl文件存放位置
  2. spring.freemarker.template-loader-path=classpath:/templates/
  3. #spring.freemarker.prefix=
  4. spring.freemarker.suffix=.ftl
  5. spring.freemarker.cache=false
  6. spring.freemarker.charset=utf-8
  7. spring.freemarker.check-template-location=true
  8. spring.freemarker.content-type=text/html
  9. spring.freemarker.allow-request-override=true
  10. spring.freemarker.allow-session-override=true
  11. spring.freemarker.request-context-attribute=request

5. 创建资源文件

在resources目录下创建一个资源文件conf.properties,作为测试的数据源。

  1. users.name=yiyige
  2. users.desc=learn freemarker

6. 创建.ftl模板文件

在templates目录下,再创建一个ftl目录,里面创建一个模板文件index.ftl。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>User</title>
  6. </head>
  7. <body>
  8. <h1>${user.name}</h1>
  9. <h1>${user.desc}</h1>
  10. </body>
  11. </html>

7. 创建读取资源文件的实体类

创建一个实体类,用于从conf.properties文件中读取配置信息。该类中使用了@Component,@ConfigurationProperties,@PropertySource三个注解,实体类属性对应资源文件,并添加Setter和Getter方法。

  1. package com.yyg.boot;
  2. import lombok.Data;
  3. import lombok.ToString;
  4. import org.springframework.boot.context.properties.ConfigurationProperties;
  5. import org.springframework.context.annotation.PropertySource;
  6. import org.springframework.stereotype.Component;
  7. /**
  8. * @Description Description
  9. * @Author 一一哥Sun
  10. * @Date Created in 2020/3/25
  11. */
  12. @Data
  13. @ToString
  14. @Component
  15. @ConfigurationProperties(prefix = "users")
  16. @PropertySource(value = "classpath:/conf.properties")
  17. public class User {
  18. private String name;
  19. private String desc;
  20. }

8. 创建Controller测试接口

创建controller类,添加调试接口方法,把资源数据通过Model传送到index.ftl上,这里的返回字符串上不用加后缀,因为默认.ftl。

  1. package com.yyg.boot.web;
  2. import com.yyg.boot.User;
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.ui.Model;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. /**
  8. * @Description Description
  9. * @Author 一一哥Sun
  10. * @Date Created in 2020/3/25
  11. */
  12. @Controller
  13. public class HelloController {
  14. @Autowired
  15. private User user;
  16. @GetMapping("/show")
  17. public String show(Model model) {
  18. model.addAttribute("user", user);
  19. //ftl是.ftl模板文件所在文件夹,index是模板名称.
  20. return "ftl/index";
  21. }
  22. }

9. 创建启动类

  1. package com.yyg.boot;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. /**
  5. * @Description Description
  6. * @Author 一一哥Sun
  7. * @Date Created in 2020/3/25
  8. */
  9. @SpringBootApplication
  10. public class TemplateApplication {
  11. public static void main(String[] args) {
  12. SpringApplication.run(TemplateApplication.class, args);
  13. }
  14. }

10. 启动程序测试

在浏览器中输入地址http://localhost:8080/show
可以看到如下界面效果,说明我们已经成功的在Spring Boot中集成了FreeMarker模板,渲染了出了模板页面。

23d9febab5dbac4da3a696c2b8e5ba2c.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/652165
推荐阅读
相关标签
  

闽ICP备14008679号