Spring Boot 提供了很多模板引擎的支持,例如 FreeMarker、Thymeleaf。这篇,我们看下 Spring Boot 如何集成和使用 FreeMarker。

Spring Boot 中使用 FreeMarker 模板非常简单方便。如果想要使用FreeMarker 模板引擎,首先,修改 POM 文件,添加依赖。

FreeMaker 代替 JSP 作为页面渲染

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

然后,我们创建模板。值得注意的是,Spring Boot 集成的 FreeMarker 默认的配置文件放在 classpath:/templates/。因此,我们需要在 src/main/resources/templates/ 添加模板文件。

例如,我们添加一个模板文件,叫做 welcome.ftl。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <body>
  4. Date: ${time?date}<br>
  5. Message: ${message}
  6. </body>
  7. </html>

那么,最后一步,我们在控制类中只需要这么配置就可以了。

  1. @Controller("template.freemarkerController")
  2. public class WelcomeController {
  3. @RequestMapping("/template/freemarker/welcome")
  4. public String welcome(Map<String, Object> model) {
  5. model.put("time", new Date());
  6. model.put("message", "梁桂钊");
  7. return "welcome";
  8. }
  9. }

还记得我们之前的 WebMain 么,我们来回顾下。

  1. @RestController
  2. @EnableAutoConfiguration
  3. @ComponentScan(basePackages = { "com.lianggzone.springboot" })
  4. public class WebMain {
  5. public static void main(String[] args) throws Exception {
  6. SpringApplication.run(WebMain.class, args);
  7. }
  8. }

直接运行 WebMain 类,或者可以通过“mvn spring-boot:run”在命令行启动该应用。会启动一个内嵌的 Tomcat 服务器运行在 8080 端口。访问 “http://localhost:8080/template/freemarker/welcome” 可以看到页面上显示结果。

生成静态文件

上面的场景,是非常典型的 MVC 的使用场景,我们通过 FreeMaker 代替 JSP 作为页面渲染。但是,随着,前后端分离,JSP 渐渐远离我们的视野,服务端更多地处理业务逻辑,通过 RESTful 或者 RPC 对外提供服务。页面的交互,交给前端做渲染。

这种情况下,是不是 FreeMarker 就没有用武之地了呢?实际上,FreeMarker 作为模板引擎,还有很多使用场景,例如,我们可以把我们可以动静分离,把相对不会变化的内容通过 FreeMarker 渲染生成静态文件上传到内容服务,内容服务通过 CDN 进行资源分发。

那么,我们对上面的代码进行一个小改造,模拟一个文件生成到本地的场景。

  1. @RestController("template.freemarkerController2")
  2. @EnableAutoConfiguration
  3. public class Welcome2Controller {
  4. @Autowired
  5. private Configuration configuration;
  6. @RequestMapping("/template/freemarker/welcome2")
  7. public String welcome2(Map<string, object=""> model) throws Exception {
  8. <string, object=""> model.put("time", new Date());
  9. <string, object=""> model.put("message", "梁桂钊");
  10. <string, object="">
  11. <string, object=""> Template template = configuration.getTemplate("welcome.ftl");
  12. <string, object=""> String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
  13. <string, object="">
  14. <string, object=""> FileUtils.writeStringToFile(new File("d:/welcome.html"), content);
  15. <string, object="">
  16. <string, object=""> return "welcome";
  17. <string, object=""> }
  18. <string, object="">}

直接运行 WebMain 类,访问 “http://localhost:8080/template/freemarker/welcome2” 可以看到页面上显示结果,并查看D盘,是否生成文件了呢?

扩展阅读

源代码

相关示例完整代码: springboot-action
静态页面生成器: freemarker-utils

(完)

如果觉得我的文章对你有帮助,请随意打赏。

Spring Boot 揭秘与实战(七) 实用技术篇 - FreeMarker 模板引擎的更多相关文章

  1. Spring Boot 揭秘与实战(七) 实用技术篇 - StateMachine 状态机机制

    文章目录 1. 环境依赖 2. 状态和事件 2.1. 状态枚举 2.2. 事件枚举 3. 状态机配置4. 状态监听器 3.1. 初始化状态机状态 3.2. 初始化状态迁移事件 5. 总结 6. 源代码 ...

  2. Spring Boot 揭秘与实战(七) 实用技术篇 - 异步任务

    文章目录 1. Spring Boot 集成异步任务 2. 单发服务模式 3. 请求应答模式 4. 源代码 Spring 对异步任务具有很好的支持.这篇文章,我们透过 Spring Boot 来讲解下 ...

  3. Spring Boot 揭秘与实战(七) 实用技术篇 - Java Mail 发送邮件

    文章目录 1. Spring Boot 集成 Java Mail 2. 单元测试 3. 源代码 Spring 对 Java Mail 有很好的支持.因此,Spring Boot 也提供了自动配置的支持 ...

  4. Spring Boot 揭秘与实战 附录 - Spring Boot 公共配置

    Spring Boot 公共配置,配置 application.properties/application.yml 文件中. 摘自:http://docs.spring.io/spring-boot ...

  5. Spring Boot 揭秘与实战 自己实现一个简单的自动配置模块

    文章目录 1. 实战的开端 – Maven搭建 2. 参数的配置 - 属性参数类 3. 真的很简单 - 简单的服务类 4. 自动配置的核心 - 自动配置类 5. spring.factories 不要 ...

  6. Spring Boot 揭秘与实战 源码分析 - 工作原理剖析

    文章目录 1. EnableAutoConfiguration 帮助我们做了什么 2. 配置参数类 – FreeMarkerProperties 3. 自动配置类 – FreeMarkerAutoCo ...

  7. Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机

    文章目录 1. 开箱即用,内藏玄机 2. 总结 3. 源代码 Spring Boot提供了很多”开箱即用“的依赖模块,那么,Spring Boot 如何巧妙的做到开箱即用,自动配置的呢? 开箱即用,内 ...

  8. Spring Boot 揭秘与实战(九) 应用监控篇 - 自定义监控端点

    文章目录 1. 继承 AbstractEndpoint 抽象类 2. 创建端点配置类 3. 运行 4. 源代码 Spring Boot 提供的端点不能满足我们的业务需求时,我们可以自定义一个端点. 本 ...

  9. Spring Boot 揭秘与实战(九) 应用监控篇 - HTTP 健康监控

    文章目录 1. 内置 HealthIndicator 监控检测 2. 自定义 HealthIndicator 监控检测 3. 源代码 Health 信息是从 ApplicationContext 中所 ...

随机推荐

  1. 原生JS的地区二级联动,很好理解的逻辑

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 15. 3Sum C++

    参考资料: https://leetcode.com/problems/3sum/discuss/7402/Share-my-AC-C%2B%2B-solution-around-50ms-O(N*N ...

  3. 解决PLSQL Developer 插入中文 乱码问题(转)

    原文地址:解决PLSQL Developer 插入中文 乱码问题 PLSQL Developer 插入中文 乱码问题,如图     这个是由于oracle服务器端字符编码 和 Oracle 客户端 字 ...

  4. 如何定位jdk中的native方法源码?

    前提条件:已下载openjdk的源码. 以System类的arraycopy为例: 1. 根据关键字定位文件:grep -rn '"arraycopy"' ./openjdk关键字 ...

  5. AvalonJS+MVVM实战部分源码

    轻量级前端MVVM框架avalon,它兼容到 IE6 (其他MVVM框架,KnockoutJS(IE6), AngularJS(IE9), EmberJS(IE8), WinJS(IE9) ),它可以 ...

  6. xml的方式配置AOP:Aspect Oriented Programming

    在某些类中, 什么时机, 做什么事情 切入点(point-cut): 在某些类中(Class<?>[] itfc = new Class<?>[] { IStudentServ ...

  7. 解决Tomcat v6.0 Server at localhost was unable to start within 45 seconds

    eclipse 中tomcat启动超时报错如下: Starting Tomcat v7.0 Server at localhost' has encountered a problem Server ...

  8. Docker的安装以及使用Docker安装jenkins,gogs,tomcat(一)

    (1)Docker的安装  官网安装链接 :https://yeasy.gitbooks.io/docker_practice/content/ 卸载旧版本 旧版本的 Docker 称为 docker ...

  9. dede织梦调取一二三级栏目名及栏目下的内容列表的方法

    网站根据需要,把地区划成省-市-文章的层级结构,栏目首页需要显示的是 复制代码代码如下: {dede:channelarclist} <!--省显示--> <a href=" ...

  10. Xilinx 7 series FPGA multiboot技术的使用(转)

    reference:https://www.cnblogs.com/chensimin1990/p/9067629.html 当升级程序有错误的时候,系统会启动golden bitstream 注意: ...