Freemaker实际使用

本文详细介绍了如何在实际项目中使用Freemarker,从创建Maven工程并导入Freemarker依赖开始,逐步讲解了创建模板文件、配置属性文件freemarker.properties,到在Spring配置文件中的设置,最后演示了如何利用Freemarker生成静态页面。通过这个过程,读者将全面了解Freemarker在项目中的应用流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、创建maven工程并导入Freemarker的maven坐标

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

2、创建模板文件,Freemarker的模板文件后缀可以任意,一般建议为ftl。
3、创建属性文件freemarker.properties

out_put_path=D:/ideaProjects/health_parent/health_mobile/src/main/webapp/pages

4、Spring配置文件中配置

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
<!--指定模板文件所在目录--> 
<property name="templateLoaderPath" value="/WEB-INF/ftl/" /> 
<!--指定字符集--> 
<property name="defaultEncoding" value="UTF-8" />
 </bean> 
 <context:property-placeholder location="classpath:freemarker.properties"/>

5、生成静态页面

package com.itheima.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.constant.RedisConstant;
import com.itheima.dao.SetmealDao;
import com.itheima.entity.PageResult;
import com.itheima.entity.QueryPageBean;
import com.itheima.pojo.Setmeal;
import com.itheima.service.SetmealService;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import redis.clients.jedis.JedisPool;

import java.io.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2020/11/10 0010.
 */
@Service(interfaceClass = SetmealService.class)
@Transactional
public class SetmealServiceImpl implements SetmealService{

    @Autowired
    private SetmealDao setmealDao;

    @Autowired
    private JedisPool jedisPool;

    @Value("${out_put_path}")
    private String outputpath;

    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;

    public void add(Setmeal setmeal, Integer[] checkgroupIds) {
        setmealDao.add(setmeal);
        Map<String, Integer> map = null;
        for (Integer checkgroupId : checkgroupIds) {
            map = new HashMap<String, Integer>();
            map.put("setmealId", setmeal.getId());
            map.put("checkgroupId", checkgroupId);
            setmealDao.addSetmealAndCheckgroup(map);
        }
        jedisPool.getResource().sadd(RedisConstant.SETMEAL_PIC_DB_RESOURCES, setmeal.getImg());
        //新增套餐后需要重新生成静态页面
        generateMobileStaticHtml();
    }

    private void generateMobileStaticHtml() {
        List<Setmeal> list = findAll();
        generateMobileStaticHtmlSetmeal(list);
        generateMobileStaticHtmlSetmealDetails(list);
    }

    private void generateMobileStaticHtmlSetmeal(List<Setmeal> list) {
        Map<String, Object> dataMap = new HashMap<String, Object>();
        dataMap.put("setmealList", list);
        generateHtml("mobile_setmeal.ftl", "m_setmeal.html", dataMap);
    }

    private void generateMobileStaticHtmlSetmealDetails(List<Setmeal> list) {
        for (Setmeal setmeal : list) {
            Setmeal setmeal1 = findById(setmeal.getId());
            Map<String, Object> dataMap = new HashMap<String, Object>();
            dataMap.put("setmeal", setmeal1);
            generateHtml("mobile_setmeal_detail.ftl", "setmeal_detail_"+setmeal1.getId()+".html" , dataMap);
        }
    }

    /**
     * 生成html
     * @param templateName
     * @param htmlPageName
     * @param dataMap
     */
    private void generateHtml(String templateName, String htmlPageName, Map<String, Object> dataMap) {
        Writer out = null;
        try {
            Configuration configuration = freeMarkerConfigurer.getConfiguration();
            Template template = configuration.getTemplate(templateName);
            File file = new File(outputpath + "\\" + htmlPageName);
            out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
            template.process(dataMap, out);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

    public PageResult findPage(QueryPageBean queryPageBean) {
        PageHelper.startPage(queryPageBean.getCurrentPage(), queryPageBean.getPageSize());
        Page<Setmeal> page = setmealDao.findAll(queryPageBean.getQueryString());
        return new PageResult(page.getTotal(), page.getResult());
    }

    public List<Setmeal> findAll() {
        return setmealDao.findMobileAll();
    }

    public Setmeal findById(Integer id) {
        return setmealDao.findById(id);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值