Freemarker使用--备忘录
来源:互联网 发布:windows 程序设计 编辑:程序博客网 时间:2024/05/29 15:48
1 Freemarker
1.1 什么是freemarker
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。
1.2 Freemarker的使用方法
第一步:把freemarker的jar包添加到工程中
第二步:freemarker的运行不依赖web容器,可以在java工程中运行。创建一个测试方法进行测试。
第三步:创建一个Configration对象
第四步:告诉config对象模板文件存放的路径。
第五步:设置config的默认字符集。一般是utf-8
第六步:从config对象中获得模板对象。需要制定一个模板文件的名字。
第七步:创建模板需要的数据集。可以是一个map对象也可以是一个pojo,把模板需要的数据都放入数据集。
第八步:创建一个Writer对象,指定生成的文件保存的路径及文件名。
第九步:调用模板对象的process方法生成静态文件。需要两个参数数据集和writer对象。
第十步:关闭writer对象。
1.3 代码实现
public class FreeMarkerTest {
@Test
public void testFreeMarker() throws Exception {
// 第一步:把freemarker的jar包添加到工程中
// 第二步:freemarker的运行不依赖web容器,可以在java工程中运行。创建一个测试方法进行测试。
// 第三步:创建一个Configuration对象
Configuration configuration =new Configuration(Configuration.getVersion());
// 第四步:告诉config对象模板文件存放的路径。
configuration.setDirectoryForTemplateLoading(new File("D:\\workspaces-itcast\\JaveEE18\\taotao-portal\\src\\main\\webapp\\WEB-INF\\ftl"));
// 第五步:设置config的默认字符集。一般是utf-8
configuration.setDefaultEncoding("utf-8");
// 第六步:从config对象中获得模板对象。需要制定一个模板文件的名字。
Template template =configuration.getTemplate("first.ftl");
// 第七步:创建模板需要的数据集。可以是一个map对象也可以是一个pojo,把模板需要的数据都放入数据集。
Map root = new HashMap<>();
root.put("hello","hello freemarker");
// 第八步:创建一个Writer对象,指定生成的文件保存的路径及文件名。
Writer out = new FileWriter(new File("D:\\temp\\html\\hello.html"));
// 第九步:调用模板对象的process方法生成静态文件。需要两个参数数据集和writer对象。
template.process(root,out);
// 第十步:关闭writer对象。
out.flush();
out.close();
}
}
模板:
${hello}
1.4 Freemarker模板的写法
1.4.1 取简单数据类型数据
使用EL表达式。
${hello}
1.4.2 包装数据类型
模板:
<html>
<head>
<title>${title}</title>
</head>
<body>
<label>学号:</label>${student.id}<br>
<label>姓名:</label>${student.name}<br>
<label>住址:</label>${student.address}<br>
</body>
</html>
1.4.3 历遍集合/数组
List<Person> persons = newArrayList<Person>();
省略….
页面中内容
<#list persons as p>
${p.id}/${p.name}
</#list>
1.4.4 获得当前迭代的索引
List<Person> list = newArrayList<Person>();
获取当前选代的索引:<br/>
<#list persons as p>
${p_index}
</#list>
1.4.5 模板中判断条件
<#if 判断条件>
<#else>
</#if>
逻辑运算符(== != || &&)
1.4.6 日期类型格式化
默认格式
1:date
${cur_time?date}
2:datetime
${cur_time?datetime}
3:time
${cur_time?time}
自定义格式
${cur_time?string("yyyy-MM-ddHH:mm:ss")}
1.4.7 处理null值
root.put(“val”,null);
解决办法
1:null 变空串
${val!} ${val!"这里是空"}
2:为Null时给默认值
${val!“我是默认值"}
3、<#if curdate ??>
当前日期:${curdate?string("yyyy/MM/ddHH:mm:ss")}
<#else>
curdate属性为null
</#if>
1.4.8 Include
将另一个页面引入本页面时可用以下命令完成
<#include"/include/head.html">
1.5 项目中使用freemarker
使用freemarker整合spring。把Configuration交给spring容器管理。
依赖的jar包:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
1.5.1 Spring配置文件
<beanid="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<propertyname="templateLoaderPath"value="/WEB-INF/ftl/"/>
<propertyname="defaultEncoding"value="UTF-8"/>
</bean>
1.5.2 静态文件生成的时机
1、当用户第一次访问时生成静态文件。不推荐使用。
2、当后台添加、编辑商品时生成静态网页。
此时,需要taotao-portal发布服务,供后台系统调用,当后台添加或者修改商品时调用此服务。此时taotao-portal的功能就是生成静态页面。
1.5.3 发布生成页面的服务
1、获得数据的方式还是通过调用rest发布的服务获得数据。
2、生成静态页面。
3、响应生成成功。
1.5.4 Service
获得参数:商品id,根据商品id调用rest发布的服务,获得商品数据(商品基本信息、商品描述、商品规格参数),生成静态页面。返回成功。
参数:商品id
返回值:TaotaoResult
@Service
public class StaticPageServiceImpl implements StaticPageService {
@Autowired
private ItemServiceitemService;
@Autowired
private FreeMarkerConfigurerfreeMarkerConfigurer;
@Value("${STATIC_PAGE_PATH}")
private StringSTATIC_PAGE_PATH;
@Override
public TaotaoResult genItemHtml(LongitemId) throws Exception {
//商品基本信息
TbItem tbItem = itemService.getItemById(itemId);
//商品描述
String itemDesc = itemService.getItemDescById(itemId);
//规格参数
String itemParam = itemService.getItemParamById(itemId);
//生成静态页面
Configuration configuration =freeMarkerConfigurer.getConfiguration();
Template template = configuration.getTemplate("item.ftl");
//创建一个数据集
Map root = new HashMap<>();
//向数据集中添加属性
root.put("item",tbItem);
root.put("itemDesc",itemDesc);
root.put("itemParam",itemParam);
//创建一个Writer对象
Writer out = new FileWriter(new File(STATIC_PAGE_PATH +itemId + ".html"));
//生成静态文件
template.process(root,out);
out.flush();
out.close();
return TaotaoResult.ok();
}
}
1.5.5 Freemarker模板
1.5.6 Controller
接收商品id,调用Service生成静态页面。返回json数据。
参数:商品id
返回值:TaotaoResult
@Controller
public class StaticPageController {
@Autowired
private StaticPageServicestaticPageService;
@RequestMapping("/gen/item/{itemId}")
@ResponseBody
public TaotaoResult genItemPage(@PathVariable LongitemId) {
try {
TaotaoResult result =staticPageService.genItemHtml(itemId);
returnresult;
} catch (Exceptione) {
e.printStackTrace();
return TaotaoResult.build(500, ExceptionUtil.getStackTrace(e));
}
}
}
- Freemarker使用--备忘录
- Freemarker使用
- Freemarker 使用
- Freemarker 使用
- FreeMarker使用
- 使用freemarker
- freemarker使用
- Freemarker 使用
- Freemarker 使用
- Freemarker 使用
- Freemarker 使用
- Freemarker 使用
- freemarker使用
- freemarker 使用
- FreeMarker使用
- Freemarker 使用
- Freemarker 使用
- Freemarker 使用
- 数组类—DynamicArray
- [JAVA] 一条新闻引出的思考,关于不用中间变量交换两个变量的值
- [ Pollard_rho ] BZOJ4522
- POJ
- Trust region policy optimization笔记
- Freemarker使用--备忘录
- 五家共井问题
- macoxs 安装lua
- FFT 板子
- 演示如何标记删除文本和插入文本
- Spring中使用Validator进行数据验证
- 【luoguP2380】狗哥采矿
- <item> tag requires a 'color' attribute or child tag defining a drawable
- 建立最近 X 天的数据库