FreeMarker基本使用
FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写
l FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序
l 虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据(如下图)
模板 + 数据模型 = 输出
l FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件
l FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境
l FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库
l FreeMarker是免费的
package freemaker; import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map; import freemarker.template.Configuration;
import freemarker.template.Template; public class FreeMarkerDemo { public static void main(String[] args) {
// 配置对象 .html
Configuration conf = new Configuration();
// 模板路径
String dir = "D:\\workspace2\\freemaker\\ftl\\";
try {
// 导入模板目录
conf.setDirectoryForTemplateLoading(new File(dir));
// 获取模板
Template template = conf.getTemplate("freemaker.html");
// 数据
Map root = new HashMap();
root.put("world", "世界");
// 输出流
Writer out = new FileWriter(new File(dir + "hello.html"));
// 生成开始
template.process(root, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
} System.out.println("生成完毕"); }
}
Person p = new Person();
p.setId(9527);
p.setName("华安");
root.put("per", p); 编号:${per.id}<br/>
姓名:${per.name}<br/>
List<Person> list = new ArrayList<Person>();
for(int i =0;i<10;i++){
Person p = new Person();
p.setId(9527+i);
p.setName("华安"+i);
list.add(p);
}
root.put("list", list);
<#list list as p>
${p.id} -- ${p.name}
</#list>
Map map = new HashMap();
map.put("id", "1001");
map.put("name", "秋香");
root.put("map", map); <#list map?keys as key>
${map[key]}
</#list>
Map map = new HashMap();
map.put("id", "1001");
map.put("name", "秋香");
Map map2 = new HashMap();
map2.put("id", "1002");
map2.put("name", "石榴姐"); List<Map> maplist = new ArrayList<Map>();
maplist.add(map);
maplist.add(map2);
root.put("maplist", maplist); <#list maplist as map>
<#list map?keys as key>
${map[key]}
</#list>
</#list>
<#list ["星期一","星期二","星期三"] as n>
<#if n!="星期一">
${n}
<#else>
您好今天是星期一
</#if>
</#list>
root.put("dt", new Date());
年月时间:${dt?datetime}<br/>
时间:${dt?time}
接口;StaticPageService
public void staitcPage();
实现类: /**
* 生成静态页实现类
*/
public class StaticPageServiceImpl implements StaticPageService,ServletContextAware{ private Configuration conf; public void setFreeMarkerConfigurer(FreeMarkerConfigurer freeMarkerConfigurer) {
this.conf = freeMarkerConfigurer.getConfiguration();
} //静态化方法
public void productIndex(Map<String,Object> root,Integer id){
//String dir = "C:\Users\lx\workspace\babasport12\";
//设置模板的目录
//conf.setDirectoryForTemplateLoading(dir); //输出流 从内存写出去 磁盘上
Writer out = null;
try {
//读进来 UTF-8 内存中
Template template = conf.getTemplate("productDetail.html");
//获取Html的路径
String path = getPath("/html/product/" + id + ".html");//278.html File f = new File(path);
File parentFile = f.getParentFile();
if(!parentFile.exists()){
parentFile.mkdirs();
}
//输出流
out = new OutputStreamWriter(new FileOutputStream(f), "UTF-8");
//处理模板
template.process(root, out);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(out != null){
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//获取路径
public String getPath(String name){
return servletContext.getRealPath(name);
} private ServletContext servletContext; @Override
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
}
<!-- 配置Freemarker -->
<bean id="staticPageService" class="cn.itcast.core.service.staticpage.StaticPageServiceImpl">
<property name="freeMarkerConfigurer">
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/ftl/"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
</property>
</bean>
FreeMarker基本使用的更多相关文章
- spring源码分析之freemarker整合
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是一个Java类库,是一款程 ...
- Maven 整合FreeMarker使用
pom.xml <!-- freemarker jar --> <dependency> <groupId>org.freemarker</groupId&g ...
- JAVA FreeMarker工具类
FreeMarkerUtil.java package pers.kangxu.datautils.utils; import java.io.File; import java.io.StringW ...
- FreeMarker:怎么使用
第一个FreeMarker程序 1. 建立一个普通的java项目:testFreeMarker 2. 引入freemarker.jar包 3. 在项目目录下建立模板目录:templates 4. 在t ...
- FreeMarker的基础语法
FreeMarker语言 FreeMarker语言概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写. FreeMarker被设计用来生成HTML Web ...
- freemarker页面中文乱码
一.前言 简单的记录freemarker遇到的错误问题:ftl页面中文乱码 由于freemarker整合在ssm框架中,所以笔者直接贴配置代码 <beans xmlns="http:/ ...
- Spring 4 使用Freemarker模板发送邮件&添加附件
前言 Spring对Java的邮件发送提供了很好的支持,提供了超级简单的API,大大简化了Java邮件发送功能的开发. Spring对Email的支持是基于JavaMail API开发的,所以,我们在 ...
- Freemarker 程序开发
Freemarker 程序开发 现在web开发中,多使用freemarker 来描述页面.通常会使用的macro来定义各种组件,从而达到UI组件的复用.结合使用其它的指定,可快速的描述一个html页面 ...
- 第一个spring、springmvc、mybatis、freemarker项目小知识(一)
1.持久层开发(Mybatis) 1.1 添加,非空字段必须给值,不是非空加判断,有值添加无值不添 1.2 删除,注意外键关系的级联删除.(事务传播行为) 1.3 更新,每个字段单独 ...
- myeclipse环境下开发freemarker
最近在着手一个项目,其中就要使用到freemarker模版,当把html漂亮写完时,改写成freemarker时,问题来了.全屏都是白底黑色,没有高亮显示,没有语法提示,不能格式化.看着眼花,还容易出 ...
随机推荐
- jQery总结01
1 jQuery 的基本语法结构是什么? 2 $(document).ready() 与 window.onload 有什么区别? 3 如何实现 DOM 对象和 jQuery对象间的转化?
- 弹出框中选项卡的运用(easyUI)
先看一下页面效果: 此处有两个知识点:一个是弹出框的运用,一个是选项卡的运用 分析一下该HTML代码,最外面一个div是弹出框的,默认是关闭状态,可通过ID来控制弹出框的开关,该div的样式是easy ...
- Get-Acl 查看文件权限
https://blogs.msmvps.com/erikr/2007/09/26/set-permissions-on-a-specific-service-windows/ Get-Acl .\L ...
- SQL 导出表数据存储过程
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- ...
- C - Football
Problem description Petya loves football very much. One day, as he was watching a football match, he ...
- centos 修改ssh端口,以支持vsftp
vi /etc/ssh/sshd_config Port 22 Port 2225执行/etc/init.d/sshd restart 启动SSH服务,这样SSH端口将同时工作与22和2225上. ...
- 6月7号shiro
Retains all Cache objects maintained by this cache manager :保留此缓存管理器维护的所有缓存对象 Destroyable可毁灭的 retain ...
- shiro登陆权限验证
一>引入shirojar包 <!-- shiro登陆权限控制 --> <dependency> <groupId>org. ...
- ★Java语法(一)——————————标识符
1.定义:用来标识类名.变量名.方法名.数组名.文件名的有效字符序列: 2.命名规则:a 由字母.数字._(下划线)和$(美元符号)组成 b 数字不能作为第一个字符 c 不能是Java中的关键字和保留 ...
- 两款工作流JBPM和CCBPM的对比
以国外流行的工作流jbpm4的模式与当今中国开源的ccbpm(ccflow和jflow的总称)流程引擎对照.以便让各位能够了解到中国国情的工作流引擎与国际流行的设计规则的差别.不同.与优缺点. 国外工 ...