freeMarker
- freeMarker的整体架构
- 什么时候使用静态页面:当访问量比较大,不经常改动页面的时候可以使用
- 生成的页面放在哪:放在tomcat容器中,也可以放在nginx中
- freeMarker的jar包
- freeMarker模板文件的后缀可以随意,但是一般建议后缀为ftl
- 指令
- assign
- 定义简单类型
- 定义对象类型
- <#assign info={"mobile":"13812345678",'address':'北京市昌平区'} >
电话:${info.mobile} 地址:${info.address} - include指令
- 创建模板文件head.ftl
- 修改入门案例中的test.ftl,在test.ftl模板文件中使用include指令引入上面的模板文件
- if指令
- 在模板文件中使用if指令进行判断
- 在java代码中为success变量赋值
- list指令
- 在模板文件中使用list指令进行遍历
- 在java代码中为goodList赋值
- java代码
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
<#assign linkman="周先生">
联系人:${linkman}
<h1>黑马程序员</h1>
<#include "head.ftl"/>
<#if success=true>
你已通过实名认证
<#else>
你未通过实名认证
</#if>
map.put("success", true);
<#list goodList as goods >
商品名称: ${goods.name} 价格:${goods.price}<br>
</#list>
List goodsList=new ArrayList();
Map goods1=new HashMap();
goods1.put("name", "苹果");
goods1.put("price", 5.8);
Map goods2=new HashMap();
goods2.put("name", "香蕉");
goods2.put("price", 2.5);
Map goods3=new HashMap();
goods3.put("name", "橘子");
goods3.put("price", 3.2);
goodsList.add(goods1);
goodsList.add(goods2);
goodsList.add(goods3);
map.put("goodsList", goodsList);
@Autowired
FreeMarkerConfigurer freeMarkerConfigurer;
//@Value("${out_put_path}")
String outPath="D:/workspace/health/health_parent/health_mobile/src/main/webapp/pages";
//准备数据
public void generateSetDetailHtml(List<Setmeal> list){
for (Setmeal setmeal : list) {
Map map = new HashMap();
map.put("setmeal",setMealDao.findById(setmeal.getId()));
generateHTML("mobile_setmeal_detail.ftl","setmeal_detail_"+setmeal.getId()+".html",map);
}
}
//生成页面
public void generateHTML(String templageHtml,String generHtml,Map map){
Configuration configuration =
freeMarkerConfigurer.getConfiguration();
Writer writer ;
try {
Template template = configuration.getTemplate(templageHtml);
writer = new FileWriter(new File(outPath+"/"+generHtml));
template.process(map,writer);
writer.close();
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
}
}
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer" id="freeMarkerConfigurer">
<property name="defaultEncoding" value="utf-8"/>
<property name="templateLoaderPath" value="/WEB-INF/ftl/"/>
</bean>
<!--
<context:property-placeholder location="classpath:freemarker.properties"/>
-->