Freemarker是一种强大的web端模板技术,在当前Web开发中,SEO和客户端浏览速度尤为重要,其中将网页静态化是一个很好的解决方案。下面介绍Java中web开发结合Freemarker来实现静态化. 
主要分为三步 
1 准备好模板文件,如Test.ftl 
<html> 
<head> 
<title>${title}</title> 
<style type="text/css" link="${rccontextPath}/core.css"> 
</head> 
<body> 
<table> 
<tr> 
<td>商品编号</td> 
<td>商品名称</td> 
<td>商品说明</td> 
</tr> 
<#if goodsList?exist> 
<#list goodsList as goods> 
<tr> 
<td>${goods.ggCode}</td> 
<td>${goods.ggName}</td> 
<td>${goods.ggDesc}</td> 
</tr> 
</#list> 
</#if> 
</table> 
</body> 
</html>

2 在dao层封装静态化的方法 
public void crateHTML(ServletContext context,Map<String,Object> data,String templatePath,String targetHtmlPath){ 
     Configuration freemarkerCfg = new Configuration(); 
     //加载模版文件的路径 
     freemarkerCfg.setServletContextForTemplateLoading(context, "/WEB-INF/view/"); 
     freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8"); 
     try { 
      //指定模版路径 
      Template template = freemarkerCfg.getTemplate(templatePath,"UTF-8"); 
      template.setEncoding("UTF-8"); 
      //静态页面路径 
      String htmlPath = context.getRealPath("/WEB-INF/view/")+targetHtmlPath; 
      File htmlFile = new File(htmlPath); 
              Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));
              //处理模版并开始输出静态页面 
              template.process(data, out); 
              out.flush(); 
              out.close(); 
     } catch (Exception e) { 
      log.error("生成静态网页出错"); 
      e.printStackTrace(); 
     } 
  }

3 在service层调用静态化dao

try{  
      //准备数据 
      List<Goods> goodsList=goodsService.queryAllGoods(); 
      HashMap<String,Object> data = new HashMap<String,Object>(); 
         data.put("goodsList",goodsList);//此处装载的key的名字要与模板文件中接收数据的名字保持一致 
         data.put("rccontextPath",servletContext.getContextPath());//生成图片、CSS、JS的绝对路径 
      //调用静态页面方法 
     staticWebDao.crateHTML(context,data,"Test.ftl","/Test.html");     }catch(Exception e){ 
      e.printStackTrace(); 
     }*/

需要注意的几点 
1 检查生成后的静态网页中图片、CSS及JS等的引用路径是否正确 
2 放入Map中的数据的key必须与模版文件中接收数据的名字保持一致 
3 设置的编码方式与你工程的编码方式保持一致 
4 注意输出流的关闭 
5 生成的静态网页文件名自定义

Freemarker 之 Java静态化 实例一的更多相关文章

  1. 二、freemarker.controller半自动静态化+Tomcat虚拟资源映射

    描述:本内容主要是讲2个tomcat之间同时共享一个静态话页面,统一入口是springMVC的一个controller,静态化的更新只需要传false.true.把完成的web项目放入a.b服务器To ...

  2. 【转】使用Freemarker实现网页静态化

    使用Freemarker实现网页静态化 2017年08月20日 20:45:51 阅读数:1981 1.1. 什么是freemarker FreeMarker是一个用Java语言编写的模板引擎,它基于 ...

  3. JAVAEE——宜立方商城10:使用freemarker实现网页静态化、ActiveMq同步生成静态网页、Sso单点登录系统分析

    1. 学习计划 1.使用freemarker实现网页静态化 2.ActiveMq同步生成静态网页 2. 网页静态化 可以使用Freemarker实现网页静态化. 2.1. 什么是freemarker ...

  4. FreeMarker实现网页静态化

    1.FreeMarker实现网页静态化. FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器无关,即在Web运行时,它并不知道Servl ...

  5. 一、springMVC、freemarker页面半自动静态化

    说明:刚刚接到公司的通知,实现(半自动化),即通过参数控制是否需要静态化页面(哪里我说错了,勿喷!谢谢) 1,请求.do的URL时直接生成对应的.htm文件,并将请求转发到该htm文件 2,自由控制某 ...

  6. Spring MVC + freemarker实现半自动静态化

    这里对freemarker的代码进行了修改,效果:1,请求.do的URL时直接生成对应的.htm文件,并将请求转发到该htm文件2,自由控制某个页面是否需要静态化原理:对org.springframe ...

  7. SpringMVC整合freeMarker实现页面静态化+SpringMVC配置多视图

    一.背景 1.什么是FreeMarker FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于 ...

  8. java静态代理实例

    package test; class ProxyTest { public static void main(String[] args) { ProxyClass proxy = new Prox ...

  9. 页面静态化技术Freemarker技术的介绍及使用实例.

    一.FreeMarker简介 1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效 ...

随机推荐

  1. 边工作边刷题:70天一遍leetcode: day 88-5

    coins in a line I/II/III: check above 1. recursion的返回和dp[left][right]表示什么?假设game是[left,right],那么play ...

  2. 给Testerhome测试小道消息做个硬广告

    测试小道消息在荔枝FM上的粉丝马上就要超过1k了.还差17个我们就能够开通社区了.欢迎大家都来收听测试小道消息哈--更多精彩内容还希望大家下载荔枝fm.关注FM245329. 如果你还不了解测试小道消 ...

  3. java12-6 冒泡排序法和选择排序法

    1.冒泡排序法 相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处 分析: 第一次比较排序的结果:会把其中最大的数据排到最大的索引处 第二次比较排序后的结果:因为第一次已经把最大的一个 ...

  4. java10-1 Object类

    Object:类      Object 是类层次结构的根类.每个类都使用 Object 作为超类. 每个类都直接或者间接的继承自Object类. Object类的方法: public int has ...

  5. smarty缓存控制

    第一步初始化配置文件中设置 如果当前访问的模板有缓存就不需要连接数据库那些代码了,如果要模板局部不缓存,要写在iscache外,模板中用{nocache}

  6. OpenGL 4.3配置教程

    OpenGL 4.3配置教程 下载开发包 需要下载的开发包主要包含如下几个组件:freeglut+glew+ OpenGL.Development.Cookbook+源码+GLM+SOIL. Open ...

  7. tkinter 改变按钮状态

    import tkinter as tk def btn1_change_btn1(event): '''方式一:通过事件控制自己''' if event.widget['state'] == 'no ...

  8. 北京联想招聘-IOS高级 加入qq 群:220486180 或者直接在此 留言咨询

    ios 高级开发 Job ID #: 47980 Position Title: 高级iOS development engineer Location: CHN-Beijing Functional ...

  9. Activiti系列: 如何给内置表单添加字段类型

     对于内置的表单,除了原来支持的几种数据类型(string, long, enum, date, boolean, collection)之外,还可以自定义数据类型,比如增加一个javascript数 ...

  10. Android 6.0 SDK 找不到HttpClient的解决方法

    一.情况描述 在eclipse或Android Studio开发时(笔者目前只用过Android Studio),设置Android SDK的编译版本为23时,且使用了httpClient相关类的库项 ...