Spring FreeMarker

  • Post category:Java

以下是关于Spring FreeMarker的完整攻略。

Spring FreeMarker基本原理

Spring FreeMarker是一个模板引擎,用于在Spring MVC中生成动态HTML页面。它允许我们在控制器方法中使用模板文件,并将模型数据传递给模板文件。Spring FreeMarker的步骤如下:

  1. 创建控制器方法
  2. 创建模板文件
  3. 创建模型数据
  4. 处理模板文件

下面将详细说明每步。

步骤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页面。