方法一:(这个方法借鉴freemarker的docs文档Programmer's Guide 的quick start部分,详细请看相关的文档。
java 代码
public class HtmlTemplateGenerator {
Configuration cfg = null;
public HtmlTemplateGenerator(String templatePath) throws IOException {
cfg = new Configuration();
cfg.setDefaultEncoding("UTF-8");
cfg.setDirectoryForTemplateLoading(new File(templatePath));
cfg.setObjectWrapper(new DefaultObjectWrapper());
}
/**
* 生成静态文件
* @param ftlTemplate ftl模版文件
* @param contents ftl要用到的动态内容
* @param savePath 文件保存路径
* @param saveFilename 保存文件名
* @throws IOException
* @throws TemplateException
*/
public void create(String ftlTemplate, Map contents, String savePath, String saveFilename) throws IOException, TemplateException {
Template temp = cfg.getTemplate(ftlTemplate);
/* Merge data model with template */
String realPath = ServletActionContext.getServletContext().getRealPath(savePath);
System.out.println( saveFilename + ":" + realPath);
File file = new File(realPath);
if(!file.exists())
file.mkdirs();
Writer out = new OutputStreamWriter(new FileOutputStream(realPath + "/" + saveFilename),"UTF-8");
temp.process(contents, out);
out.flush();
}
}
如果用spring,可以将它配置成bean,然后在其他地方使用。第五行的 templatePath 是模版文件的路径,比如/WEB-INF/template。
action中的使用:HtmlTemplateGenerator.create("html/magazine/search.ftl", null, "/magazine", "search.html"); 其中“html/magazine/search.ftl”是在“/WEB-INF/template”目录下。这里还需要注意的是。模版文件(search.ftl)中如果还要引用其他文件,它的路径也是不需要添加总路径“/WEB-INF/template”。
方法二:继承webwork的FreemarkerResult,改写getWriter方法:
不知有无好的法子。
java 代码
protected Writer getWriter() throws IOException {
String savePath = (String) ActionContext.getContext().getSession().get("SAVE_PATH");
String saveFilename = (String) ActionContext.getContext().getSession().get("SAVE_FILENAME");
String realPath = ServletActionContext.getServletContext().getRealPath(savePath);
System.out.println( saveFilename + ":" + realPath);
File file = new File(realPath);
if(!file.exists())
file.mkdirs();
return templateOut = new OutputStreamWriter(new FileOutputStream(realPath + "/" + saveFilename),"UTF-8");
}
这里的路径和文件名通过webwork的session传入,不知有无其他好方法。
如果生成文件的同时还需要看到生成的页面,则要改写“doExecute”:java 代码
template.process(model, getWriter());
template.process(model, super.getWriter()); //添加这句
templateOut.flush();
生成的文件格式不限于html,可以是其他文件格式,如js,text等。
比较这两种方法:
方法一:在需要生成分页文件时,比较合适。
方法二:可以象往常一样使用,一次需要生成多文件则不适合。
分享到:
- 2008-11-01 17:51
- 浏览 1203
- 评论(0)
- 论坛回复 / 浏览 (0 / 3305)
- 查看更多
相关推荐
freemarker创建静态网页的一个小例子
freemarker生成静态页面------内含使用说明 freemarker生成静态页面------内含使用说明 freemarker生成静态页面------内含使用说明
struts2+freemarker 生成静态页面,希望对大家有用!!!!
那么我们就把把页面中所需要的样式放入FreeMarker文件中,然后将页面所需要的数据动态绑定,并放入Map中,通过调用FreeMarker模板文件解析类process()方法完成静态页面的生成。
NULL 博文链接:https://depravedangel.iteye.com/blog/443575
用freemarker做模板,结合struts2生成静态页面功能,不要分,嘻嘻
主要就是用servlet做的,freemarker和httpclient的静态化都封装好了工具类了,简单,有文档,可以看懂
FreeMarker教你如何生成html静态页面源码
2.freemarker 写出来的页面一般都是xml格式友好的,也就是说你可以写出很规范的xhtml,而且还可以直接使用一些xml的代码格式化工具直接美化.而且很容易发现其中缺少或者嵌套错误的tag 3. 个人觉得freemarker 和taglib...
Struts2+Hibernate+Freemarker实现【增删改查】生成静态页面!这是一个相对网上较全的案例。源码内含数据库文件sql.sql及效果图!本人致力于完整的Demo。欢迎关注!回头补上分页。敬请期待!
FreeMarker与struts2整合,一个小案例实现【增删改查】生成静态页面。内含数据库sql文件及效果图。数据库是mysql,c3p0+dbUtils实现数据操作。是一个完整的案例。
介绍几种网站生成静态页面的方法。网站全部是静态页面的话,可以减少服务器的压力。
这是一个关于SSH框架整合 和用FreeMarker技术来将动态网页静态化的操作事例
FreeMarker适合于作为Web应用的表现层。freemarker大致原理是:将页面中所需要的样式放入FreeMarker文件中,然后将页面所需要的数据动态绑定,...了解了上面的原理,接下来我就一步 步带您实现FreeMarker生成静态页面。
目前企业中:主要用 Freemarker 做静态页面或是页面展示 总结:freemarker 模版引擎,可以使用 Freemarker 模版生成 html 页面。 Freemarker 语法 /** * freemark入门案例 * freemark三要素: * 1.
用于页面的静态化,可根据写入的数据直接生成静态页面
使用Freemarker模版生成不同的静态文件,该工具类使用简单,方法说明:包含所需的参数,可以进行二次封装
FreeMarker语法之表达式,FreeMarker如何生成静态页面,freemarker空值的多种处理方法,FreeMarker的优点和缺点,Freemarker的内置函数及用法
虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据 FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件 FreeMarker与容器无关...