Spring mvc整合freemarker详解

2023-11-02

1.什么是FreeMarker

FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写
FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序
虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图)
这里写图片描述

2.FreeMarker特性

能够生成各种文本:HTML、XML、RTF、Java源代码等等
易于嵌入到你的产品中:轻量级;不需要Servlet环境
插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等
你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器

3. springMVC整合Freemarker

1.添加jar包

添加freemarker的jar,还需要额外添加spring-content-support的jar包,不然会报错。

2.然后再Spring的配置文件中添加对freemarker的配置

<!-- 配置freeMarker的模板路径 -->  
     <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
        <property name="templateLoaderPath" value="WEB-INF/ftl/" />  
        <property name="defaultEncoding" value="UTF-8" />  
     </bean>  
     <!-- freemarker视图解析器 -->  
     <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">  
        <property name="suffix" value=".html" />  
        <property name="contentType" value="text/html;charset=UTF-8" />  
        <!-- 此变量值为pageContext.request, 页面使用方法:rc.contextPath -->  
        <property name="requestContextAttribute" value="rc" />  
     </bean> 

3.写一个User类:

package com.my.springmvc.bean;

public class User {
    private String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

}

4.一个FreeMarkerController类:

@Controller
@RequestMapping("/home")
public class FreeMarkerController {

    @RequestMapping("/index")
    public ModelAndView Add(HttpServletRequest request,HttpServletResponse response){
        User user = new User();
        user.setUsername("sg");
        user.setPassword("1234");
        List<User> users  = new ArrayList<User>();
        users.add(user);

        ModelAndView mv = new ModelAndView();
        mv.setViewName("index");
        mv.addObject("users",users);
        return mv;
    }
}

5.然后再WEB-INF/ftl目录下创建一个index.html文件:

##

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>another</title>
</head>
<body>  
<#list users as user>  
username : ${user.username}<br/>  
password : ${user.password}  
</#list>  
</body>  
</html>

结果:

这里写图片描述

4.freemarker语法介绍:

1. FreeMarker模板文件主要由如下4个部分组成

文本:直接输出的部分
注释:<#– … –> 格式部分,不会输出
插值:即 ${…} 或 #{…} 格式的部分,将使用数据模型中的部分替代输出
指令:FreeMarker 指定,和 HTML 标记类似,名字前加 # 予以区分,不会输出

<html>
<head>
    <title>Welcome!</title>
</head>
<body>
    <#-- 注释部分 -->
    <#-- 下面使用插值 -->
    <h1>Welcome ${username} !</h1>

    <p>We have these animals:</p>
    <u1>
        <!-- 使用FTL指令 -->
        <#list animals as animal>
        <li>${animal.name} for ${animal.price} Euros</li>
        </#list>
    </u1>
</body>
</html

2.控制语句

<#if condition> 
    ... 
<#elseif condition2> 
    ... 
<#elseif condition3> 
    ... 
<#else>
<#switch value> 
    <#case refValue1> 
        ... 
        <#break> 
    <#case refValue2> 
        ... 
        <#break> 
    <#case refValueN> 
        ... 
        <#break> 
    <#default> 
        ... 
</#switch>

3判断变量是否存在

<#if readonly??></#if>

4.防止空指针报错

变量名后用 ! 加默认值:${foo!”Default”},如果 foo 为 null 则输出 Default

5.普通的变量

这是最简单的情况,直接变量名称,如{name}

需要注意的是有的变量是需要转义的如双引号

6..遍历List集合

<#list ["克里斯埃文斯", "斯嘉丽约翰逊", "小罗伯特唐尼"]  as x>  
${x}  
</#list>  

此外,迭代集合对象时,还包含两个特殊的循环变量:
item_index:当前变量的索引值
item_has_next:是否存在下一个对象
也可以使用<#break>指令跳出迭代

7.运算符

FreeMarker表达式中完全支持算术运算,FreeMarker支持的算术运算符包括:+, - , * , / , %
比较运算符

表达式中支持的比较运算符有如下几个:
1,=或者==:判断两个值是否相等.
2,!=:判断两个值是否不等.
3,>或者gt:判断左边值是否大于右边值
4,>=或者gte:判断左边值是否大于等于右边值
5,<或者lt:判断左边值是否小于右边值
6,<=或者lte:判断左边值是否小于等于右边值

注意:=和!=可以用于字符串,数值和日期来比较是否相等,但=和!=两边必须是相同类型的值,否则会产生错误,而且FreeMarker是精确比较,”x”,”x “,”X”是不等的.其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替>会有更好的效果,因为FreeMarker会把>解释成FTL标签的结束字符,当然,也可以使用括号来避免这种情况,如:<#if (x>y)>

逻辑运算符

和普通程序一样,freemarker也有&&,|| ,!三种

8.变量的声明

<#assign num=0/>

9.include指令

include指令的作用类似于JSP的包含指令,用于包含指定页.include指令的语法格式如下:
<#include filename [options]>
在上面的语法格式中,两个参数的解释如下:
filename:该参数指定被包含的模板文件
options:该参数可以省略,指定包含时的选项,包含encoding和parse两个选项,其中encoding指定包含页面时所用的解码集,而parse指定被包含文件是否作为FTL文件来解析,如果省略了parse选项值,则该选项默认是true.

10.import指令

该指令用于导入FreeMarker模板中的所有变量,并将该变量放置在指定的Map对象中,import指令的语法格式如下:
<#import “/lib/common.ftl” as com>
上面的代码将导入/lib/common.ftl模板文件中的所有变量,交将这些变量放置在一个名为com的Map对象中.

11 macro的使用

这个可以用来实现自定义指令,一般用来做公共组件,例如分页条
最后说下list中含有map的遍历,这种情况可以使用点语法或方括号语法.假如有下面的数据模型:
Map root = new HashMap();
Book book = new Book();
Author author = new Author();
author.setName(“annlee”);
author.setAddress(“gz”);
book.setName(“struts2”);
book.setAuthor(author);
root.put(“info”,”struts”);
root.put(“book”, book);

为了访问数据模型中名为struts2的书的作者的名字,可以使用如下语法:
book.author.name //全部使用点语法
book[“author”].name
book.author[“name”] //混合使用点语法和方括号语法
book[“author”][“name”] //全部使用方括号语法

参考:
http://blog.csdn.net/walkcode/article/details/26393211
http://blog.csdn.net/win_man/article/details/51317957
http://rongjih.blog.163.com/blog/static/3357446120127632757911/
http://qtdebug.com/spring-web/11.%20Freemarker%20%E8%AF%AD%E6%B3%95%E7%AE%80%E4%BB%8B.html
http://blog.csdn.net/walkcode/article/details/26393211
http://blog.csdn.net/shimiso/article/details/8778793

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring mvc整合freemarker详解 的相关文章

随机推荐

  • Python学习 - 异常处理

    Python学习 语法入门 https blog csdn net wanzijy article details 125287855 Python学习 数据类型 https blog csdn net wanzijy article de
  • 移动端判断是否为ios&网页适配ios安全区

    1 webkit touch callout属性用法极少 可参考 webkit touch callout CSS 层叠样式表 MDN supports webkit touch callout none iOS styles height
  • react性能优化方案

    优化shouldComponentUpdate生命周期的逻辑 避免不要的渲染和dom操作 在componentWillUnmount生命周期阶段 清楚定时器 订阅 监听等操作 为列表数据添加唯一标识key 使用PureComponent和m
  • 关于sql语句的闭合方式

    关于sql语句的闭合方式 前言 以前一直以为字符型的SQL语句只能用单引号或双引号闭合 数值型可以不用闭合 以为php的SQL语句能用括号闭合是因为PHP的特性 自己的基础实在不行 准备 建一张包含数值型和字符型字段的表 并插入数据 这里有
  • IDEA连接不上SVN,一直弹出authentication required

    如题 打开设置后去掉默认的勾选 重新输入用户名密码 更新代码成功 连接上之后可以再勾选上 不再受影响 如果仍然不好使 建议点击下方 Clear Auth Cache 按钮再试一下
  • flask + Pandas + echarts 使用饼状图等将二手房数据进行分析+可视化

    目录 一 实战场景 二 知识点 python 基础语法 python 文件读写 pandas 数据处理 flask web 框架 echarts 图表 bootstrap jinja 模版 三 菜鸟实战 初始化 Flask 框架 设置路由
  • json yeid_请问一下, scrapy 在一个 def 里不能发多个 yield Request 请求么?为什么?...

    这是我写的 spider 文件 下面有我碰到的在一个页面内所需要的值 放在 3 个 json 文件中 所以我在一个函数下写了三个 yield Request 请求 import scrapy from scrapy http import
  • 【黑苹果显卡驱动】通过Device/properties 给Framebuffer打补丁一点经验

    本文参考Coffee Lake帧缓冲区补丁及UHD630 Coffee Lake ig platform id数据整理 算是对文章的一种补充吧 注意 本篇文章不适合小白阅读 一 打这个补丁有什么用处 打这个补丁就能成功驱动你的核显 让它正常
  • js函数明明已经定义,却显示xxx()is not defined的解决办法

    在js代码中 偶尔会碰到函数明明已经定义 却提示xx is not defined 如下如 js代码如下 明明已经执行了一遍了 但是定时器里的就是找不到 一直出现上面的错误提示 解决办法其实很简单 将代码改写为如下形式即可 完美解决 快去试
  • BUUCTF-Web[ACTF2020 新生赛]Upload

    BUUCTF Web ACTF2020 新生赛 Upload 目录标题 BUUCTF Web ACTF2020 新生赛 Upload 题目 题解 题目 题解 访问靶机 首先我们先进行尝试上传正常带有php木马的文件 点击上传后 给我们弹窗警
  • [Qt]调用windows进程(打开文档,打开图片,打开文件夹...)

    打开文档 QStringLiteral用于兼容中文 QString fileName qApp gt applicationDirPath QStringLiteral Help 使用手册 doc if QDesktopServices o
  • js本地预览图片和转base64

    用代码说话
  • 公网远程连接本地socket服务【内网穿透】

    文章目录 1 配置本地socket服务 2 本地socket服务暴露至公网 2 1 创建隧道映射9999端口 2 2 获取公网地址 3 公网连接本地socket服务端 1 配置本地socket服务 Java 服务端demo环境 jdk1 8
  • 大佬带飞,代码分享不会用?玩转Git,跟上大佬节奏!

    一 安装 Git 客户端 这里为大家提供了windows版的Git客户端以及安装图文详解文档 百度网盘 https pan baidu com s 1CDu0Ke199pt3Ysv QtWObA 提取码 8888 如果过期了请留言联系我 二
  • 如何用12306的积分买火车票

    积分买的票是不允许退票的 所以最好自己买票的时候用 积分获取 是根据价格 5 比如我买的是100元的票就可以获得500积分
  • 语音自适应回声消除(AEC)算法

    我的书 淘宝购买链接 当当购买链接 京东购买链接 自适应回声消除算法 欢迎留言交流 AEC算法早期用在Voip 电话这些场景中 自从智能设备诞生后 智能语音设备也要消除自身的音源 这些音源包括音乐或者TTS机器合成声音 本文基于开源算法阐述
  • 神经网络 深度神经网络,神经网络进化过程图

    神经网络算法与进化算是什么关系 应该没有太大的关系吧 我对遗传算法了解一点 遗传算法主要用来优化神经网络第一次运行时所用的连接权值 因为随机的连接权值往往不能对针对的问题有比较好的收敛效果 Matlab神经网络工具箱自动生成的初始权值其实已
  • 标准库类型string和vector

    一 命名空间 std cin std就是命名空间 这个的含义是 编译器应该从操作符左侧的名字所示的作用域std中去寻找cin 另一种方式就是在开头显式进行说明 using std cin 这样一来后续就不用再去在每条语句中显式说明了 需要注
  • OpenAI发布通用人工智能路线图:AGI比想象中来得更快

    来源 机器之心 本文约2600字 建议阅读5分钟 通用人工智能的出现可能只是技术发展历程中的一个小节点 因为 AGI 或许可以加速自身的进步 从而以指数方式扩展能力 在 ChatGPT 引爆科技圈之后 人们对于先进技术产生了更多期待 但一直
  • Spring mvc整合freemarker详解

    1 什么是FreeMarker FreeMarker是一个模板引擎 一个基于模板生成文本输出的通用工具 使用纯Java编写 FreeMarker被设计用来生成HTML Web页面 特别是基于MVC模式的应用程序 虽然FreeMarker具有