您的位置:

Spring Freemarker详解

一、什么是Spring Freemarker

Spring Freemarker是一个Spring MVC的模板引擎,它基于Freemarker模板引擎,提供了一种方便的方式来处理模板页面,并且与Spring框架集成。

Spring Freemarker可以帮助我们更好地处理MVC模型中的视图层问题,使用Freemarker提供的强大功能,可以实现更加灵活和易于维护的视图层。

二、怎样使用Spring Freemarker

使用Spring Freemarker非常简单,我们只需要添加对应的依赖,然后配置Spring MVC即可。下面是一个基本的Spring Freemarker配置:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>

    <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".ftl" />
        <property name="cache" value="true" />
        <property name="contentType" value="text/html;charset=UTF-8" />
    </bean>

    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/WEB-INF/views/" />
        <property name="defaultEncoding" value="UTF-8" />
    </bean>

在这个配置中,我们使用了Spring Boot的starter-freemarker依赖,以及FreeMarker的视图解析器和配置器。我们指定了视图页面所在的路径,以及对应的后缀名,同时还设置了缓存和字符编码。

三、Freemarker基础语法

下面我们看一下Freemarker模板引擎的基础语法。

1、输出变量:
要输出一个变量,我们只需要使用${}语法即可,例如:

    <p>Hello, ${name}!</p>

这个语法会在模板页面渲染时将变量name的值输出到页面。

2、条件判断:
我们可以使用if语句来进行条件判断,例如:

    <#if user?has_content>
        <p>Welcome, ${user}!</p>
    </#if>

这个语法会判断变量user是否存在内容,如果存在就输出欢迎信息。

3、循环:
我们可以使用list或array变量的一个有用的指令是list、array和sequence。例如:

    <#list users as user>
        <p>User: ${user}</p>
    </#list>

这个语法会循环遍历变量users中的所有用户,并输出每个用户的信息。

四、Spring Freemarker实战应用

下面我们来看一个简单的Spring Freemarker实战应用。

1、创建一个简单的Spring Boot项目:

    spring init --dependencies=web,thymeleaf,database my-project

2、添加对应的依赖,包括spring-boot-starter-freemarker和mysql-connector-java。

3、创建一个User实体类,包括id、name、age等属性,以及对应的getter和setter方法。

4、创建一个UserRepository接口,继承CrudRepository,用于操作User的数据。

    public interface UserRepository extends CrudRepository<User, Long> {
        List<User> findAll();
        User findById(long id);
        void deleteById(long id);
    }

5、创建一个UserServiceImpl实现类,用于实现从数据库中获取User信息的方法。

    @Service
    public class UserServiceImpl implements UserService {
        @Autowired
        private UserRepository userRepository;
        @Override
        public List<User> getUsers() {
            return userRepository.findAll();
        }
        @Override
        public User getUserById(long id) {
            return userRepository.findById(id);
        }
        @Override
        public void deleteUser(long id) {
            userRepository.deleteById(id);
        }
    }

6、创建一个UserController类,用于将User信息传递给Freemarker模板展示。

    @Controller
    public class UserController {
        @Autowired
        private UserService userService;
        @RequestMapping("/")
        public String index(Model model) {
            List<User> users = userService.getUsers();
            model.addAttribute("users", users);
            return "index";
        }
    }

7、创建一个index.ftl的模板文件,用于展示用户信息。

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>User List</title>
    </head>
    <body>
        <h1>User List</h1>
        <#if users?has_content>
            <#list users as user>
                <li>${user.name}, ${user.age}</li>
            </#list>
        </#if>
    </body>
    </html>

最后我们启动应用,访问http://localhost:8080/,我们就可以看到所有用户的信息展示出来了。

五、总结

Spring Freemarker是一个非常实用的Spring MVC的模板引擎,它让我们可以更加方便地处理MVC模型中的视图层问题,并且提供了很多强大的功能和语法。通过实战应用,我们可以看到Spring Freemarker的用法非常简单,只需要配置好依赖和视图解析器即可快速上手。