Velocity根据模版生成静态html

  新公司的一个CMS项目要用到,这里记录下

一、项目文件图

二、springmvc-servlet.xml 添加

 <!-- 定义环境变量文件 -->
    <bean id="propertyHolder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
        <property name="ignoreResourceNotFound" value="true"/>
        <property name="locations">
            <list>
                <value>classpath*:/*.properties</value>
            </list>
        </property>
    </bean>

三、html_template.vm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>${list.title}</title>
    </head>
    <body>
        <h2>${list.title}</h2>
        <table border="1" style="margin-left: 100px" >
            <tr>
                <th class="jobs-time">序号</th>
                <th class="jobs-title">名称</th>
                <th class="jobs-title">手机</th>
                <th class="jobs-title">邮箱</th>
            </tr>
            #if($!list)
                <tr>
                    <td>${list.userId}</td>
                    <td>${list.userName}</td>
                    <td>${list.mobile}</td>
                    <td>${list.email}</td>
                </tr>
            #end
        </table>
    </body>
</html>

四、template.properties

filePath=D:\\opensource\\ue-web\\src\\main\\webapp\\WEB-INF\\template\\html
templatePath=html_template.vm

五、控制器

package com.geenk.web.controller.generatehtml;

import com.geenk.web.velocity_engine.GenerateHtmlUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.HashMap;
import java.util.Map;

/**
 * @author DUCHONG
 * @since 2018-04-28 18:51
 **/
@Controller
public class GenerateController {

    @Value("${filePath}")
    private String filePath;

    @Value("${templatePath}")
    private String templatePath;

    @ResponseBody
    @RequestMapping(value = "/html",method = RequestMethod.GET)
    public String generateHtml(){


        //一般这里是数据库查出的记录的list,然后遍历list,逐个生成html,存放路径,一般是取 "配置+表字段值",作为存放的路径
        //这里用for代替
        for(int i=1;i<10;i++){

            //页面要展示的数据
            Map<String,Object> map=new HashMap<>();
            map.put("title","news"+i);
            map.put("userId",i);
            map.put("userName","test"+i);
            map.put("mobile","18106519020");
            map.put("email","142454529@qq.com");

            GenerateHtmlUtil.generateHtmlByVelocity("news"+i,filePath,templatePath,map,"list");
        }

        return "Over";
    }
}

六、工具类

package com.geenk.web.velocity_engine;


import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.Properties;

/**
 * @author DUCHONG
 * @since 2018-04-28 18:35
 **/
public class GenerateHtmlUtil {

   static Logger logger = LoggerFactory.getLogger(GenerateHtmlUtil.class);


    /**
     * 通过velocity 模板生成静态HTML 文件
     * @param fileName 生成的文件的文件名称
     * @param filePath 保存文件位置
     * @param templatePath velocity模板文件路径
     * @param params 集合
     * @param pageName 页面上需要便利或者使用的变量,可以为任意值
     */
    public  static void generateHtmlByVelocity(String fileName, String filePath,
                                      String templatePath, Object params, String pageName){


        String finalFilePath=filePath+ File.separator+fileName+".html";

        try {

            //设置加载模版文件的方式,在classpath 下面查找
            Properties p = new Properties();
            p.put("file.resource.loader.class",
                    "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
            Velocity.init(p);

            FileOutputStream fos = new FileOutputStream(finalFilePath);
            BufferedWriter writer  = new BufferedWriter(new OutputStreamWriter(
                    fos, "utf8"));
            Template velocity_template = Velocity.getTemplate(templatePath,"utf8");

            VelocityContext context = new VelocityContext();
            context.put(pageName, params);
            velocity_template.merge(context,writer);
            writer.close();

        }
        catch (Exception e) {
            logger.error("文件路径失败!",e);
        }
    }


}

七、运行

浏览器输入localhost:8866/html,显示Over

posted @ 2018-04-29 12:20  npe0  阅读(1045)  评论(0编辑  收藏  举报