Springboot使用freemarker生成静态页面并访问

不多说直接看了.

**

1:pom.xml

**

		<dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.23</version>
        </dependency>

2:application.properties:

spring.freemarker.template-loader-path=classpath:/templates/
spring.freemarker.charset=utf-8
spring.freemarker.suffix=.ftl

(不配置也行,默认就是以上的配置信息)
定位模板的目录

spring.mvc.view.prefix=/

给返回的页面添加后缀名

spring.mvc.view.suffix=.html

(这两句是配置访问的后缀名)

~~

3: Controller和ftl模板

~~
/**

  • @param: [save 保存的地址, templatePath flt模板地址, datas 数据, templateNameflt模板名]
    */
 public static void geneFileStr(String save,String templatePath,Map<String, Object> datas,String templateName){

        Configuration cfg = new Configuration();
        try {
            cfg.setDirectoryForTemplateLoading(new File(templatePath));
            //加载具体模板文件,获得模板对象
            Template template = cfg.getTemplate(templateName);
            //编码格式
            cfg.setDefaultEncoding("utf-8");

            Writer file = new FileWriter(new File(save));
            //生成文件
            template.process(datas, file);
            file.close();
            
            
        } catch (Exception e) {
            e.printStackTrace();
        }
}

Ftl模板,可以看出ftl模板和jsp没什么区别

<body>
    <#if users??>
        <table border="1px">
            <tr>
                <td>编号</td>
                <td>姓名</td>
                <td>年龄</td>
                <td>性别</td>
            </tr>
            <#list users as o>
                <td>${o_index}</td>
                <td>${o.name}</td>
                <td>${o.age}</td>
                <td>${o.sex}</td>
                </tr>
            </#list>
        </table>
    </#if>
</body>

其中<#if users??>判断是否为null,不为null执行下面的代码
<#list users as o>是循环users
${o_index}是每个下标,从0开始

Controller

@Controller
public class UserController {

    @RequestMapping("/user")
    public String getUserAll() throws Exception{
        Configuration cfg = new Configuration();

        // 设置地址
        //以classpath下面的static目录作为静态页面的存储目录,同时命名生成的静态html文件名称
        String save=this.getClass().getResource("/").toURI().getPath()+"static/users.html";
        String templateName = "users.ftl";
        String templatePath=this.getClass().getResource("/").toURI().getPath()+"web";
        Map<String,Object> map = new HashMap<>();
        List<User> users = new ArrayList<>();
        users.add(new User("张三","12","男"));
        users.add(new User("李四","12","女"));
        users.add(new User("王五","12","男"));
        users.add(new User("赵六","12","男"));
        map.put("users",users);
        FreemarkerUtils.geneFileStr(save,templatePath,map,templateName);

        return "users";
    }
}

注意@Controller不要用@RestController 不然最后返回的users则是字符串

4:访问

Springboot使用freemarker生成静态页面并访问_第1张图片
利用freemarker生成静态页面的流程我认为是这样的
1.利用Configuration读取想生成静态页面的模板,这里是users.ftl
2.解析模板文件,并将模板中的${}包含的参数替换成真实的数据
3.最终将读取了真实数据的模板生成相应的html文件,并写入指定目录
这样我们就完成了spring boot中使用freemarker模板,并且利用freemarker生成静态html文件
Freemarker有自己的便签类似于jstl的便签,像是<#if users??>就是,大家不清楚的可以百度下,这里就不多说了。

你可能感兴趣的:(Springboot使用freemarker生成静态页面并访问)