首先需要添加freemarker.jar到项目,如果项目中有spring或者spirngmvc,需要整合,首先配置freemarkerConfig,代码结构如下

  1. <!-- 设置freeMarker的配置文件路径 -->
  2. <bean id="freemarkerConfiguration"
  3. class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  4. <property name="location" value="classpath:freemarker.properties" />
  5. </bean>
  6.  
  7. <bean id="freemarkerConfig"
  8. class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
  9. <property name="freemarkerSettings" ref="freemarkerConfiguration" />
  10. <property name="templateLoaderPath">
  11. <value>/WEB-INF/freemarker/</value>
  12. </property>
  13. <property name="freemarkerVariables"><!--设置一些常用的全局变量-->
  14. <map>
  15. <entry key="xml_escape" value-ref="fmXmlEscape" />
  16. <entry key="webRoot" value="/shop"></entry>
  17. <entry key="jsRoot" value="/shop/js"></entry>
  18. </map>
  19. </property>
  20. </bean>

其中一下代码是用来扫描.ftl的模板文件,在/web-info/freemarker目录中

  1. <property name="templateLoaderPath">
  2. <value>/WEB-INF/freemarker/</value>
  3. </property>

然后freemarker用ftl文件来呈现视图,这时候就需要配置freemarker的视图解析器,代码如下:

  1. <!-- 配置freeMarker视图解析器 -->
  2. <bean id="freemarkerViewResolver"
  3. class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
  4. <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"
  5. />
  6. <property name="viewNames" value="*.ftl" />
  7. <property name="contentType" value="text/html; charset=utf-8" />
  8. <property name="cache" value="true" />
  9. <property name="suffix" value="" />
  10. <!-- <property name="exposeRequestAttributes" value="true" />
  11. <property name="exposeSessionAttributes" value="true" />
  12. <property name="exposeSpringMacroHelpers" value="true" /> -->
  13. <property name="order" value="0" />
  14. </bean>
  15. <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 通用解析器 -->
  16. <bean id="viewResolver"
  17. class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  18. <property name="prefix" value="" />
  19. <property name="viewNames" value="*.html,*.jsp" />
  20. <property name="suffix" value="" />
  21. <property name="viewClass"
  22. value="org.springframework.web.servlet.view.InternalResourceView" />
  23. <property name="order" value="1"></property>
  24. </bean>

其中:<property name="order" value="0">代表了第一个匹配的是freemarker的视图解析器,如果匹配不成功,则自动选择order=1的其他解析器,目前的通用解析器可以解析.html跟.jsp的视图,如果需要其他视图的解析器,可以自行添加。

其中的exposeRequestAttributes  exposeSessionAttributes两个属性都被设置为true。结果是请求和会话属性都被复制到模板的属性集中,可以使用FreeMarker的表达式语言来访问并显示。

使用这些宏,必须设置FreeMarkerViewResolver的exposeSpringMacroHelpers属性为true

以上是freemarker与springmvc整合需要配置的xml文件。

------------------------------------------------------------------------------------------

下面来介绍一下在Java 代码中如何使用:

首先编写Freemarker的工具类,用来生成HTML文件的方法

  1. package com.hc.shop.common.tools;
  2.  
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.OutputStreamWriter;
  8. import java.io.UnsupportedEncodingException;
  9. import java.io.Writer;
  10. import java.util.HashMap;
  11. import java.util.Map;
  12.  
  13. import javax.servlet.http.HttpServletRequest;
  14.  
  15. import org.springframework.web.servlet.view.freemarker.FreeMarkerConfig;
  16.  
  17. import freemarker.template.Template;
  18. import freemarker.template.TemplateException;
  19.  
  20. /**
  21. * @author HuifengWang 静态化方法
  22. **/
  23. public class FreeMarkerUtil {
  24. /**
  25. *
  26. * 生成HTML静态页面的公公方法
  27. * @param fmc
  28. * @param templateName 模板的名称
  29. * @param request
  30. * @param map 生成模板需要的数据
  31. * @param filePath 相对于web容器的路径
  32. * @param fileName 要生成的文件的名称,带扩展名
  33. * @author HuifengWang
  34. *
  35. */
  36. public static void createHtml(FreeMarkerConfig fmc, String templateName,
  37. HttpServletRequest request, Map<?, ?> map, String filePath,
  38. String fileName) {
  39. Writer out = null;
  40. try {
  41. Template template = fmc.getConfiguration()
  42. .getTemplate(templateName);
  43. String htmlPath = request.getSession().getServletContext()
  44. .getRealPath(filePath)
  45. + "/" + fileName;
  46. File htmlFile = new File(htmlPath);
  47. if (!htmlFile.getParentFile().exists()) {
  48. htmlFile.getParentFile().mkdirs();
  49. }
  50. if (!htmlFile.exists()) {
  51. htmlFile.createNewFile();
  52. }
  53. out = new OutputStreamWriter(new FileOutputStream(htmlPath),"UTF-8");
  54. template.process(map, out);
  55. out.flush();
  56. } catch (UnsupportedEncodingException e) {
  57. e.printStackTrace();
  58. } catch (FileNotFoundException e) {
  59. e.printStackTrace();
  60. } catch (IOException e) {
  61. e.printStackTrace();
  62. } catch (TemplateException e) {
  63. e.printStackTrace();
  64. } finally {
  65. try {
  66. out.close();
  67. out = null;
  68. } catch (IOException e) {
  69. e.printStackTrace();
  70. }
  71. }
  72. }
  73.  
  74. /**
  75. * @param request
  76. * @param filePath 文件存放的路径
  77. * @param fileName 文件的名称,需要扩展名
  78. * @author HuifengWang
  79. * @return
  80. */
  81. public static Map<String,Object> htmlFileHasExist(HttpServletRequest request,String filePath,
  82. String fileName) {
  83. Map<String,Object> map = new HashMap<String,Object>();
  84. String htmlPath = request.getSession().getServletContext()
  85. .getRealPath(filePath)
  86. + "/" + fileName;
  87. File htmlFile = new File(htmlPath);
  88. if(htmlFile.exists()){
  89. map.put("exist", true);
  90. }else{
  91. map.put("exist",false);
  92. }
  93. return map ;
  94. }
  95. }

以上就是要生成HTML文件的工具类,参数注解都有,应该很好理解。

如何在Controller中调用??下面来看一个很简单的demo

  1. @Autowired
  2. private FreeMarkerConfig freeMarkerConfig;//获取FreemarkerConfig的实例
  3.  
  4. @RequestMapping("/ttt")
  5. public String ttt(HttpServletRequest request,HttpServletResponse response,ModelMap mv) throws IOException, TemplateException, ServletException{
  6. String fileName ="ttt.html";
  7. Boolean flag =(Boolean)FreeMarkerUtil.htmlFileHasExist(request, FREEMARKER_PATH, fileName).get("exist");
  8. if(!flag){//如何静态文件不存在,重新生成
  9. Map<String,Object> map = new HashMap<String,Object>();
  10. map.put("user", "xiaowang小王");//这里包含业务逻辑请求等
  11. mv.addAllAttributes(map);
  12. FreeMarkerUtil.createHtml(freeMarkerConfig, "demo.ftl", request, map, FREEMARKER_PATH, fileName);//根据模板生成静态页面
  13. }
  14. return FREEMARKER_PATH+"/"+fileName;//始终返回生成的HTML页面
  15. }

以上就是如何在springmvc中使用Freemarker的具体实现方式,想要很好的了解,会用,熟悉Freemarker,还需要了解Freemarker的各种语法跟标签。慢慢学习。。。

springmvc使用freemarker的更多相关文章

  1. Spring MVC 环境搭建(maven+SpringMVC+mybatis+Freemarker)

    Spring MVC 环境搭建(maven+SpringMVC+mybatis+Freemarker) 一.准备工作 1.Eclipse Java EE IDE(4.4.1) 2.JDK 3.Tomc ...

  2. springmvc与freemarker的整合

    官方简介:FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具. 它不是面向最终用户的,而是一个Java ...

  3. SpringMVC整合freeMarker实现页面静态化+SpringMVC配置多视图

    一.背景 1.什么是FreeMarker FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于 ...

  4. SpringMVC和Freemarker整合,带自定义标签的使用方法

    SpringMVC和Freemarker整合,带自定义标签的使用方法. [参考来源:http://www.360doc.com/content/14/1225/14/1007797_435663342 ...

  5. SpringMVC 集成 Freemarker 模板引擎

    本文通过 maven 项目中集成 1.引入 SpringMVC 与 Freemarker 需要的依赖 <!-- SpringMVC --> <dependency> <g ...

  6. springMVC与freemarker整合

    准备好的环境:Maven工程整合好了ssm,即spring+springMVC+mybatis.接下来准备将springMVC与freemarker整合,以html文件为模板. 一,加入freemar ...

  7. SpringMVC,Mybatis,FreeMarker连接mycat示例(一)

    首页 > 程序开发 > 软件开发 > Java > 正文 SpringMVC,Mybatis,FreeMarker连接mycat示例(一) 项目结构如图: 首先是各种配置文件, ...

  8. 百度UEditor图片上传、SpringMVC、Freemarker、Tomcat、Nginx、静态资源

    个人官网.公司项目都需要 可视化编辑器,百度UEditor做得很不错,就用的这个.项目后台用到了SpringMVC.Freemarker,开发过程中部署在Jetty,线上部署用Tomcat,最后可能配 ...

  9. SpringMVC整合Freemarker(含Demo源码)(转)

    转自:http://blog.csdn.net/sinat_27535209/article/details/61199452 整合过程如下: 1.新建一个maven web工程,使用maven依赖s ...

随机推荐

  1. 在mvc中实现图片验证码的刷新

    首先,在项目模型(Model)层中建立一个生成图片验证码的类ValidationCodeHelper,代码如下: public class ValidationCodeHelper { //用户存取验 ...

  2. https://blog.helong.info/blog/2015/03/13/jump_consistent_hash/

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179     一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT) ...

  3. Nginx配置加入css缓存配置后,css等文件not found

    现在配置: location / { root /root/html/product; } Probably another block had definition for the static f ...

  4. AngularJS基础知识2

    一.angularJS双向数据绑定 利用双向数据绑定,不仅能把数据模型的变化同步到视图上面,还可以利用双向数据绑定的特性来做一些样式上面的控制. 双向数据绑定用处很多,不仅仅是像知识点1中的那个例子, ...

  5. 使用css使textbox输入内容自动变大写

    <style type="text/css"> input[type="text"] { text-transform:uppercase; } & ...

  6. [转]搬瓦工换机房换ip之后不能连外网

    搬瓦工换机房换ip之后不能连外网 时间 2015-07-21 15:17:16  Wendal随笔 原文  http://wendal.net/2015/07/21.html 主题 iptables ...

  7. 【OpenWRT】【RT5350】【三】MakeFile文件编写规则和OpenWRT驱动开发步骤

    一.Makefile文件编写 http://www.cnblogs.com/majiangjiang/articles/3218002.html 可以看下上面的博客,总结的比较全了,在此不再复述 二. ...

  8. WP8.1 侧边滑动Item

    效果图 我看ios 和安卓上有好多类似的Item的效果,UWP上有微软官方的库,其中也有类似得效果,看样子WP8.1没有啊,顺便我的程序也是需要,我也就仿了一个. 具体思路是: 触摸控制GRId在CA ...

  9. SQL优化----百万数据查询优化

    百万数据查询优化 1.合理使用索引 索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率.现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构.索引的使用要恰到好处,其使用原则如下: ...

  10. SqlServer数据库空间使用情况常用命令

    --最简单的办法就是使用SSM客户端,报表查看 --查询数据文件的空间情况 dbcc showfilestats --查询日志文件的空间情况 dbcc sqlperf(logspace) --查询te ...