java 如何配置模板
配置模板的常用方法
在Java中配置模板通常涉及模板引擎的使用,例如Thymeleaf、FreeMarker或Velocity。以下是几种常见模板引擎的配置方法。
Thymeleaf配置
添加Maven依赖:
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>
配置Spring Boot的Thymeleaf:
@Configuration
public class ThymeleafConfig {
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
private ITemplateResolver templateResolver() {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix("templates/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML");
return templateResolver;
}
}
FreeMarker配置
添加Maven依赖:
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.32</version>
</dependency>
配置FreeMarker:
@Configuration
public class FreeMarkerConfig {
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer() {
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setTemplateLoaderPath("classpath:/templates/");
return configurer;
}
}
Velocity配置
添加Maven依赖:
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
配置Velocity:
@Configuration
public class VelocityConfig {
@Bean
public VelocityEngine velocityEngine() {
VelocityEngineFactoryBean factory = new VelocityEngineFactoryBean();
Properties props = new Properties();
props.setProperty("resource.loader", "class");
props.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
factory.setVelocityProperties(props);
return factory.createVelocityEngine();
}
}
模板文件存放位置
模板文件通常存放在src/main/resources/templates/目录下。例如Thymeleaf的HTML模板或FreeMarker的.ftl文件应放置在此目录中。
模板渲染示例
使用Thymeleaf渲染模板:
@Controller
public class MyController {
@Autowired
private SpringTemplateEngine templateEngine;
@GetMapping("/example")
public String example(Model model) {
model.addAttribute("message", "Hello, Thymeleaf!");
return "example-template";
}
}
使用FreeMarker渲染模板:
@Controller
public class MyController {
@Autowired
private FreeMarkerConfigurer freeMarkerConfigurer;
@GetMapping("/example")
public String example(Model model) throws Exception {
model.addAttribute("message", "Hello, FreeMarker!");
return "example-template.ftl";
}
}
动态内容绑定
模板引擎支持动态内容绑定。例如在Thymeleaf中:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Example</title>
</head>
<body>
<p th:text="${message}">Default message</p>
</body>
</html>
在FreeMarker中:
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
</head>
<body>
<p>${message}</p>
</body>
</html>
自定义模板解析器
需要自定义模板解析路径时,可扩展ITemplateResolver接口(Thymeleaf)或配置FreeMarkerConfigurer的setTemplateLoaderPaths方法(FreeMarker)。
模板缓存配置
生产环境通常启用模板缓存。在Thymeleaf中:
templateResolver.setCacheable(true);
在FreeMarker中通过配置文件设置:
spring.freemarker.cache=true
多模板引擎支持
项目需要同时支持多种模板引擎时,可通过配置多个ViewResolver并设置优先级顺序实现。例如在Spring MVC中:

@Bean
public ViewResolver thymeleafViewResolver() {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine());
resolver.setOrder(1);
return resolver;
}
@Bean
public ViewResolver freeMarkerViewResolver() {
FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
resolver.setConfigurer(freeMarkerConfigurer());
resolver.setOrder(2);
return resolver;
}






