良许Linux教程网 干货合集 Spring Boot 整合 Freemarker

Spring Boot 整合 Freemarker

是一个相当老牌的开源的免费的模版引擎。通过 Freemarker 模版,我们可以将数据渲染成 HTML 网页、电子邮件、配置文件以及源代码等。Freemarker 不是面向最终用户的,而是一个 Java 类库,我们可以将之作为一个普通的组件嵌入到我们的产品中。

来看一张来自 Freemarker 官网的图片:

Spring Boot 整合 FreemarkerSpring Boot 整合 Freemarker

可以看到,Freemarker 可以将模版和数据渲染成 HTML 。 Freemarker 模版后缀为 .ftl(FreeMarker Template Language)。FTL 是一种简单的、专用的语言,它不是像 Java 那样成熟的编程语言。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。

好了,这是一个简单的介绍,接下来我们来看看 Freemarker 和 Spring Boot 的一个整合操作。

实践

在 SSM 中整合 Freemarker ,所有的配置文件加起来,前前后后大约在 50 行左右,Spring Boot 中要几行配置呢? 0 行!

1.创建工程

首先创建一个 Spring Boot 工程,引入 Freemarker 依赖:


   org.springframework.boot
   spring-boot-starter-freemarker
   org.springframework.boot
   spring-boot-starter-web

工程创建完成后,在 org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration 类中,可以看到关于 Freemarker 的自动化配置:

@Configuration
@ConditionalOnClass({ freemarker.template.Configuration.class, FreeMarkerConfigurationFactory.class })
@EnableConfigurationProperties(FreeMarkerProperties.class)
@Import({ FreeMarkerServletWebConfiguration.class, FreeMarkerReactiveWebConfiguration.class,
               FreeMarkerNonWebConfiguration.class })
public class FreeMarkerAutoConfiguration {
}

从这里可以看出,当 classpath 下存在 freemarker.template.Configuration 以及 FreeMarkerConfigurationFactory 时,配置才会生效,也就是说当我们引入了 Freemarker 之后,配置就会生效。但是这里的自动化配置只做了模板位置检查,其他配置则是在导入的 FreeMarkerServletWebConfiguration 配置中完成的。那么我们再来看看 FreeMarkerServletWebConfiguration 类,部分源码如下:

@Configuration
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
@ConditionalOnClass({ Servlet.class, FreeMarkerConfigurer.class })
@AutoConfigureAfter(WebMvcAutoConfiguration.class)
class FreeMarkerServletWebConfiguration extends AbstractFreeMarkerConfiguration {
       protected FreeMarkerServletWebConfiguration(FreeMarkerProperties properties) {
               super(properties);
       }
       @Bean
       @ConditionalOnMissingBean(FreeMarkerConfig.class)
       public FreeMarkerConfigurer freeMarkerConfigurer() {
               FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
               applyProperties(configurer);
               return configurer;
       }
       @Bean
       @ConditionalOnMissingBean(name = "freeMarkerViewResolver")
       @ConditionalOnProperty(name = "spring.freemarker.enabled", matchIfMissing = true)
       public FreeMarkerViewResolver freeMarkerViewResolver() {
               FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
               getProperties().applyToMvcViewResolver(resolver);
               return resolver;
       }
}

在这个类的构造方法中,注入了 FreeMarkerProperties:

@ConfigurationProperties(prefix = "spring.freemarker")
public class FreeMarkerProperties extends AbstractTemplateViewResolverProperties {
       public static final String DEFAULT_TEMPLATE_LOADER_PATH = "classpath:/templates/";
       public static final String DEFAULT_PREFIX = "";
       public static final String DEFAULT_SUFFIX = ".ftl";
       /**
        * Well-known FreeMarker keys which are passed to FreeMarker's Configuration.
        */
       private Map settings = new HashMap();
}

FreeMarkerProperties 中则配置了 Freemarker 的基本信息,例如模板位置在 classpath:/templates/ ,再例如模板后缀为 .ftl,那么这些配置我们以后都可以在 application.properties 中进行修改。

如果我们在 SSM 的 XML 文件中自己配置 Freemarker ,也不过就是配置这些东西。现在,这些配置由 FreeMarkerServletWebConfiguration 帮我们完成了。

2.创建类

首先我们来创建一个 User 类,如下:

public class User {
   private Long id;
   private String username;
   private String address;
   //省略 getter/setter
}

再来创建 UserController:

@Controller
public class UserController {
   @GetMapping("/index")
   public String index(Model model) {
       List users = new ArrayList();
       for (int i = 0; i "javaboy>>>>" + i);
           user.setAddress("www.javaboy.org>>>>" + i);
           users.add(user);
       }
       model.addAttribute("users", users);
       return "index";
   }
}

最后在 freemarker 中渲染数据:

nbsp;html>


   "UTF-8">
   Title"1">
   
       
       
       
   
   #list users as user>
       
           
           
           
       
   #list>
用户编号用户名称用户地址
${user.id}${user.username}${user.address}

运行效果如下: Spring Boot 整合 FreemarkerSpring Boot 整合 Freemarker

其他配置

如果我们要修改模版文件位置等,可以在 application.properties 中进行配置:

spring.freemarker.allow-request-override=false
spring.freemarker.allow-session-override=false
spring.freemarker.cache=false
spring.freemarker.charset=UTF-8
spring.freemarker.check-template-location=true
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=false
spring.freemarker.expose-session-attributes=false
spring.freemarker.suffix=.ftl
spring.freemarker.template-loader-path=classpath:/templates/

好了,整合完成之后,Freemarker 的更多用法,就和在 SSM 中使用 Freemarker 一样了,这里我就不再赘述。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部