深入浅出FreeMarker(一)-基础教程
freemarker基本语法

freemarker基本语法一、什么是FreemarkerFreemarker是一个模板引擎,它可以将数据和模板进行结合,生成所需的文本输出。
它主要用于Web应用程序中的MVC架构中,将业务逻辑和表现层分离。
二、Freemarker基本语法1. 变量Freemarker中的变量可以通过${}来表示,如${}表示取出user对象的name属性。
2. 指令指令是Freemarker中最重要的语法之一,它可以控制模板引擎的行为。
常用指令有if、list、assign等。
(1)if指令:用于条件判断,例如:<#if user.age gt 18>成年人<#else>未成年人</#if>```(2)list指令:用于循环输出,例如:```html<#list users as user>${}</#list>```(3)assign指令:用于变量赋值,例如:```html<#assign name = "张三"> ${name}```宏定义是一种自定义函数的方式,在模板中可以多次调用。
例如:```html<#macro printName name>${name}</#macro><@printName name="张三"/><@printName name="李四"/>```4. 内建函数Freemarker提供了一些内建函数,可以方便地处理字符串、日期等数据类型。
例如:(1)字符串函数:```html${name?length} //获取字符串长度${name?upper_case} //将字符串转换为大写字母${name?lower_case} //将字符串转换为小写字母```(2)日期函数:```html${date?string("yyyy-MM-dd")} //将日期格式化为指定格式的字符串${date?time} //获取日期的时间戳```5. 注释在Freemarker中,注释可以使用<#-- -->来表示,例如:```html<#-- 这是一段注释 -->```三、Freemarker在Java中的应用1. 引入Freemarker依赖在Maven项目中,可以通过以下方式引入Freemarker依赖:```xml<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version></dependency>```2. 创建Configuration对象Configuration对象是Freemarker的核心类,它会负责解析模板文件和数据模型。
FreeMarket模板引擎快速入门【面试+工作】

FreeMarket模板引擎快速入门【面试+工作】FreeMarket模板引擎快速入门【面试+工作】FreeMarker 快速入门FreeMarker是一个很值得去学习的模版引擎。
它是基于模板文件生成其他文本的通用工具。
本章内容通过如何使用FreeMarker生成Html web 页面和代码自动生成工具来快速了解FreeMarker。
1 简介FreeMarker是一款用java语言编写的模版引擎,它虽然不是web应用框架,但它很合适作为web应用框架的一个组件。
特点:•轻量级模版引擎,不需要Servlet环境就可以很轻松的嵌入到应用程序中•能生成各种文本,如html,xml,java,等•入门简单,它是用java编写的,很多语法和java相似工作原理:2 FreeMarker 程序这里通过模拟简单的代码自动生产工具来感受第一个FreeMarker 程序。
项目目录结构项目创建流程第一步:创建一个maven项目导入 FreeMarker jar 包第二步:创建目录templates,并创建一个 FreeMarker模版文件hello.ftl第三步:创建一个运行FreeMarker模版引擎的FreeMarkerDemo.java 文件第四步:运行main方法后刷新项目pom.xml 文件,maven 项目核心文件,管理 jar 包。
hello.ftl FreeMarker基本语法:${xxx} xxx 相当于占位符,java后台给xxx赋值后,再通过${}输出FreeMarkerDemo.java 核心方法,使用 FreeMarker 模版引擎。
运行程序后刷新项目,会发现多了一个AutoCodeDemo.java类。
不仅仅是java类,xml也是可以。
笔者就是通过FreeMarker做了一个简易的工具类,公司的一个标准管理页面及其增删改查等功能,以及相关的配置文件(十三个文件),一个回车就全部自动生成(偷懒ing)。
Freemarker入门

模版对象一般就是指代 freemarker.template.Template 实例。通常你可以从一 个 Configuration 实例中获取模版实例。你可以通过 getTemplate 这个方法来获得。
Template temp = cfg.getTemplate("test.ftl"); 当你调用如上代码的时候,它将会创建一个与 test.ftl 对应的模版实例,也就是读取 /where/you/store/templates/test.ftl 路径下的文件然后解析(编译)。模版对 象一般存储的是经过解析过的模版内容。 如果 Configuration 实例配置缓存 Template 实例策略的话,那么当你再次要获取 test.ftl 的时候,那么就可以从缓存中获得,而不会重新生成一个新的模版实例。
在应用系统的生命周期中(servlet)你只需要初始化创建一次 Configure 实例(因为它 保存的是全局配置信息)
Configuration cfg = new Configuration(); // 指定一个加载模版的数据源 // 这里我设置模版的根目录 cfg.setDirectoryForTemplateLoading(new File("/where/you/store/templates")); // 指定模版如何查看数据模型.这个话题是高级主题… // 你目前只需要知道这么用就可以了: cfg.setObjectWrapper(new DefaultObjectWrapper());
对于数据模型中的 latestProduct 属性来说,你也可以使用普通 Java Bean 存储,但是 bean 必须要拥有 url 和 name 两个属性(也就是它有 getURL()这些方法),对于 FreeMarker 模版来说两种定义数据库模型(Map,bean 方式)的方式实质上是一样的。
freemarker1一些内建函数和用法

freemarker1⼀些内建函数和⽤法${" green mouse"?cap_first} --> Green mouse //字符串中的第⼀个单词的⾸字母⼤写${"ABCDF"?lower_case} --> abcdf //字符串⼩写形式[${"a"?left_pad(5)}] --> [ a] //距左边如果它仅仅⽤1个参数,将在字符串的开始插⼊空⽩,知道整个串的长度达到参数指定的值. 如果字符串长度达到或者超过指定的长度,就什么都不做.[${"a"?left_pad(8,".oO")}] -->[.oO.oO.a]//第⼆个参数也可以是长度⽐1⼤的字符串,这个字符串会周期性的插⼊.<#if "piceous"?contains("ice")>It contains "ice"<#/if> --> It contains "ice" //contains 包含${"aaaaa"?repalce("aaa","XX")} --> XXaa //在元字符串中,⽤另外⼀个字符串来替换原字符串中出现它的部分不处理词的边界<#assign x= 's/b c'> ${x?url} --> a%2Fb%20c //通常引⽤的属性值,⽤普通引号("")包括,⽽不是单引号(''),因为单引号是不被URL转义的,<#list "someMOOtestMOOtext"?split("MOO" as x)>-${x}</#list> --> -some -test - text //split 分割,(${" green mouse "}?trim) --> (green mouse) //trim 去掉字符串⾸尾的空格<替换为<>替换为>&替换为&"替换为"'替换为'学习是枯燥的.。
freemarker使用流程

freemarker使用流程Freemarker使用流程Freemarker是一款流行的模板引擎,广泛应用于Java Web开发中。
它能够有效地将数据与展示分离,提高开发效率和代码的可维护性。
下面将介绍Freemarker的使用流程,帮助读者更好地理解和运用这一工具。
1. 熟悉Freemarker语法在使用Freemarker之前,首先需要熟悉其语法规则。
Freemarker 使用类似于HTML的标签和表达式来动态生成内容。
了解Freemarker的基本语法结构对于后续的开发至关重要。
2. 配置Freemarker环境在项目中引入Freemarker依赖,并配置Freemarker的相关参数,如模板文件的路径、编码方式等。
确保Freemarker能够正常工作,并与项目的其他组件协调配合。
3. 创建Freemarker模板编写Freemarker模板文件,定义页面的结构和内容。
在模板中可以使用Freemarker的标签和表达式来引用数据、控制流程和展示内容。
合理设计模板结构,提高页面的可读性和可维护性。
4. 准备数据模型准备与模板对应的数据模型,包括需要在页面中展示的数据内容。
数据模型可以是JavaBean、Map等形式,确保数据的准确性和完整性,以便在模板中进行引用和展示。
5. 渲染模板将数据模型与Freemarker模板进行结合,通过Freemarker引擎进行渲染。
在渲染过程中,Freemarker会根据模板中的标签和表达式动态生成最终的页面内容,将数据填充到指定位置。
6. 输出页面内容将渲染后的页面内容输出到浏览器或其他客户端,让用户可以看到最终的页面效果。
确保页面的呈现与预期一致,检查数据的展示是否准确,页面的布局是否符合设计要求。
7. 调试和优化在使用Freemarker的过程中,可能会遇到一些问题和性能瓶颈。
及时调试代码,查找并解决bug,优化页面性能和加载速度。
保持代码的简洁和高效,提升用户体验和开发效率。
新手入门学习SpringFreemarker教程解析

新⼿⼊门学习SpringFreemarker教程解析初步学习freemarker ,先做⼀个简单的HelloWord程序!新建⼀个WEB⼯程,下载(我使⽤的是freemarker-2.3.20)freemarker并导⼊freemarker.jar,在WEB-INF下新建⽂件夹templates⽤于存放模版⽂件在templates下新建test.ftl,这是⽰例模版⽂件。
内容就是HTML内容,⾥⾯带有⼀个标记符,⽤于将来进⾏变量替换,内容如下:<html><head><title>freemarker测试</title></head><body><h1>${message},${name}</h1></body></html>新建⼀个Servlet,⽤于请求设置变量,并处理模版的输出:package com.test.servlet;import java.io.IOException;import java.io.Writer;import java.util.HashMap;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import freemarker.template.Configuration;import freemarker.template.Template;import freemarker.template.TemplateException;@SuppressWarnings("serial")public class HelloFreeMarkerServlet extends HttpServlet {// 负责管理FreeMarker模板的Configuration实例private Configuration cfg = null;public void init() throws ServletException {// 创建⼀个FreeMarker实例cfg = new Configuration();// 指定FreeMarker模板⽂件的位置cfg.setServletContextForTemplateLoading(getServletContext(),"/WEB-INF/templates");}@SuppressWarnings("unchecked")public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 建⽴数据模型Map root = new HashMap();root.put("message", "hello world");root.put("name", "java⼩强");// 获取模板⽂件Template t = cfg.getTemplate("test.ftl");// 使⽤模板⽂件的Charset作为本页⾯的charset// 使⽤text/html MIME-typeresponse.setContentType("text/html; charset=" + t.getEncoding());Writer out = response.getWriter();// 合并数据模型和模板,并将结果输出到out中try {t.process(root, out); // 往模板⾥写数据} catch (TemplateException e) {e.printStackTrace();}}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void destroy() {super.destroy();}}注意要在你的web.xml中配置该Servlet:<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"><servlet><servlet-name>hello</servlet-name><servlet-class>com.test.servlet.HelloFreeMarkerServlet</servlet-class></servlet><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>为了⽅便测试,访问⼯程直接跳转到Servlet,对主页index.jsp做⼀个简单修改:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><html><body><%String mypath = "hello";response.sendRedirect(basePath + mypath);%></body></html>以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
SpringBootFreeMarker使用教程

SpringBootFreeMarker使⽤教程FreeMarker 跟 Thymeleaf ⼀样,是⼀种模板引擎,他可以⽆缝兼容 FreeMarker 在 Spring Boot 开发者中仍然有着很⾼的地位。
本章重点内容1. 编写⼀个最简单的 Freemark 模板⽰例2. 简单说明 FreeMarker1 FreeMarker 简介相对于 Jsp ,FreeMarker 具有太多的优势。
FreeMarker 适合 Mvc 场景。
FreeMarker 最⼤的特点就是具有可编程能⼒,可以对任何后台输出的数据做编程能⼒,这就像在 Java 中加⼊了 PHP 功能,这⾮常有趣。
FreeMarker ⽀持各类语法包括字符输出、条件判断 if/else、循环遍历、1.1 变量${...}1.2 条件语句<#if condition>...<#elseif condition2>...<#elseif condition3>...<#else>...</#if>1.3 循环语句假设 users 包含['Joe', 'Kate', 'Fred'] 序列:<#list users as user><p>${user}</#list>输出:<p>Joe<p>Kate<p>Fred1.4 include 包含语句将版权信息单独存放在页⾯⽂件 copyright_footer.html 中:<hr><i>Copyright (c) 2000 <a href="">Baidu Inc</a>,<br>All Rights Reserved.</i>当需要⽤到这个⽂件时,可以使⽤ include 指令来插⼊:<html><head><title>Test page</title></head><body><h1>Test page</h1><p>Blah blah...<#include "/copyright_footer.html"></body></html>2 Spring Boot 中编写⼀个 FreeMarker ⽰例本⽰例⽂件结构,新增了连个⽤于⽰例⽂件的⽂件 IndexController.java 与 index.ftl+ java/fishpro/freemarker/controller-- IndexController.java+ resources/templates--index.ftl2.1 新建⼀个 Spring Boot 的 Maven 项⽬2.1 新建 Spring Boot 项⽬1. File > New > Project,如下图选择Spring Initializr然后点击【Next】下⼀步2. 填写GroupId(包名)、Artifact(项⽬名)即可。
freemarker的标签语法

freemarker的标签语法一、Freemarker是个啥? 。
咱先来说说Freemarker是个啥玩意儿。
Freemarker呢,就像是一个超级厉害的小助手,专门用来处理模板的。
你可以把它想象成一个魔法盒,你给它一些数据,再给它一个模板,它就能按照这个模板把数据变成超级酷炫的东西,像网页啦、邮件内容啦之类的。
为啥要用Freemarker呢?你想啊,要是你每次做网页或者写邮件都要从头开始写代码,那得多累啊。
有了Freemarker,你就可以把那些经常用到的部分做成模板,然后只要把不同的数据塞进去就好了,就像搭积木一样简单又有趣。
二、基本标签语法来咯 。
(一)插值表达式。
这可是Freemarker的基础操作哦。
插值表达式就像一个小嘴巴,它会把数据“说”出来。
在Freemarker里,插值表达式的格式是`{变量名}`。
比如说,你有一个变量叫`userName`,里面存着用户的名字,那你在模板里写 `{userName}`,Freemarker就会把这个变量的值显示出来。
是不是很神奇呢?就像你告诉它一个小秘密,然后它就会把这个秘密展示给大家看。
(二)指令标签。
1. if指令。
这个 `if` 指令就和我们在编程里常见的 `if` 语句差不多啦。
比如说,你想根据用户的年龄来显示不同的内容。
你可以这样写:<#if age > 18>.欢迎,你已经成年啦!<#else>.小宝贝,你还未成年呢。
</#if>.这里的 `age` 就是我们的变量,根据它的值,Freemarker就会决定显示哪一段内容。
这就像是Freemarker在做选择题一样,根据不同的情况选择不同的答案。
2. list指令。
当你有一组数据,比如说一个用户的购物清单,你就可以用 `list` 指令来遍历它。
像这样:<#list shoppingList as item>.- {item}这里的 `shoppingList` 是一个列表类型的变量,`item` 呢,就是每次遍历出来的一个元素。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
介绍-JSP vsFreeMarker
FreeMarker 的缺点: Eclipse插件不够完善, 不能代码格式化。 Intelij IDEA9下有比较好的插件。 大量的空值判断,黄屏问题(已解决) 集群问题:session数据序列化。新版本 已fix. 不是没有人来实现它)
实例应用讲解-宏的布局应用
我的搜狐-页面布局设计 Springmvc2.5.6+freemarker2.3.18(macro,i nclude,nested,命名空间)的综合应用
介绍-FreeMarker是什么
模板引擎:一种基于模板的、用来生 成输出文本的通用工具 基于Java的开发包和类库
介绍-FreeMarker能做什么
MVC框架中的View层组件 Html页面静态化 代码生成工具 CMS模板引擎 页面栏目动态定制
介绍-为什么要用FreeMarker
开发指南-5分钟入门
模板 + 数据模型 = 输出
开发进阶-数据模型
树状基本结构,树可以复杂而且有很 大的深度。 字符串,数字,日期/时间,布尔值 。 哈希表,Map:${product.proPic.price} 序列器,如Java数组、List。变量通过 数字索引来检索,索引通常从零开始。 ${products[0].name}
开发进阶-list指令
<#list root.subList[0].productList as product> <#if (product_index>=5)> <li><a href="${ctx}/product/${product.sid}.html">${produc t.productName?if_exists} </a></li> <#if (product_index>=11)> <#break> </#if> </#if> </#list>
深入浅出FreeMarker
Peter Wei 2011-8-3
搜狐技术部
总览
分享目标 FreeMarker介绍 开发指南-5分钟入门 开发进阶 实例应用讲解 常用FreeMarker资源
分享目标
知道FreeMarker是什么 知道FreeMarker能做什么 熟悉FreeMarker的常用语法 熟悉FreeMarker的部分高级特性 综合应用FreeMarker能力
开发进阶-标签
Html ${…}:相当于取值 <#...>:FTL标签 <@...>:宏,自定义标签 <#-- Comments 注释--> 新版本可以用[#...],[@...]
开发进阶- if指令
<#if user == “Peter Wei”>…</#if> <#if product.price!=0>…</#if> <#if p[0].price<p[1].price > 产品0价格小 <#else> 产品0价格在 </#if>
开发指南- 5分钟入门
dispatcher-servlet.xml配置
<bean id="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker .FreeMarkerViewResolver"> <property name="cache" value="true" /> <property name="prefix" value="" /> <property name="suffix" value=".ftl" /> <property name="order" value=“1" /> <property name="contentType"> <value>text/html;charset=GBK</value> </property> </bean>
程序逻辑(Java 程序)和页面设计 (FreeMarker 模板)分离 分层清晰,利于分工合作 主流 Web框架良好的集成 (struts2,springmvc) 简单易学、功能强大 免费开源
介绍-JSP vsFreeMarker
FreeMarker 的优点: FreeMarker 不依赖于 Servlet,网络或 Web 环境 FreeMarker 一开始就是为 MVC设计的, 它仅仅专注于展示。 你可以从任意位置加载模板;从类路径 下,从数据库中等。 易于定义特设的宏和函数。
开发进阶-常用内建函数
?html: html字符转义 ?cap_first:字符串的第一个字母变为大写形式 ?lower_case:字符串的小写形式 ?upper_case:字符串的大写形式 ?trim:去掉字符串首尾的空格 ?substring:截字符串 ?lenth:取长度 ?size:序列中元素的个数 ?int:数字的整数部分(比如-1.9?int 就是-1) ?replace:字符串替换 一些示例: ${username?[0,10]} ${appHtml?replace('<@ponent/>', "AK47test")}
开发进阶-其它指令
<#assign images = "/web/images" /> <#noparse>...</#noparse>:不处理包含的内容 <#compress>…</#compress>:空白压缩 escape , noescape指令 如<#escape x as x?html>: 放在文件头,转义 ${appHtml},如&,它就会在输出中被替换成& setting指令 macro ,nested, return指令 …. 详细查看freemarker文档
开发进阶-处理不存在的变量
classic_compatible设为true springmvc中的配置:dispatcher-servlet.xml <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfig urer"> <property name="templateLoaderPath" value="/WEB-INF/pages/" /> <property name="freemarkerSettings"> <props> <prop key="classic_compatible">true</prop> <prop key="defaultEncoding">GBK</prop> </props> </property> </bean> 加上这个设置参数后,后引发一个include的问题。不能引用 include相对路径,解决方法是使用绝对路径。 <#include “../itoolbar.ftl"> <#include "layout/common/itoolbar.ftl">
开发进阶-处理不存在的变量
以前:?exists,?if_exists,?default <#if (root.subList?exists)&&(root.subList?size >1)> ${product.proPrice?if_exists.originalPrice?if_exists} 现在:!””,?? ${user!”默认值”} <#if user??> 另一种可行的方法:配置文件
web.xml配置-集成springmvc2.5.6
开发指南- 5分钟入门
dispatcher-servlet.xml配置
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker .FreeMarkerConfigurer"> <!-- templateLoaderPath和 freemarker ViewResolver中的 prefix只能只定一个,要不然会报找不着ftl的错误 --> <property name="templateLoaderPath" value="/WEBINF/pages/" /> <property name="freemarkerSettings"> <props> <prop key="defaultEncoding">GBK</prop> </props> </property> </bean>
介绍-Velocity vs FreeMarker