说明:FreeMarker是静态页面生成框架,本文章主要写了两个案例且都是基于SpringMvc框架。一个是生成伪静态,一个是生成静态页面。只写具体功能,不做太多解释,代码是干货,想多深入自己慢慢研究。
准备工作:现在pom.xml文件中引入FreeMarker包
org.freemarker freemarker-gae 2.3.20
一,伪静态
这是之前Springmvc的视图配置。
class="org.springframework.web.servlet.view.InternalResourceViewResolver"> name="prefix" value="/WEB-INF/jsps/" /> name="suffix" value=".jsp" /> name="order" value="1"/>
在原有的基础上增加FreeMarker的视图配置。
id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> name="templateLoaderPath"> /WEB-INF/freemarker name="freemarkerVariables"> key="xml_escape" value-ref="fmXmlEscape" /> name="defaultEncoding"> utf-8 id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" /> class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" /> name="contentType" value="text/html; charset=utf-8" /> name="suffix" value=".ftl" /> name="order" value="0" />
之前是返回视图的时候直接返回/WEB-INF/jsp
配置完成后会根据order的value等级返回查找,我们配置的是优先返回order=0的视图,也就是freemarker的视图。
freemarker.ftl文件中内容。
<#assign base="sss" /> html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">freemarker Test Hello,${root.w}
${root.w}
我们在FreeMarkerController中写一个返回freemarker视图的方法就OK了
@RequestMapping("freemarkerFirstPage") public String firstPage(Model model){ String w="Welcome FreeMarker!"; Map root = new HashMap(); root.put("w",w); model.addAttribute("root",root); return "freemarker"; }
这样freemarker的伪静态就完成了,功能类似于java的jsp.
二,生成静态页面
在D盘下创建db文件夹
在FreeMarkerController中加入下面代码就Ok了
@RequestMapping("twoHtmlPage") @ResponseBody public String twoHtmlPage(Model model,HttpServletRequest req){ String w="Welcome FreeMarker!"; Map root = new HashMap(); root.put("w",w); String realPath=req.getServletContext().getRealPath("/WEB-INF/freemarker"); System.out.println(realPath); Configuration config=new Configuration(); try { config.setDirectoryForTemplateLoading(new File(realPath)); config.setObjectWrapper(new DefaultObjectWrapper()); Template template=config.getTemplate("/freemarker.ftl","GBK"); FileOutputStream fos = new FileOutputStream("D:\\db\\freemarker.html"); Writer out = new OutputStreamWriter(fos,"GBK"); template.process(root, out); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } catch (TemplateException e) { e.printStackTrace(); } return "OK"; }
代码访问完成后,去D/db文件夹下看看是否生成静态页面,如果生成就Ok了