创建静态化页面,可以在后台添加新闻的过程中,动态的套用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()