技术分享:模版引擎入门

Freemarker、Freemarker与Spring的整合
  1. 常见的模板引擎

国内:Beetl enjoy

国外:freemarker velocity Thymeleaf

  1. 什么是Freemarker?

FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据, 而在模板之外注意于要展示什么数据。

  1. 简单总结

What:是一个模板引擎,可以将模板和数据整合,生成静态页面

Why:提高高并发系统的响应性能,是一种缓存策略

When:对于频繁使用数据查询但是更新内容很少的应用

  1. 面试题:高并发网络架构解决方案分析

https://zhuanlan.zhihu.com/p/27817343

  1. Freemarker常用手册

  2. 官网:http://freemarker.apache.org/

  3. 英文手册:http://freemarker.apache.org/docs/index.html

  4. 中文手册:http://freemarker.foofun.cn/index.html

  5. 基本原理

  6. image

  7. 需求1:使用freemarker在本地硬盘目录下生成html页面

  • 创建一个Configuration对象。构造函数的参数就是对应的版本号

  • 设置模板文件所在的路径

  • 设置模板文件使用的字符集,使用UTF-8字符集

  • 加载模板,创建模板对象

  • 创建数据集,可以是POJO也可以是Map,多使用Map

  • 创建一个Writer对象,多创建FileWriter对象,并制定生成的文件名

  • 调用模板对象的process方法输出文件

  • 关闭流

实际代码

```

@Test
publicvoidtest1()throwsException{
//创建配置对象
Configurationconfiguration=newConfiguration(Configuration.getVersion());
//设置模板文件所在的路径
configuration.setClassForTemplateLoading(this.getClass(),/ftl);
//设置字符集
configuration.setDefaultEncoding(UTF-8);
//创建模板对象
Templatetemplate=configuration.getTemplate(01.ftl);
//创建数据集
MapString,ObjectdataModel=newHashMapString,Object();
dataModel.put(name,丁昊成);
//创建Writer对象
Writerout=newFileWriter(d:/ftl/01.html);
//使用模板对象输出文件
template.process(dataModel,out);
//关闭流
out.close();
}

```

  • 学习站点:http://blog.csdn.net/shuaicihai/article/details/70136956

  • Freemarker与Spring整合

  • 需求2:完成商品详情页系统tt-item-web

  • 创建spring-freemarker.xml

```

beanid=freemarkerConfig
class=org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer
propertyname=templateLoaderPathvalue=/WEB-INF/ftl//
propertyname=defaultEncodingvalue=UTF-8/
/bean

```

  • 创建产生HtmlGenerateAction测试

``` @Controller public class HtmlGenerateAction {

@Autowired
privateFreeMarkerConfigurerfreeMarkerConfigurer;

@RequestMapping(/genhtml)
@ResponseBody
publicStringgenHtml()throwsException{
//1、从spring容器中获得FreeMarkerConfigurer对象。
//2、从FreeMarkerConfigurer对象中获得Configuration对象。
Configurationconfiguration=freeMarkerConfigurer.getConfiguration();
//3、使用Configuration对象获得Template对象。
Templatetemplate=configuration.getTemplate(hello.ftl);
//4、创建数据集
MapString,ObjectdataModel=newHashMapString,Object();
dataModel.put(hello,1000);
//5、创建输出文件的Writer对象。
Writerout=newFileWriter(newFile(D:/ftl/spring-freemarker.html));
//6、调用模板对象的process方法,生成文件。
template.process(dataModel,out);
//7、关闭流。
out.close();
returnOK;
}

} ```

  • 创建消费者监听器

``` /** * 监听商品添加消息,生成对应的静态页面 */ public class HtmlGenListener implements MessageListener {

@Autowired
privateItemServiceitemService;
@Autowired
privateFreeMarkerConfigurerfreeMarkerConfigurer;

@Override
publicvoidonMessage(Messagemessage){
try{
//创建一个模板,参考jsp
//从消息中取商品id
TextMessagetextMessage=(TextMessage)message;
Stringtext=textMessage.getText();
LongitemId=newLong(text);
//等待事务提交
//Thread.sleep(1000);
//根据商品id查询商品信息,商品基本信息和商品描述。
TbItemtbItem=itemService.getItemById(itemId);
Itemitem=newItem(tbItem);
//取商品描述
TbItemDescitemDesc=itemService.getItemDescById(itemId);
//创建一个数据集,把商品数据封装
MapString,Objectdata=newHashMapString,Object();
data.put(item,item);
data.put(itemDesc,itemDesc);
//加载模板对象
Configurationconfiguration=freeMarkerConfigurer.getConfiguration();
Templatetemplate=configuration.getTemplate(item.ftl);
//创建一个输出流,指定输出的目录及文件名。
Writerout=newFileWriter(D:/ftl/+itemId+.html);
//生成静态页面。
template.process(data,out);
//关闭流
out.close();

}catch(Exceptione){
e.printStackTrace();
}

}

} ```

  • 在配置文件中配置消费者(spring-activemq.xml)

```

!--监听商品添加消息,生成静态页面--
beanid=htmlGenListenerclass=com.dhc.ttshop.item.message.HtmlGenListener/
beanclass=org.springframework.jms.listener.DefaultMessageListenerContainer
propertyname=connectionFactoryref=connectionFactory/
propertyname=destinationref=topicDestination/
propertyname=messageListenerref=htmlGenListener/
/bean

```

猜你喜欢

转载自blog.csdn.net/qianfeng_dashuju/article/details/80746869