1.application.properties配置:
# FREEMARKER (FreeMarkerAutoConfiguration)
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.enabled=true
spring.freemarker.expose-request-attributes=true
spring.freemarker.expose-session-attributes=true
spring.freemarker.expose-spring-macro-helpers=true
spring.freemarker.prefer-file-system-access=true
spring.freemarker.suffix=.html
spring.freemarker.template-loader-path=classpath:/templates/
spring.freemarker.settings.template_update_delay=0
spring.freemarker.settings.default_encoding=UTF-8
spring.freemarker.settings.classic_compatible=true
spring.freemarker.settings.date_format=yyyy-MM-dd
spring.freemarker.settings.time_format=HH:mm:ss
spring.freemarker.settings.datetime_format=yyyy-MM-dd HH:mm:ss
spring.freemarker.request-context-attribute=request
spring.freemarker.order=1
auto_import=ftl/spring.ftl as s
auto_include=
2.spring.ftl存放位置:
templates/ftl/spring.ftl
内容:<#assign base = request.contextPath />
3.freemarkerconfig配置:
@org.springframework.context.annotation.Configuration
public class FreemarkerConfig {
private static Logger log = LoggerFactory.getLogger(FreemarkerConfig.class);
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer(@Value("${auto_import}") String autoImport,@Value("${auto_include}") String autoInclude) throws Exception {
FreeMarkerConfigurer config = new FreeMarkerConfigurer();
writerProperties(config);
Configuration configuration = null;
try {
configuration = config.createConfiguration();
} catch (IOException e) {
throw new ConfigException("freemarker配置bean,IO异常",e);
} catch (TemplateException e) {
throw new ConfigException("freemarker配置bean异常",e);
}
setAutoImport(autoImport,configuration);
setAutoInclude(autoInclude,configuration);
config.setConfiguration(configuration);
return config;
}
@Autowired
private FreeMarkerProperties properties;
private void writerProperties(FreeMarkerConfigurer config) {
config.setTemplateLoaderPaths(this.properties.getTemplateLoaderPath());
config.setPreferFileSystemAccess(this.properties.isPreferFileSystemAccess());
config.setDefaultEncoding(this.properties.getCharsetName());
Properties settings = new Properties();
settings.putAll(this.properties.getSettings());
config.setFreemarkerSettings(settings);
}
private void setAutoImport(String autoImport,Configuration configuration) throws Exception {
if("_".equals(autoImport.trim())) {
return;
}
String[] imports = autoImport.split(";");
Map<String,String> importMap = new HashMap<String,String>(imports.length);
for (String s : imports) {
String[] keyValue = s.split("as");
if (keyValue.length != 2) {
log.error("freemarker配置auto_import格式不正确 ");
throw new ConfigException("freemarker配置auto_import格式不正确");
}
importMap.put(keyValue[1].trim(),keyValue[0].trim());
}
configuration.setAutoImports(importMap);
}
private void setAutoInclude(final String autoInclude,Configuration configuration) {
if ("_".equals(autoInclude.trim())) {
return;
}
String[] includes = autoInclude.split(";");
for (String s : includes) {
System.out.println(s);
}
List list = new ArrayList<String>(Arrays.asList(includes));
configuration.setAutoIncludes(list);
}
}
4.页面引用:
${s.base}或者使用${request.contextPath}