锁定老帖子 主题:教你如何用FreeMarker生成静态页面
精华帖 (0) :: 良好帖 (3) :: 新手帖 (10) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2010-02-05
众所周知,FreeMarker适合于作为Web应用的表现层,那么我们就把把页面中所需要的样式放入FreeMarker文件中,然后将页面所需要的数据动态绑定,并放入Map中,通过调用FreeMarker模板文件解析类process()方法完成静态页面的生成。了解了上面的原理,接下来我就一步步带您实现FreeMarker生成静态页面。 package tool; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Map; import freemarker.template.Configuration; import freemarker.template.DefaultObjectWrapper; import freemarker.template.Template; import freemarker.template.TemplateException; /******************************************************************************* * * @author wuzhenzhong * * @since Feb 5, 2010 * ******************************************************************************/ public class FreeMarkertUtil { /** * templatePath模板文件存放路径,templateName 模板文件名称,filename 生成的文件名称 * @param templatePath * @param templateName * @param fileName * @param root */ public static void analysisTemplate(String templatePath, String templateName, String fileName, Map<?, ?> root) { try { //初使化FreeMarker配置 Configuration config = new Configuration(); // 设置要解析的模板所在的目录,并加载模板文件 config.setDirectoryForTemplateLoading(new File(templatePath)); // 设置包装器,并将对象包装为数据模型 config.setObjectWrapper(new DefaultObjectWrapper()); // 获取模板,并设置编码方式,这个编码必须要与页面中的编码格式一致 // 否则会出现乱码 Template template = config.getTemplate(templateName, "UTF-8"); // 合并数据模型与模板 FileOutputStream fos = new FileOutputStream(fileName); Writer out = new OutputStreamWriter(fos, "UTF-8"); template.process(root, out); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } catch (TemplateException e) { e.printStackTrace(); } } }
package tool; /***************************************************** * * @author wuzhenzhong * * @since Feb 5, 2010 * *****************************************************/ public class HtmlContent { private String userName; private String userPassword; /** * @return the userName */ public String getUserName() { return userName; } /** * @param userName the userName to set */ public void setUserName(String userName) { this.userName = userName; } /** * @return the userPassword */ public String getUserPassword() { return userPassword; } /** * @param userPassword the userPassword to set */ public void setUserPassword(String userPassword) { this.userPassword = userPassword; } }
package tool; import java.util.HashMap; import java.util.Map; /******************************************************************************* * * @author wuzhenzhong * * @since Feb 5, 2010 * ******************************************************************************/ public class CreateHtmlTest { public static void main(String[] args) { HtmlContent content = new HtmlContent(); content.setUserName("张三"); content.setUserPassword("123"); Map<String, Object> root = new HashMap<String, Object>(); root.put("content", content); String templatesPath = "E:/templates"; String templateFile = "/createhtml.ftl"; String htmlFile = templatesPath + "/firsthtml.html"; FreeMarkertUtil.analysisTemplate(templatesPath, templateFile, htmlFile, root); } }
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>user.ftl</title> </head> <body> ${content.userName} ${content.userPassword} </body> </html> 下面在说一下FreeMarker的优缺点吧: 优点: 1、易学易用
缺点: 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-02-05
第三缺点,不就是robbin的某篇文章提的呗。这个问题早已经被fixed了。
|
|
返回顶楼 | |
发表时间:2010-02-05
ray_linn 写道 第三缺点,不就是robbin的某篇文章提的呗。这个问题早已经被fixed了。
哦,谢谢,这个只是我以前整理了一下,还真不知道,这个bug已经ok了,呵呵 |
|
返回顶楼 | |
发表时间:2010-02-05
fenglingcompany 写道 ray_linn 写道 第三缺点,不就是robbin的某篇文章提的呗。这个问题早已经被fixed了。
哦,谢谢,这个只是我以前整理了一下,还真不知道,这个bug已经ok了,呵呵 应该把传送门发出来. |
|
返回顶楼 | |
发表时间:2010-02-05
抛出异常的爱 写道 fenglingcompany 写道 ray_linn 写道 第三缺点,不就是robbin的某篇文章提的呗。这个问题早已经被fixed了。
哦,谢谢,这个只是我以前整理了一下,还真不知道,这个bug已经ok了,呵呵 应该把传送门发出来. 不好意思,我想问一下,什么是传关门,不太知道,你能告诉我一下吗? |
|
返回顶楼 | |
发表时间:2010-02-05
我在服务器上使用freemarker生成静态html的时候,有时候会出现用户访问不是最新生成的html.你们有出现过这样的情况吗?
|
|
返回顶楼 | |
发表时间:2010-02-05
nothinkinperson 写道 我在服务器上使用freemarker生成静态html的时候,有时候会出现用户访问不是最新生成的html.你们有出现过这样的情况吗?
我们这也遇到过,不过多刷新几次就行了,具体为什么,还不太清楚 |
|
返回顶楼 | |
发表时间:2010-02-05
我也用freemarker做了静态页面,但是我我有几个疑问?如何直接访问静态页面,是设定了时间限制么,多少时间刷新一次么。还有,空值的问题,后台删除个数据,直接导致页面的报错,如何支持JSTL标签,我用的struct1+spring1.freemarker老要做判断
|
|
返回顶楼 | |
发表时间:2010-02-05
freemarker还是挺好用的。
|
|
返回顶楼 | |
发表时间:2010-02-05
抛出异常的爱 写道 fenglingcompany 写道 ray_linn 写道 第三缺点,不就是robbin的某篇文章提的呗。这个问题早已经被fixed了。
哦,谢谢,这个只是我以前整理了一下,还真不知道,这个bug已经ok了,呵呵 应该把传送门发出来. 传送门 其实三个缺点都是robbin总结的,而且只对robbin是缺点,而不是freemarker的缺点。 |
|
返回顶楼 | |