网站不可缺少的一部分就是新闻发布部分,而对于新闻发布的内容一般都是发布完成以后很少去改动的。
如果采取每次点击新闻从服务器数据库去读取数据然后显示在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",这涉及到的是在使用FreeMarker生成静态文件时,如何处理从GBK编码转换到UTF-8编码的问题。 GBK是GB2312编码的扩展,包含了更多的汉字,但在处理多...
在给定的场景中,`freemaker` 被用来自动化生成常见的Java开发中的各种组件,如`javabean`、`action`、`service`、`dao`以及`struts2`和`spring`的配置文件。这一过程极大地提高了开发效率,减少了重复劳动。 1. ...
FreeMarker是一个强大的、轻量级的模板引擎,主要用于生成动态Web内容,但在Java世界里,它也被广泛用于生成源代码、配置文件等静态内容。 **FreeMarker** 是一个开源项目,它与Java语言完全分离,这意味着开发者...
在JavaWeb开发中,生成Word文档常常用于报告、合同或者数据导出等场景。FreeMarker是一个流行的模板引擎,常用于动态生成HTML或者其他...理解这些概念和技术,你就可以自如地在JavaWeb项目中实现动态Word文档生成了。
2. **高效渲染**:Freemarker在服务器端生成静态页面,将计算和逻辑处理过程一次性完成,减少了客户端的等待时间。 3. **分离关注点**:开发者可以专注于业务逻辑,而设计师则专注于页面布局,两者的工作无需相互...
FreeMarker是一个强大的、开源的模板引擎,主要用于生成HTML或其他类型的文本,尤其在Web开发中用于动态生成静态HTML页面。它与Java紧密集成,是MVC(Model-View-Controller)架构中的View层常选用的技术之一。 ...
// 生成静态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页面生成。FreeMarker是一个强大的、开源的模板语言,它允许...
、页面静态化 1、动静态页面 静态页面 即静态网页,指已经装载好内容HTML页面,无需经过请求服务器数据和编译过程,直接加载到客户浏览器上显示出来。通俗的说就是生成独立的HTML页面,且不与服务器进行数据交互。 ...
综上所述,这个基于JEE和Freemarker的静态化Web论坛系统结合了Java企业级开发的强大功能和模板引擎的便利性,实现了高效、易用的在线讨论平台。通过合理的数据库设计、安全策略和优化手段,确保了系统的稳定性和用户...
2. **创建FreeMarker配置**:初始化`freemarker.template.Configuration`对象,设置模板目录路径,并加载模板文件。 ```java Configuration cfg = new Configuration(Configuration.VERSION_2_3_30); cfg....
本示例项目是在Eclipse环境中创建的一个工程,目的是演示如何使用Freemarker来生成静态HTML页面。 在了解这个项目之前,首先需要知道什么是Freemarker。Freemarker是一个开源的Java库,它允许开发者通过定义模板(....
FreeMarker 是一个强大的模板引擎,常用于Web应用中的动态内容生成,例如Java Web开发中的视图层技术。它与Spring框架结合使用时,可以作为MVC模式中的V(视图)部分。本文档将深入介绍FreeMarker的核心概念、配置、...
Freemarker是一个强大的模板引擎,常用于动态生成HTML、XML等文档。在IT行业中,它也被广泛应用于处理Excel模板,特别是在需要批量导入数据并自动...理解并掌握这种技术,对于处理大量数据的Excel生成任务非常有帮助。
在IT行业中,生成PDF文件是一项常见的任务,尤其在报表、文档和发票的自动化处理中。本主题将深入探讨如何利用Freemarker模板和wkhtmltox工具来实现这一功能。 **Freemarker模板** 是一个强大的Java模板引擎,用于...
FreeMarker 是一个强大的...综上所述,FreeMarker是一个强大的模板引擎,通过FreeMarkerUtil工具类可以方便地进行模板操作,实现静态页面的生成。在实际项目中,合理利用这些功能可以极大地提高开发效率和应用性能。
在本项目"Spring-FreeMaker-Mybatis.zip_DEMO_extjs freemaker_mybatis_mybati"中,我们将探讨一个集成Spring、Mybatis以及FreeMarker技术的简单DEMO,它主要用于演示如何利用这些技术来构建一个高效的Web应用。...
FreeMarker是一个模板引擎,常用于Web应用中的视图层,但在此场景下,它被用来生成静态Java源代码。开发者可以根据需求定义模板,这些模板会根据数据模型动态地生成代码。FreeMarker模板语言允许用户灵活控制生成...
JSP通常用于创建动态内容,FreeMarker作为更纯粹的模板引擎,用于生成复杂或静态的部分,而Sitemesh则用来处理全局页面布局。Spring的MVC框架能够轻松地将这些技术整合在一起,使得开发人员可以高效地创建和维护Web...