说明:FreeMarker是静态页面生成框架,本文章主要写了两个案例且都是基于SpringMvc框架。一个是生成伪静态,一个是生成静态页面。只写具体功能,不做太多解释,代码是干货,想多深入自己慢慢研究。
准备工作:现在pom.xml文件中引入FreeMarker包
<!--freemarker--> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker-gae</artifactId> <version>2.3.20</version> </dependency>
一,伪静态
这是之前Springmvc的视图配置。
<!-- 定义跳转的文件的前后缀 ,视图模式配置--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 --> <property name="prefix" value="/WEB-INF/jsps/" /> <property name="suffix" value=".jsp" /> <property name="order" value="1"/> </bean>
在原有的基础上增加FreeMarker的视图配置。
<!-- FreeMarker模板路径 --> <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath"> <value>/WEB-INF/freemarker</value> </property> <property name="freemarkerVariables"> <map> <entry key="xml_escape" value-ref="fmXmlEscape" /> </map> </property> <property name="defaultEncoding"> <value>utf-8</value> </property> </bean> <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape" /> <!-- 配置freeMarker视图解析器 --> <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" /> <property name="contentType" value="text/html; charset=utf-8" /> <property name="suffix" value=".ftl" /> <property name="order" value="0" /> </bean>
之前是返回视图的时候直接返回/WEB-INF/jsp
配置完成后会根据order的value等级返回查找,我们配置的是优先返回order=0的视图,也就是freemarker的视图。
freemarker.ftl文件中内容。
<#assign base="sss" /> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>freemarker Test</title> </head> <body> <h1>Hello,${root.w}</h1> <br> ${root.w} </body> </html>
我们在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了