由于前端技术和框架的兴起,现在使用后端模板的越来越少,同时后端基本都是基于SpringBoot进行开发,在集成freemarker方面就更容易了。
关于两者的集成文章很多,这里简单的记录下
方式1:使用默认配置
首先引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
其次修改配置
spring:
freemarker:
enabled: true
content-type: text/html
prefix:
suffix: .html
cache: false
charset: UTF-8
template-loader-path: classpath:/templates/
方式2:自定义配置
@Configuration
public class FreemarkerConfiguration {
/**
* 覆盖SpringBoot中的默认配置。
* 源码可参考:org.springframework.boot.autoconfigure.freemarker.FreeMarkerServletWebConfiguration
* */
@Bean(name = "freeMarkerViewResolver")
@ConditionalOnProperty(name = "spring.freemarker.enabled", matchIfMissing = true)
public FreeMarkerViewResolver freeMarkerViewResolver() {
FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
resolver.setCache(true);
resolver.setOrder(0);
resolver.setPrefix("");
resolver.setSuffix(".html");
resolver.setContentType("text/html; charset=UTF-8");
resolver.setExposeRequestAttributes(true);
resolver.setExposeSessionAttributes(true);
resolver.setRequestContextAttribute("request"); // 为模板调用时,调用request对象的变量名</span>
return resolver;
}
/**
* 覆盖SpringBoot中的默认配置。
* 源码可参考:org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration
* */
@Bean
public FreeMarkerConfigurer freemarkerConfig() throws IOException, TemplateException {
FreeMarkerConfigurationFactory factory = new FreeMarkerConfigurationFactory();
/*
* SpringBoot中的默认地址:classpath:/templates/
* 可参考源码:org.springframework.boot.autoconfigure.freemarker.FreeMarkerProperties
* */
factory.setTemplateLoaderPath("classpath:/templates/freemarker");
factory.setDefaultEncoding("UTF-8");
Properties settings = new Properties();
settings.put("recognize_standard_file_extensions", "true");
factory.setFreemarkerSettings(settings);
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setConfiguration(factory.createConfiguration());
Map<String, Object> sharedMap = new HashMap<String, Object>();
sharedMap.put("sharedVar", "共享参数");
configurer.getConfiguration().setSharedVariables(sharedMap);
configurer.getConfiguration().setDateFormat("yyyy/MM/dd");
configurer.getConfiguration().setDateTimeFormat("yyyy-MM-dd HH:mm:ss");
configurer.getConfiguration().setNumberFormat("#");// 防止页面输出数字,变成2,000
return result;
}
}
模板使用
在指定的路径下创建模板文件,然后在Controller中返回要被访问的模板
@Controller
public class PageController {
@GetMapping(path = {"","/","/index"})
public ModelAndView index() {
System.out.println("controller-index");
Map<String,String> userInfo = new HashMap<>() ;
userInfo.put("username","你猜猜看") ;
return new ModelAndView("index",userInfo);
}
}