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. jquery中的clone()方法使用

    clone([Even[,deepEven]]) 描述: 克隆匹配的DOM元素并且选中这些克隆的副本. 在想把DOM文档中元素的副本添加到其他位置时这个函数非常有用. 1:一个布尔值(true 或者 ...

  2. unix文件操作函数

    1. fopen函数 #include <stdio.h> FILE *fopen(const char *path, const char *mode) 返回:文件顺利打开后,指向该流的 ...

  3. 【有奖】NOIP普及组模拟赛 个人邀请赛 乐多赛

    题目描述 日本数学家角谷有一个猜想:任意一个自然数,经过以下过程,最终会得到1.现在请你打印出任意一个数使用角谷猜想转换为1需要几次. 演变方式: 1.如果这个数为奇数,则将它×3+1.如果这个数为偶 ...

  4. 25Spring_事务管理的两种机制

    一共有两种事务管理机制:编程式事务管理和声明式事务管理. 1.编程式事务管理企业已经不用了. 2.我们主要讲的是声明式事务管理.声明式事务管理 ,无需要修改原来代码,只需要配置,为目标代码添加事务管理 ...

  5. WP老杨解迷:评论数和下载量、榜单的关系

    书接上回,继续研讨评论系统的深层经验,这次从另外一个角度看清榜单关系,提升装逼水准2个加号,如果你能看懂本文,并活学活用,足可在Win10之前醉卧隆中,通晓Windows Phone市场风云变幻,哪些 ...

  6. Redis做消息队列文章两篇

    介绍:http://www.cnblogs.com/lhfcws/p/3732535.html 具体做法:http://shift-alt-ctrl.iteye.com/blog/1867454 另外 ...

  7. Linux经常用到的命令

    1. Linux下用vim打开配置文件乱码,在终端输入:“LANG=”即可. 2. 查看端口是否被占用: 3. netstat -anp | grep port netstat -ltn 4. lso ...

  8. JSON与JSONP

    JSON JSON:一种用于在浏览器和服务器之间交换信息的基于文本的轻量级数据格式.是JS对象的字符串表示.例如:‘{''name":"aa","age&quo ...

  9. Caffe学习系列(5):其它常用层及参数

    本文讲解一些其它的常用层,包括:softmax_loss层,Inner Product层,accuracy层,reshape层和dropout层及其它们的参数配置. 1.softmax-loss so ...

  10. Java中sleep()和wait()的区别

    1. 这两个方法来自不同的类,sleep方法属于Thread,wait方法属于Object. 2. 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法. ...