freemarker生成html.docx
- 文档编号:30220479
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:34
- 大小:30.73KB
freemarker生成html.docx
《freemarker生成html.docx》由会员分享,可在线阅读,更多相关《freemarker生成html.docx(34页珍藏版)》请在冰豆网上搜索。
freemarker生成html
为了减轻服务器压力,将原来的文章管理系统由JSP文件的从数据库中取数据显示改为由jsp生成静态html文件后直接访问html文件。
下面是一个简单的示例
1.buildhtml.jsp
<%pagecontentType="text/html;charset=gb2312"import="java.util.*,java.io.*"%>
<%
try{
Stringtitle="ThisisTitle";
Stringcontent="ThisisContentArea";
Stringediter="LaoMao";
StringfilePath="";
filePath=request.getRealPath("/")+"test/template.htm";
//out.print(filePath+"
");
StringtemplateContent="";
FileInputStreamfileinputstream=newFileInputStream(filePath);//读取模块文件
intlenght=fileinputstream.available();
bytebytes[]=newbyte[lenght];
fileinputstream.read(bytes);
fileinputstream.close();
templateContent=newString(bytes);
//out.print(templateContent);
templateContent=templateContent.replaceAll("###title###",title);
templateContent=templateContent.replaceAll("###content###",content);
templateContent=templateContent.replaceAll("###author###",editer);//替换掉模块中相应的地方
//out.print(templateContent);
//根据时间得文件名
Calendarcalendar=Calendar.getInstance();
Stringfileame=String.valueOf(calendar.getTimeInMillis())+".html";
fileame=request.getRealPath("/")+fileame;//生成的html文件保存路径
FileOutputStreamfileoutputstream=newFileOutputStream(fileame);//建立文件输出流
bytetag_bytes[]=templateContent.getBytes();
fileoutputstream.write(tag_bytes);
fileoutputstream.close();
}
catch(Exceptione){
out.print(e.toString());
}
%>
2.template.htm
###author###
用freemarker模版生成静态html
2007-07-114:
28pm
睬一踩| Rss订阅|
以前写过,不过忘记了。
参考/修改了网上的一个例子,代码如下:
NewsItem.java
packagefreemarker;
/**
*authorterrychan
*
*/
publicclassNewsItem{
publicStringtitle;
publicStringaddTime;
publicStringshowContent;
publicStringgetAddTime(){
returnaddTime;
}
publicvoidsetAddTime(StringaddTime){
this.addTime=addTime;
}
publicStringgetTitle(){
returntitle;
}
publicvoidsetTitle(Stringtitle){
this.title=title;
}
publicStringgetShowContent(){
returnshowContent;
}
publicvoidsetShowContent(StringshowContent){
this.showContent=showContent;
}
publicvoidloadData(){
this.title=”测试容”;
this.showContent=”测试freemarker生成静态页面”;
this.addTime=”2007-09-10″;
}
}
FreeMarkerTest.java
packagefreemarker;
importjava.io.*;
importjava.util.HashMap;
importjava.util.Map;
importmons.logging.Log;
importmons.logging.LogFactory;
importfreemarker.template.*;
/**
*测试FreeMarker.
*
*authorTerry.Chan
*
*/
publicclassFreeMarkerTest{
privatefinalLoglogger=LogFactory.getLog(getClass());
privateConfigurationfreemarker_cfg=null;
staticStringsGeneFilePath=“d:
\\test\\”;
staticStringsGeneFileName=“freemarker.htm”;
staticStringsTempPlateFilePath=“d:
\\test\\”;
publicstaticvoidmain(String[]args)throwsIOException{
//todo创建一个类,然后创建instance
NewsItemaItem=newNewsItem();
aItem.loadData();
FreeMarkerTesttest=newFreeMarkerTest();
Maproot=newHashMap();
root.put(”newsitem”,aItem);
booleanbOK=test.geneHtmlFile(”template.ftl”,root,sGeneFilePath,
sGeneFileName);
}
/**
*获取freemarker的配置.freemarker本身支持classpath,目录和从ServletContext获取.
*/
protectedConfigurationgetFreeMarkerCFG(){
if(null==freemarker_cfg){
//InitializetheFreeMarkerconfiguration;
//-Createaconfigurationinstance
freemarker_cfg=newConfiguration();
//-FreeMarker支持多种模板装载方式,可以查看API文档,都很简单:
路径,根据Servlet上下文,classpath等等
//htmlskin是放在classpath下的一个目录
//freemarker_cfg.setClassForTemplateLoading(this.getClass(),
//“/htmlskin”);
//freemarker_cfg.setTemplateLoader(arg0)
//freemarker_cfg.set
try{
freemarker_cfg.setDirectoryForTemplateLoading(newFile(
sTempPlateFilePath));
}catch(Exceptionex){
ex.printStackTrace();
}
}
returnfreemarker_cfg;
}
/**
*生成静态文件.
*
*paramtemplateFileName
* 模板文件名,相对htmlskin路径,例如”/tpxw/view.ftl”
*parampropMap
* 用于处理模板的属性Object映射
*paramhtmlFilePath
* 要生成的静态文件的路径,相对设置中的根路径,例如“/tpxw/1/2005/4/”
*paramhtmlFileName
* 要生成的文件名,例如“1.htm”
*/
publicbooleangeneHtmlFile(StringtemplateFileName,MappropMap,
StringhtmlFilePath,StringhtmlFileName){
//todo从配置中取得要静态文件存放的根路径:
需要改为自己的属性类调用
try{
Templatet=getFreeMarkerCFG().getTemplate(templateFileName);
//如果根路径存在,则递归创建子目录
creatDirs(htmlFilePath);
Fileafile=newFile(htmlFilePath+“/”+htmlFileName);
Writerout=newBufferedWriter(newOutputStreamWriter(
newFileOutputStream(afile)));
t.process(propMap,out);
}catch(TemplateExceptione){
logger.error(”ErrorwhileprocessingFreeMarkertemplate”
+templateFileName,e);
returnfalse;
}catch(IOExceptione){
logger.error(”ErrorwhilegenerateStaticHtmlFile”
+htmlFileName,e);
returnfalse;
}
returntrue;
}
/**
*创建多级目录
*
*paramaParentDir
* String
*paramaSubDir
* 以/开头
*returnboolean是否成功
*/
publicstaticbooleancreatDirs(Stringpath){
FileaFile=newFile(path);
if(!
aFile.exists()){
returnaFile.mkdirs();
}else{
returntrue;
}
}
}
template.ftl
${newsitem.title}
${newsitem.title}(${newsitem.addTime})
${newsitem.title}
|
代码:
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import mons.logging.Log;
import mons.logging.LogFactory;
import freemarker.template.*;
/**//*
* Created on 2005-4-7
*
*/
/** *//**
* 测试FreeMarker.
*
* author scud
*
*/
public class FreeMarkerTest
{
private final Log logger = LogFactory.getLog(getClass());
private Configuration freemarker_cfg = null;
public static void main(String[] args)
{
//todo 自己的一个类
NewsItem aItem = null;
//todo 装入新闻
//NewsItem = loadNewsItem
(1);
FreeMarkerTest test = new FreeMarkerTest();
Map root = new HashMap();
root.put("newsitem", aItem);
String sGeneFilePath = "/tpxw/";
String sFileName = "1.htm";
boolean bOK = test.geneHtmlFile("/tpxw/view.ftl",root, sGeneFilePath,sFileName);
}
/** *//**
* 获取freemarker的配置. freemarker本身支持classpath,目录和从ServletContext获取.
*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- freemarker 生成 html