FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据。

优点

1、不能编写java代码,可以实现严格的mvc分离
2、性能非常不错
3、对jsp标签支持良好
4、内置大量常用功能,使用非常方便
5、宏定义(类似jsp标签)非常方便
6、使用表达式语言

缺点

1、不是官方标准
2、用户群体和第三方标签库没有jsp多

选择freemarker的原因

1、性能。velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差(虽然只是几毫秒到十几毫秒的差距)。但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。
2、宏定义比jsp tag方便
3、内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便
4、支持jsp标签
5、可以实现严格的mvc分离

6、易学易用

我是看了一天文档就用得挺熟练了,freemarker文档写得太好了,例子丰富,照做一遍全都会了。

7、功能强大
比Velocity强大多了,还支持JSP Tag。不过最有意义的是macro功能,可以自定义常用的macro,实现页面常规操作的可复用性。

8、报错信息友好
很多应用服务器的JSP报错信息是无法定位到源代码行的。不过freemarker报错定位很准确,丝毫不差,而且信息丰富,一看就知道怎么回事(虽然那个黄黄的页面看起来让人难受)

与JSP相比,FreeMarker的一个优点在于不能轻易突破模板语言开始编写Java代码,因此降低了领域逻辑漏进视图层的危险几率。但缺点是需要一点附加配置来将其平稳地集成到应用程序中,一些IDE(集成开发环境)可能并不完全支持它,当然还有开发者或设计者也许需要学习一门陌生的模板语言。相关的JAR文件将要添加到WEB-INF/lib(在需要的时候,它们包含在Spring中) 。

整合 Freemarker

1、添加依赖包,在 pom.xml 文件中的;

dependencies

节点下加入

     <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker --><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.23</version></dependency>

2、web.xml 文件配置不需要更改;

3、在 spring-mvc.xml 中添加配置,有人可能习惯用 applicationContext.xml,这个文件名具体用什么是在 web.xml 中指定的;

 <!-- 配置freeMarker视图解析器 -->  <bean id="viewResolverFtl" 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="cache" value="false" />  <property name="suffix" value=".ftl" />  <property name="order" value="0"/><property name="requestContextAttribute" value="request"/></bean>  <!-- 配置freeMarker的模板路径 -->  <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  <property name="templateLoaderPath">  <value>/</value>  </property>  <property name="freemarkerVariables">  <map>  <entry key="xml_escape" value-ref="fmXmlEscape" />  </map>  </property>  <property name="defaultEncoding">  <value>utf-8</value>  </property>  <property name="freemarkerSettings">  <props>  <prop key="template_update_delay">0</prop>  </props>  </property>  </bean>  <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/>

注意 template_update_delay 的配置,我这里使用 0 是因为在开发过程中经常需要修改测试,防止缓存;否则的话每次修改模板都需要重启或等待超时后才会使用修改后的模板内容,非常不方便测试!

相关参考

Freemarker官网

百科词条: freemarker

浅谈jsp、freemarker、velocity区别

Spring MVC 整合 Freemarker

《SSM框架实战》 整合 Freemarker相关推荐

  1. SSM框架实战系列之十三_H-ui框架之一

    SSM框架实战系列之十三_H-ui框架之一 对于很多Java程序员来说,让他们写代码是没问题,但要他们做出一个相对好看的页面,那是相当地困难. 那么一些快速开发框架对于Java程序员来说无疑是一个福音 ...

  2. SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

    登录 | 注册 收藏成功 确定 收藏失败,请重新收藏 确定 查看所有私信查看所有通知 暂没有新通知 想要绕过微信小程序开发中的坑吗?不妨来听这个,今晚8点,1小时帮你搞定! 14小时以前 CSDN日报 ...

  3. ssm mysql过程抛错_下列关于 SSM 框架的整合说法错误的是 。 ( ) B : 。 C : 。 D : 。_学小易找答案...

    [单选题]对于两方向出站信号机为防止闪双绿灯现象,电路采取的措施是( ) [单选题]MyBatis 的更新操作有关说发错误的是 . ( ) [单选题]SJ电路中接入FDGJ第三组前接点的作用是( ) ...

  4. [转]SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

    使用SSM(spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...

  5. 关于ssm框架的整合(二) 2021.05.10

    对于上一章总结出来的是ssm框架的架子,就是配置文件这些,搭猪圈,这一节的整合是关于一些前端方向的,这一节的整合十分重要,主要是讲前后端的交互! 首先创建一个allBook.jsp文件,用的boost ...

  6. SSM 框架 搭建整合(IDEA)保姆级

    一:搭建整合环境 1. 搭建整合环境 1. 整合说明:SSM整合可以使用多种方式,咱们会选择XML + 注解的方式 2. 整合的思路: 先搭建整合的环境 先把Spring的配置搭建完成 再使用Spri ...

  7. SSM框架详细整合教程(Spring+SpringMVC+MyBatis)

    动机 使用maven已经有一段时间了,但项目是别人搭建好的,因此一直想着自己要学习搭建一下.网上找了些资料后,结合自己实验,花了点时间就搞好,老样子,写在博客上,免得日后忘记. 本文链接:http:/ ...

  8. 最基础的-----基于maven进行的SSM框架的整合的全部配置文件.

    话不多说. 直接配置内容走起. 一些注释写在文件里面. pom.xml文件: <project xmlns="http://maven.apache.org/POM/4.0.0&quo ...

  9. KKB : SSM框架的整合

    框架的搭建 1.创建web-app 的maven项目 2.创建main包下的java文件夹和resource文件夹 3.添加依赖包,统一框架版本 规定spring的版本 <dependencie ...

最新文章

  1. json的键为变量而不是字符串时,怎么写?
  2. lombok 生成代码_使用Project Lombok减少Java应用程序中的样板代码
  3. CCNP-第二篇-SLA扩展+EIGRP高级版(上)
  4. java方法重载实事例_零基础java入门教程函数重载function实例化格式案例
  5. 上班第一天,Myeclipse 2014上SVN部署以及maven 配置
  6. Date-calendar 类
  7. GMaps.js - 轻松集成Google Maps的jQuery插件
  8. 第8章 静态路由配置
  9. 单片机三种烧录方式ICP、IAP和ISP
  10. 如何说服你的同事使用TDD
  11. HTML入门笔记(带源文件)
  12. python 控制键盘鼠标库pynput详解
  13. AdGuard4.0新版本广告拦截程序 新增功能介绍
  14. Word操作之Mathtype自动进行公式编号
  15. Inventor API学习
  16. linux 多wan口 路由器,真假多WAN负载均衡
  17. 为什么有些人赚钱那么容易,有些人却赚不到钱?
  18. VB版机房收费系统流程图--00
  19. FPGA之流水线算法
  20. python3x下载_python最新版下载

热门文章

  1. 16-margin的用法
  2. latex/Xelatex书籍排版总结---顺便附上一本排好的6寸android书…
  3. S-DES加密与解密
  4. Spring学习笔记002 - AOP
  5. 必须知道的app测试与web测试的区别
  6. 放纵的感觉其实没有想象的那么好!
  7. B+树索引和哈希索引
  8. golang goroutine协程运行机制及使用详解
  9. 每个人都应该学git,最新GitHub上git指南我不信你不会git
  10. 小程序wx.uploadFile 显示errMsg: uploadFile:fail Error: Parse Error