Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(五)
这是本系列的最后一篇,主要讲一下FreeMarker模板引擎的基本概念与常用指令的使用方式。 一、FreemMarker基本概念 FreemMarker是一个用Java语言编写的模板引擎,它是一个基于模板来生成文本输出的一个工具。是除了JSP之外被使用得最多的页面模板技术之一,另一个比较有名的模板则是Velocity。 用户可以使用FreeMarker来生成所需要的内容,通常由Java提供数据模型,FreeMarker通过模板引擎渲染数据模型,这样最终得到我们想要的内容。使用FreeMarker作为展示层,访问速度会比较快,因为FreeMarker引擎渲染页面的时候,只需要把数据填充进去就可以了,其它的都是固定的模板内容。另外,使用FreeMarker能够很方便的动态生成静态页面,对于大访问量的网站,配合nginx可以很好的提高网站性能。 在ssm3这个例子中,就是使用的FreeMarker模板技术来实现的视图层。本文主要是对ssm3例子中所使用到的FreeMarker知识点进行介绍,其它更详细的内容还请大家参考官方文档。 在本文的最后有ssm3源码,有需要的朋友可以自行下载,例子是最基本的,方便入门的朋友学习与了解。 二、FreemMarker配置说明 在Spring 3.0框架中,已经集成好了FreeMarker,对它进行了适度的封装,我们使用起来非常方便。要使用FreemMarker模板的功能,只需要进行下面两项配置。 a、FreemMarker视图解析器
当我们发出REST请求访问资源时,当Controller执行完毕,需要返回结果给我们时,那些返回字符串指定的都是结果页面,这时,就通过上面这个解析器,根据返回的那些字符串解析成我们设计的页面。另外,如果要使用Spring提供的FreeMarker宏,还需要加上exposeSpringMacroHelpers这个属性,将它设为true,你可以将这些宏理解为一种功能,或一个方法。 b、FreemMarker环境配置
上面这段配置设置了FreeMarker环境属性,templateLoaderPath指定模板文件存放的路径,它相当于是定义了模板的前缀,所有显示的页面都遵循这个路径规则。还指定了模板文件的编码格式,如果不显示配置,否则会采用系统默认编码,这很容易出现乱码的情况,所以一定要将编码统一设置,不要再使用gb2312或gbk之类的编码方式了,采用国际统一的Unicode UTF-8编码是比较好的习惯。 除了上面我们看到的这些配置设置外,FreeMarkerConfigurer还有一个很重要的属性是freemarkerVariables,它可以用来设置我们自己开发的自定义指令标签,以满足不同的业务需求。 三、FreemMarker指令标记 要想在最终结果页面中填充数据,需要用到FreeMarker标记指令来达到这一目的。不过这些标记指令一般不会单独出现,基本上是多个组合使用,为了让大家方便理解,大象就以ssm3中的一些页面为例子进行说明。 FreeMarker有两种类型:预定义指令和用户自定义指令。预定义指令是以#号开头,用户自定义的指令则使用@开头。而Spring的FreeMarker宏也是以@开头。
指令assign表示定义一个变量,它的格式是<#assign name=value>,在这里ctx是变量名name,value可以是一个值,也可以是一个表达式。还记得FreeMarker解析器中我们设置的requestContextAttribute属性为rc吧,我们现在就是用它来获得我们应用上下文,我们的应用名为ssm3,所以这里就是取得这个值,将它赋给ctx,上面这些都写在meta.html这个模板页面中,这样我们就可以在所有模板页中引用这个变量。 在表达式中,使用了一个!符号,它的作用是如果rc.getContextPath()为null或不存在,就将字符串”/ssm3”作为默认值赋给变量ctx。这样,即使万一因为某些原因无法取得上下文值,我们的ctx变量也不会因此而出现空值或不正确的值,从而引起系统异常。 在使用FreeMarker时,一定要注意一点,FreeMarker绝不允许引用不存在的变量(即变量为null),除非明确地告诉它当变量不存在(null)时如何处理。 上面这一点非常重要,往往很多时候Bug就出在空值未处理上面,请大家使用FreeMarker的时候一定要多加注意。
指令include载入模板页,可以使用它在一个模板中插入另外一个FreeMarker模板文件。
<#if>条件判断指令,list??是否为空判断,如果list不为null才会往下执行。??一般都与if指令一起执行。 <#list list as entity>开始循环遍历,list是model里面定义的属性名称,as是list循环定义变量的语法,entity是list循环变量的名称。${...}它和JSTL里的同一个表达式含义相同。FreeMarker都是在输出时,用实际值替换。
Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(五)的更多相关文章
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(三)
前两章我为大家详细介绍了如何搭建Maven环境.Spring MVC的流程结构.Spring MVC与Struts2的区别以及示例中的一些配置文件的分析.在这一章,我就对示例的层次结构进行说明,以及M ...
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(四)
这一章大象将详细分析web层代码,以及使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能. 之前在使用Struts2实现MVC的注解时,是借助struts2-conventi ...
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(二)
在上一篇文章中我详细的介绍了如何搭建maven环境以及生成一个maven骨架的web项目,那么这章中我将讲述Spring MVC的流程结构,Spring MVC与Struts2的区别,以及例子中的一些 ...
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(一)
Spring更新到3.0之后,其MVC框架加入了一个非常不错的东西——那就是REST.它的开放式特性,与Spring的无缝集成,以及Spring框架的优秀表现,使得现在很多公司将其作为新的系统开发框架 ...
- Spring mvc系列一之 Spring mvc简单配置
Spring mvc系列一之 Spring mvc简单配置-引用 Spring MVC做为SpringFrameWork的后续产品,Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块 ...
- Spring4.X + spring MVC + Mybatis3 零配置应用开发框架搭建详解(1) - 基本介绍
Spring4.X + spring MVC + Mybatis3 零配置应用开发框架搭建详解(1) - 基本介绍 spring集成 mybatis Spring4.x零配置框架搭建 两年前一直在做后 ...
- Spring MVC(3)Spring MVC 高级应用
一.Spring MVC 的数据转换和格式化 前面的应用,都只是用HandlerAdapter去执行处理器. 处理器和控制器不是一个概念,处理器是在控制器功能的基础上加上了一层包装,有了这层包装,在H ...
- Spring MVC(2)Spring MVC 组件开发
一.控制器接收各类请求参数 代码测试环境: 接收各类参数的控制器--ParamsController package com.ssm.chapter15.controller; @Controller ...
- centos7.2环境elasticsearch-5.0.1+kibana-5.0.1+zookeeper3.4.6+kafka_2.9.2-0.8.2.1部署详解
centos7.2环境elasticsearch-5.0.1+kibana-5.0.1+zookeeper3.4.6+kafka_2.9.2-0.8.2.1部署详解 环境准备: 操作系统:centos ...
随机推荐
- 11个强大的Visual Studio调试小技巧(转)
简介 调试是软件开发周期中很重要的一部分.它具有挑战性,同时也很让人疑惑和烦恼.总的来说,对于稍大一点的程序,调试是不可避免的.最近几年,调试工具的发展让很多调试任务变的越来越简单和省时. 这篇文章总 ...
- 【HDOJ】3660 Alice and Bob's Trip
就是一个基本的dfs.可关键问题是c/c++/g++光输入就超时了.还是写java过的,毕竟时限4s.都放弃希望了,没想到还真过了. import java.lang.*; import java.i ...
- bzoj3626
百度空间马上要下架的说,赶快把最后一点题解补完,然后搬家这是一道不错的题,首先注意询问是满足区间减法的,我们把他变成前缀和表示设我们询问[1,r]中的点和z的LCA深度和,假设我们确定一个根,不难发现 ...
- 操作系统杂谈 mac 和linux windows若干概念
Mac: vmware 安装:1.方式一通过FreeBSD方式用 darwin.iso引导加载dmg安装 2.通过制作cdr /iso vmware安装mac插件 mac有 macpe 使用open ...
- ☀【DOM对象 / jQuery对象】
jQuery对象和DOM对象 √http://www.ituring.com.cn/article/38868 <!DOCTYPE html> <html lang="zh ...
- MySql定位执行效率较低的SQL语句
MySQL能够记录执行时间超过参数 long_query_time 设置值的SQL语句,默认是不记录的. 获得初始锁定的时间不算作执行时间.mysqld在SQL执行完和所有的锁都被释放后才写入日志.且 ...
- SQL Server查询性能优化——覆盖索引(一)
覆盖索引又可以称为索引覆盖. 解释一: 就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖. 解释二: 索引是高效找到行的一个方法,当能通过检索索引 ...
- Curl之Post Json
curl Post Json $ curl -i -X POST -H "'Content-type':'application/x-www-form-urlencoded', 'chars ...
- 提升WI-FI信号强度的10大方法
原文链接:http://server.51cto.com/Net-402889.htm
- UVa10635 - Prince and Princess(LCS转LIS)
题目大意 有两个长度分别为p+1和q+1的序列,每个序列中的各个元素互不相同,且都是1~n^2之间的整数.两个序列的第一个元素均为1.求出A和B的最长公共子序列长度. 题解 这个是大白书上的例题,不过 ...