创建静态化页面,可以在后台添加新闻的过程中,动态的套用freemarker模板然后将新添加进数据库的数据直接放到页面上,生成一个新的页面供前台使用;
这个过程可以发生在这几种情况下:(1)添加新闻的时候生成页面;(2)后台数据库内容更改之后重新生成页面;(3)设置监听器或者时间设置,当某些条件触发时,或者一段时间过去之后动态的更新新闻页面的内容
页面的数据来自于后台,而页面的格式是一开始设计好了的,这样就可以避免任何时候前台的数据都需要AJAX去调用,节约了数据库的配置.
一.创建freemarker配置实例
config.setLocale(Locale.CHINA); config.setDefaultEncoding("utf-8"); config.setEncoding(Locale.CHINA, "utf-8"); config.setDirectoryForTemplateLoading(new File(templatePath)); config.setObjectWrapper(new DefaultObjectWrapper());
config = new Configuration();首先,freemarker只能创建一个配置实例.
config.setDirectoryForTemplateLoading(new File(templatePath));获取加载freemarker模板的文件路径.在Configuration中有三种方式获取模板文件路径.
setDirectoryForTemplateLoding(File dir):在磁盘文件系统上设置一个明确的目录,它确定从哪里加载模板.
setClassForTemplateLoding(Class cl,String prefix):类加载机制,相当于调用class.getResource();
setServletContextForTemplateLoading(servletContext,templateDir);
当然也是可以设置多个加载模板路径的:
FileTemplateLoader ft1 = new FileTemplateLoader(new File("")); FileTemplateLoader ft2 = new FileTemplateLoader(new File("")); ClassTemplateLoader ft3 = new ClassTemplateLoader(new File("")); TemplateLoader [] loders = new TemplateLoader[] {ft1,ft2,ft3}; MultiTemplateLoader mt1 = new MultiTemplateLoader(loders); config.setTemplateLoader(mt1);
最后设置的是模板对象包装的方法:config.setObjectWrapper(new DefaultObjectWrapper());
(这里的模板包装器后面会专门出章节介绍.)
二.创建数据模型
模板获得的路径知道了,模板显示的数据还没有,现在就是要往模板中定义加入数据
Map<String, Object> map = new HashMap<String, Object>(); map.put("root1", "test"); map.put("root2", "test"); map.put("root3", "test");
在freemarker中加入的数据必须全是map键值对类型.因为freemarker 的ftl模板中获取数据就是使用键值对获取数据的.
三.获取模板
在freemarker中获取模板,必须通过Configuration对象来获取,因为在Configuration已经配置了模板获取的文件路径地址,在这里只需要采用Configuration给的方法获取模板即可.
Configuration.getTemplate(java.lang.String name):根据Template名称获取路径下的模板
Configuration.getTemplate(java.lang.String name, java.util.Locale locale)
Configuration.getTemplate(java.lang.String name, java.util.Locale locale, java.lang.String encoding)
Configuration.getTemplate(java.lang.String name, java.util.Locale locale, java.lang.String encoding, boolean parseAsFTL)
Configuration.getTemplate(java.lang.String name, java.lang.String encoding)
Configuration.getTemplateLoader()
浙公网安备 33010602011771号