`
baobeituping
  • 浏览: 1068829 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

FreeMaker实现静态化技术(5)【生成静态文件】

阅读更多

网站不可缺少的一部分就是新闻发布部分,而对于新闻发布的内容一般都是发布完成以后很少去改动的。

如果采取每次点击新闻从服务器数据库去读取数据然后显示在JSP页面上,肯定是要消耗系统的性能的。

对于这种需求,freemaker可以通过首先从后台数据库中取到数据,然后结合模板,生成一个静态的html文件,而我们将生成文件的文件名保存在数据库中,当用户点击新闻的时候,直接根据新闻所对应的HTML文件名,去取得静态文件。

1.Java文件

FreeMarkerTest.java

package com.test;

import java.io.BufferedWriter;
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 org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public   class  FreeMarkerTest
{

       private   final  Log logger  =  LogFactory.getLog(getClass());
     
       private  Configuration freemarker_cfg  =   null ;
     
     
     
       public   static   void  main(String[] args)
        {
           // @todo 自己的一个类 
           NewsItem aItem  =   new NewsItem() ;
         
           // @todo 装入新闻
           // NewsItem = loadNewsItem(1); 
              
          FreeMarkerTest test  =   new  FreeMarkerTest();
         
          Map root  =   new  HashMap();
          root.put( "newsitem" , aItem);

          String sGeneFilePath  =   "/tpxw/" ;
         
          String sFileName  =   "2.htm" ;

           boolean  bOK  =  test.geneHtmlFile( "view.ftl " ,root, sGeneFilePath,sFileName);
         
      } 
     

       /** */ /** 
       * 获取freemarker的配置. freemarker本身支持classpath,目录和从ServletContext获取.
        */ 
       protected  Configuration getFreeMarkerCFG()
        {
           if  ( null   ==  freemarker_cfg)
            {
               //  Initialize the FreeMarker configuration;
               //  - Create a configuration instance 
               freemarker_cfg  =   new  Configuration();

               //  - FreeMarker支持多种模板装载方式,可以查看API文档,都很简单:路径,根据Servlet上下文,classpath等等
             
               // htmlskin是放在classpath下的一个目录 
             //  freemarker_cfg.setClassForTemplateLoading( this .getClass(),  " /htmlskin " );
               try {
    freemarker_cfg
      .setDirectoryForTemplateLoading(new File(
        "D://workspace//FreeMaker//WebRoot//WEB-INF//templates"));
   } catch (Exception e) {
    e.printStackTrace();
   }
          } 
         
           return  freemarker_cfg;
      } 

       /** */ /** 
       * 生成静态文件.
       *
       *  @param  templateFileName 模板文件名,相对htmlskin路径,例如"/tpxw/view.ftl"
       *  @param  propMap 用于处理模板的属性Object映射
       *  @param  htmlFilePath 要生成的静态文件的路径,相对设置中的根路径,例如 "/tpxw/1/2005/4/"
       *  @param  htmlFileName 要生成的文件名,例如 "1.htm"
        */ 
       public   boolean  geneHtmlFile(String templateFileName,Map propMap, String htmlFilePath,String htmlFileName )
        {
              // @todo 从配置中取得要静态文件存放的根路径:需要改为自己的属性类调用 
           String sRootDir  =   "e:/htmlfile"  ; //这就是保存所生成静态文件的文件夹
          
           try 
            {
              Template t  =  getFreeMarkerCFG().getTemplate(templateFileName);

               // 如果根路径存在,则递归创建子目录 
               creatDirs(sRootDir,htmlFilePath);
             
              File afile  =   new  File(sRootDir+"/"+htmlFilePath+"/"+htmlFileName);

              Writer out  =   new  BufferedWriter( new  OutputStreamWriter( new  FileOutputStream(afile)));

              t.process(propMap, out);
          } 
           catch  (TemplateException e)
            {
              logger.error( " Error while processing FreeMarker template  "   +  templateFileName,e);
               return   false ;
          } 
           catch  (IOException e)
            {
              logger.error( " Error while generate Static Html File  "   +  htmlFileName,e);
               return   false ;
          } 

           return   true ;
      } 
     
     

       /** */ /** 
       * 创建多级目录
       *
       *  @param  aParentDir String
       *  @param  aSubDir  以 / 开头
       *  @return  boolean 是否成功
        */ 
       public   static   boolean  creatDirs(String aParentDir, String aSubDir)
        {
       System.out.println(aParentDir+":"+aSubDir);
          File aFile  =   new  File(aParentDir);

          if(!(aFile.exists()))
          {
           aFile.mkdir();
          }
           if  (aFile.exists())
            {
              File aSubFile  =   new  File(aParentDir  +  aSubDir);
               if  ( ! aSubFile.exists())
                {
                   return  aSubFile.mkdirs();
              } 
               else 
                {
                   return   true ;
              } 
          } 
           else 
            {
               return   false ;
          } 
      }    
}  

 

编写一个bean

package com.test;

public class NewsItem {
 
 private String title="free maker题目";

 public String getTitle() {
  return title;
 }

 public void setTitle(String title) {
  this.title = title;
 }

}

2.在/FreeMaker/WebRoot/WEB-INF/templates/view.ftl路径下新建view.ftl文件

<html>
     <head>
          <title> 查看文章: ${newsitem.title}   </title>
     </ head >
     <body >
      
     </ body>
 </ html>

 

 

分享到:
评论

相关推荐

    freemaker生成静态文件时转换文件原编码GBK为UTF-8

    标题提到的"freemaker生成静态文件时转换文件原编码GBK为UTF-8",这涉及到的是在使用FreeMarker生成静态文件时,如何处理从GBK编码转换到UTF-8编码的问题。 GBK是GB2312编码的扩展,包含了更多的汉字,但在处理多...

    freemaker代码生成工具

    在给定的场景中,`freemaker` 被用来自动化生成常见的Java开发中的各种组件,如`javabean`、`action`、`service`、`dao`以及`struts2`和`spring`的配置文件。这一过程极大地提高了开发效率,减少了重复劳动。 1. ...

    java代码生成器(Freemaker)

    FreeMarker是一个强大的、轻量级的模板引擎,主要用于生成动态Web内容,但在Java世界里,它也被广泛用于生成源代码、配置文件等静态内容。 **FreeMarker** 是一个开源项目,它与Java语言完全分离,这意味着开发者...

    javaweb 使用freemaker生成word文件模板

    在JavaWeb开发中,生成Word文档常常用于报告、合同或者数据导出等场景。FreeMarker是一个流行的模板引擎,常用于动态生成HTML或者其他...理解这些概念和技术,你就可以自如地在JavaWeb项目中实现动态Word文档生成了。

    freemarker权威版 网站静态化

    2. **高效渲染**:Freemarker在服务器端生成静态页面,将计算和逻辑处理过程一次性完成,减少了客户端的等待时间。 3. **分离关注点**:开发者可以专注于业务逻辑,而设计师则专注于页面布局,两者的工作无需相互...

    使用FreeMarker生成Html静态文件

    FreeMarker是一个强大的、开源的模板引擎,主要用于生成HTML或其他类型的文本,尤其在Web开发中用于动态生成静态HTML页面。它与Java紧密集成,是MVC(Model-View-Controller)架构中的View层常选用的技术之一。 ...

    struts1.2+freemarker实现登录成功页面静态化例子

    // 生成静态HTML文件 File staticFile = new File("/path/to/static/files/loginSuccess.html"); FileOutputStream out = new FileOutputStream(staticFile); template.process(model, out); out.close(); /...

    springboot整合freemarker生成静态html的demo.zip

    在本项目"springboot整合freemarker生成静态html的demo.zip"中,我们将探讨如何将SpringBoot框架与FreeMarker模板引擎结合,以实现动态数据驱动的静态HTML页面生成。FreeMarker是一个强大的、开源的模板语言,它允许...

    springboot整合FreeMarker模板,完成页面静态化处理

    、页面静态化 1、动静态页面 静态页面 即静态网页,指已经装载好内容HTML页面,无需经过请求服务器数据和编译过程,直接加载到客户浏览器上显示出来。通俗的说就是生成独立的HTML页面,且不与服务器进行数据交互。 ...

    静态化web论坛系统_jee_论坛_论坛web_freemaker_droppedvxd_

    综上所述,这个基于JEE和Freemarker的静态化Web论坛系统结合了Java企业级开发的强大功能和模板引擎的便利性,实现了高效、易用的在线讨论平台。通过合理的数据库设计、安全策略和优化手段,确保了系统的稳定性和用户...

    freemaker 简单实现

    2. **创建FreeMarker配置**:初始化`freemarker.template.Configuration`对象,设置模板目录路径,并加载模板文件。 ```java Configuration cfg = new Configuration(Configuration.VERSION_2_3_30); cfg....

    freemarker生成静态html示例

    本示例项目是在Eclipse环境中创建的一个工程,目的是演示如何使用Freemarker来生成静态HTML页面。 在了解这个项目之前,首先需要知道什么是Freemarker。Freemarker是一个开源的Java库,它允许开发者通过定义模板(....

    freemaker 中文文档

    FreeMarker 是一个强大的模板引擎,常用于Web应用中的动态内容生成,例如Java Web开发中的视图层技术。它与Spring框架结合使用时,可以作为MVC模式中的V(视图)部分。本文档将深入介绍FreeMarker的核心概念、配置、...

    freemaker处理excel模板

    Freemarker是一个强大的模板引擎,常用于动态生成HTML、XML等文档。在IT行业中,它也被广泛应用于处理Excel模板,特别是在需要批量导入数据并自动...理解并掌握这种技术,对于处理大量数据的Excel生成任务非常有帮助。

    通过freemarker模板 生成PDF

    在IT行业中,生成PDF文件是一项常见的任务,尤其在报表、文档和发票的自动化处理中。本主题将深入探讨如何利用Freemarker模板和wkhtmltox工具来实现这一功能。 **Freemarker模板** 是一个强大的Java模板引擎,用于...

    freemaker工具类

    FreeMarker 是一个强大的...综上所述,FreeMarker是一个强大的模板引擎,通过FreeMarkerUtil工具类可以方便地进行模板操作,实现静态页面的生成。在实际项目中,合理利用这些功能可以极大地提高开发效率和应用性能。

    Spring-FreeMaker-Mybatis.zip_DEMO_extjs freemaker_mybatis_mybati

    在本项目"Spring-FreeMaker-Mybatis.zip_DEMO_extjs freemaker_mybatis_mybati"中,我们将探讨一个集成Spring、Mybatis以及FreeMarker技术的简单DEMO,它主要用于演示如何利用这些技术来构建一个高效的Web应用。...

    mybatis+freemake自定义代码生成文件CodeGenerator.zip

    FreeMarker是一个模板引擎,常用于Web应用中的视图层,但在此场景下,它被用来生成静态Java源代码。开发者可以根据需求定义模板,这些模板会根据数据模型动态地生成代码。FreeMarker模板语言允许用户灵活控制生成...

    spring jsp freemaker sitemesh

    JSP通常用于创建动态内容,FreeMarker作为更纯粹的模板引擎,用于生成复杂或静态的部分,而Sitemesh则用来处理全局页面布局。Spring的MVC框架能够轻松地将这些技术整合在一起,使得开发人员可以高效地创建和维护Web...

Global site tag (gtag.js) - Google Analytics