以下是关于Spring FreeMarker的完整攻略。
Spring FreeMarker基本原理
Spring FreeMarker是一个模板引擎,用于在Spring MVC中生成动态HTML页面。它允许我们在控制器方法中使用模板文件,并将模型数据传递给模板文件。Spring FreeMarker的步骤如下:
- 创建控制器方法
- 创建模板文件
- 创建模型数据
- 处理模板文件
下面将详细说明每步。
步骤1:创建控制器方法
在使用Spring FreeMarker之前,需要先创建控制器方法。可以使用以下示例:
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello, World!");
return "hello";
}
在上面的示例中,我们创建了一个hello()方法,并使用@GetMapping注解将其映射到/hello路径。在方法参数中,我们使用Model参数将消息添加到模型数据中,并返回hello视图。
步骤2:创建模板文件
在创建控制器方法之后,就需要创建模板文件了。可以使用以下示例:
<!DOCTYPE html>
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>
在上面的示例中,我们创建了一个hello.ftl模板文件,并使用FreeMarker表达式显示模型数据中的消息。
步骤3:创建模型数据
在创建模板文件之后,就需要创建模型数据了。可以使用以下示例:
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello, World!");
return "hello";
}
在上面的示例中,我们在hello()方法中使用Model参数将消息添加到模型数据中。
步骤4:处理模板文件
在创建模型数据之后,就需要处理模板文件了。可以使用以下示例:
@Configuration
public class FreeMarkerConfig {
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer() {
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setTemplateLoaderPath("classpath:/templates/");
return configurer;
}
@Bean
public ViewResolver freeMarkerViewResolver() {
FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
resolver.setCache(true);
resolver.setPrefix("");
resolver.setSuffix(".ftl");
resolver.setContentType("text/html;charset=UTF-8");
return resolver;
}
}
在上面的示例中,我们创建了一个FreeMarkerConfig类,并使用@Bean注解创建FreeMarkerConfigurer和FreeMarkerViewResolver bean。FreeMarkerConfigurer bean用于设置模板文件的位置,而FreeMarkerViewResolver bean用于设置模板文件的后缀和内容类型。
示例
下面是两个使用Spring FreeMarker的示例:
示例1:使用Spring FreeMarker
在这个示例中,我们将使用Spring FreeMarker。
Controller.java
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello, World!");
return "hello";
}
在上面的示例中,我们创建了一个hello()方法,并使用@GetMapping注解将其映射到/hello路径。在方法参数中,我们使用Model参数将消息添加到模型数据中,并返回hello视图。
hello.ftl
<!DOCTYPE html>
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>
在上面的示例中,我们创建了一个hello.ftl模板文件,并使用FreeMarker表达式显示模型数据中的消息。
FreeMarkerConfig.java
@Configuration
public class FreeMarkerConfig {
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer() {
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setTemplateLoaderPath("classpath:/templates/");
return configurer;
}
@Bean
public ViewResolver freeMarkerViewResolver() {
FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
resolver.setCache(true);
resolver.setPrefix("");
resolver.setSuffix(".ftl");
resolver.setContentType("text/html;charset=UTF-8");
return resolver;
}
}
在上面的示例中,我们创建了一个FreeMarkerConfig类,并使用@Bean注解创建FreeMarkerConfigurer和FreeMarkerViewResolver bean。FreeMarkerConfigurer bean用于设置模板文件的位置,而FreeMarkerViewResolver bean用于设置模板文件的后缀和内容类型。
示例2:使用Spring FreeMarker和Thymeleaf
在这个示例中,我们将使用Spring FreeMarker和Thymeleaf。
Controller.java
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello, World!");
return "hello";
}
在上面的示例中,我们创建了一个hello()方法,并使用@GetMapping注解将其映射到/hello路径。在方法参数中,我们使用Model参数将消息添加到模型数据中,并返回hello视图。
hello.ftl
<!DOCTYPE html>
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>
在上面的示例中,我们创建了一个hello.ftl模板文件,并使用FreeMarker表达式显示模型数据中的消息。
FreeMarkerConfig.java
@Configuration
public class FreeMarkerConfig {
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer() {
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setTemplateLoaderPath("classpath:/templates/");
return configurer;
}
@Bean
public ViewResolver freeMarkerViewResolver() {
FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
resolver.setCache(true);
resolver.setPrefix("");
resolver.setSuffix(".ftl");
resolver.setContentType("text/html;charset=UTF-8");
return resolver;
}
}
在上面的示例中,我们创建了一个FreeMarkerConfig类,并使用@Bean注解创建FreeMarkerConfigurer和FreeMarkerViewResolver bean。FreeMarkerConfigurer bean用于设置模板文件的位置,而FreeMarkerViewResolver bean用于设置模板文件的后缀和内容类型。
hello.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
</head>
<body>
<h1 th:text="${message}"></h1>
</body>
</html>
在上面的示例中,我们创建了一个hello.html模板文件,并使用Thymeleaf表达式显示模型数据中的消息。
ThymeleafConfig.java
@Configuration
public class ThymeleafConfig {
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(templateResolver());
return engine;
}
@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
resolver.setPrefix("classpath:/templates/");
resolver.setSuffix(".html");
resolver.setTemplateMode(TemplateMode.HTML);
resolver.setCharacterEncoding("UTF-8");
return resolver;
}
@Bean
public ViewResolver thymeleafViewResolver() {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine());
resolver.setCharacterEncoding("UTF-8");
return resolver;
}
}
在上面的示例中,我们创建了一个ThymeleafConfig类,并使用@Bean注解创建SpringTemplateEngine、SpringResourceTemplateResolver和ThymeleafViewResolver bean。SpringTemplateEngine bean用于设置模板文件的位置和模板引擎,而SpringResourceTemplateResolver bean用于设置模板文件的后缀和内容类型。
总结
以上就是关于Spring FreeMarker的完整攻略。Spring FreeMarker是一个非常有用的模板引擎,可以帮助我们在Spring MVC中生成动态HTML页面。