使用FreeMarker生成静态html文件

来源:互联网 发布:fifa online315数据库 编辑:程序博客网 时间:2024/06/05 08:48

为了提高程序的效率,一些关联关系复杂或修改频率小的页面最好使用静态页面展示。这里使用freemarker来生成静态html文件。

freemarker环境

下载jar包freemarker-2.3.16.jar 地址:http://download.csdn.net/download/li4562258fj155/9933021

freemarker模板

<!DOCTYPE html><html>  <head>    <title>学生</title>    <meta name="keywords" content="keyword1,keyword2,keyword3">    <meta name="description" content="this is my page">    <meta name="content-type" content="text/html; charset=UTF-8">        <link href="/demo/css/style2014.css" rel="stylesheet" type="text/css">    <link href="/demo/css/base.css" rel="stylesheet" type="text/css">    <style type="text/css">                /* 常用 */        .td_1{width: 11%;}        /* 空白单元格 */        .td_blank{width: 10%;}        /* 图片样式 */        .equ_img{width: 225px;height: 150px;}            </style>  </head>  <body>    <div class="div_body">        <form id="form_main" method="post">            <table class="table_main">                <tbody>                    <tr>                        <td class="td_blank"></td>                        <td class="td_common td_1">学生名称</td>                          <td class="td_common td_1">                              <input value="${student.name}" class="input_common" readonly="readonly" style="color: gray; background: white none repeat scroll 0% 0%;" type="text">                          </td>                          <td class="td_common td_1">学生编号</td>                          <td colspan="2" class="td_common">                              <input value="${student.number}" class="input_common" readonly="readonly" style="color: gray; background: white none repeat scroll 0% 0%;" type="text">                          </td>                          <td rowspan="5" colspan="3" class="td_common">                              <img src="/student/${student.imgAddr}" class="stu_img">                          </td>                          <td class="td_blank"></td>                    </tr>                    <tr>                        <td class="td_blank"></td>                        <td class="td_common">是否毕业</td>                          <td class="td_common">                              <select class="sel_common" disabled="disabled" style="color: gray; background: white none repeat scroll 0% 0%;">                                  <option value="">--请选择--</option>                                  <#if (student.isGraduate == 1)>                                      <option value="1" selected="selected">是</option>                                      <option value="0">否</option>                                  </#if>                                  <#if (student.isGraduate == 0)>                                      <option value="1">是</option>                                      <option value="0" selected="selected">否</option>                                  </#if>                              </select>                          </td>                          <td class="td_common">毕业时间</td>                          <td colspan="2" class="td_common">                              <input id="txt~graduateTime" value="${student.graduateTime?default('')}" readonly="readonly" class="input_common" style="color: gray; background: white none repeat scroll 0% 0%;" type="text">                          </td>                          <td class="td_blank"></td>                    </tr>                    <tr>                        <td class="td_blank"></td>                        <td colspan="5" class="td_common"></td>                        <td class="td_blank"></td>                    </tr>                    <tr>                        <td class="td_blank"></td>                        <td colspan="5" class="td_common"></td>                        <td class="td_blank"></td>                    </tr>                    <tr>                        <td class="td_blank"></td>                        <td colspan="5" class="td_common"></td>                        <td class="td_blank"></td>                    </tr>                    <!-- 获奖记录 -->                    <tr>                        <td class="td_blank"></td>                        <td colspan="8" class="td_common">获奖记录</td>                          <td class="td_blank"></td>                    </tr>                    <tr>                        <td class="td_blank"></td>                        <td colspan="2" class="td_common">序号</td>                          <td colspan="2" class="td_common">获奖时间</td>                          <td colspan="4" class="td_common">获奖详情</td>                          <td class="td_blank"></td>                    </tr>                    <#list awardList as award>                        <tr>                            <td class="td_blank"></td>                            <td colspan="2" class="td_common">                                <span>${award_index+1}</span>                            </td>                              <td colspan="2" class="td_common">                                  <input value="${award.time }" readonly="readonly" class="input_common" style="color: gray; background: white none repeat scroll 0% 0%;"/>                              </td>                              <td colspan="2" class="td_common">                                  <input value="${award.detail }" readonly="readonly" class="input_common" style="color: gray; background: white none repeat scroll 0% 0%;"/>                              </td>                              <td class="td_blank"></td>                        </tr>                    </#list>                   </tbody>            </table>        </form>    </div>  </body></html>

freemarker工具类

package com.demo.util;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.Writer;import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import freemarker.template.Configuration;import freemarker.template.DefaultObjectWrapper;import freemarker.template.Template;import freemarker.template.TemplateException;/** * 使用Freemarker生成html文件 * @author lg * */public class GenerateHtml {/** * 根据模板生成html文件 * @param request * @param templateName模板名称 * @param htmlNamehtml文件名称 */public static void generate(HttpServletRequest request, String templateName, String htmlName){FileOutputStream fos = null;Writer writer = null;try {HttpSession session = request.getSession();String root = session.getServletContext().getRealPath("file/staticPage");// 根目录// 设置相关配置Configuration configuration = new Configuration();configuration.setDirectoryForTemplateLoading(new File(root + File.separator + "template"));//模板存放地址configuration.setObjectWrapper(new DefaultObjectWrapper());configuration.setDefaultEncoding("UTF-8");// 默认编码// 根据模板名称获取模板Template template = configuration.getTemplate(templateName);// 设置模板参数Map<String, Object> paramMap = new HashMap<String, Object>();// 模板参数if ("student.html".equals(templateName)) {// 学生paramMap.put("student", request.getAttribute("student"));// 学生paramMap.put("awardList", request.getAttribute("awardList"));// 获奖记录列表}// 生成输出流File html = new File(root + File.separator + "html/student", htmlName);// html文件if (html.exists()) {// 文件已存在时删除原有文件html.delete();}fos = new FileOutputStream(html);writer = new OutputStreamWriter(fos,"UTF-8");// 生成模板template.process(paramMap, writer);System.out.println("成功生成html文件--" + htmlName);} catch (IOException e) {e.printStackTrace();} catch (TemplateException e) {e.printStackTrace();} finally {try {if (fos != null) {fos.close();}if (writer != null) {writer.close();}} catch (Exception e) {e.printStackTrace();}}}}

测试

@RequestMapping("/queryStudent")    public String queryStudent(HttpServletRequest request, HttpServletResponse response){String id = request.getParameter("id");// 主键// 查询是否存在静态展示页面String rootPath = request.getSession().getServletContext().getRealPath("file/staticPage/html/student");File htmlPage = new File(rootPath, "student_" + id + ".html");// 无展示页面if (!htmlPage.exists()) {// 查询数据request.setAttribute("student", student);// 学生request.setAttribute("awardList", awardList);// 获奖记录synchronized (studentController.class) {// 重新验证是否已拥有展示页面 防止重复生成htmlPage = new File(rootPath, "student_" + id + ".html");if (!htmlPage.exists()) {// 生成静态展示页面String templateName = "student.html";String htmlName = "student_" + id + ".html";GenerateHtml.generate(request, templateName, htmlName);}}}// 访问静态展示页面return "redirect:/file/staticPage/html/student/student_" + id + ".html";}


freemarker常用标签

${}

功能和EL表达式一致,通过{}内的名称获取值。

default()

语法:

${[name]?default('')}

freemarker不支持null,所以对可能出现空值的属性设置默认值!

#if

语法:

<#if ([name] == 0)>   [name]等于零!</#if>

#list

语法:

<#list [nameList] as [name]>    这是第${[name]_index+1}条数据!数据值为${[name]}    <br/></#list>




原创粉丝点击