模版引擎入门

主题词:Freemarker、Freemarker与Spring的整合

  1. 常见的模板引擎

国内:Beetl enjoy

国外:freemarker velocity Thymeleaf

  1. 什么是Freemarker?
  2. FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
  3. FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算,之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据,而在模板之外注意于要展示什么数据。
  4. 简单总结

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

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

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

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

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

  1. Freemarker常用手册
  • 官网:http://freemarker.apache.org/
  • 英文手册:http://freemarker.apache.org/docs/index.html
  • 中文手册:http://freemarker.foofun.cn/index.html
  • 基本原理
模版引擎入门


  • 需求1:使用freemarker在本地硬盘目录下生成html页面
  • 创建一个Configuration对象。构造函数的参数就是对应的版本号
  • 设置模板文件所在的路径
  • 设置模板文件使用的字符集,使用UTF-8字符集
  • 加载模板,创建模板对象
  • 创建数据集,可以是POJO也可以是Map,多使用Map
  • 创建一个Writer对象,多创建FileWriter对象,并制定生成的文件名
  • 调用模板对象的process方法输出文件
  • 关闭流
  • 实际代码
​ @Test public void test1() throws Exception{ //创建配置对象 Configuration configuration = new Configuration(Configuration.getVersion()); //设置模板文件所在的路径 configuration.setClassForTemplateLoading(this.getClass(),"/ftl"); //设置字符集 configuration.setDefaultEncoding("UTF-8"); //创建模板对象 Template template = configuration.getTemplate("01.ftl"); //创建数据集 Map dataModel = new HashMap(); dataModel.put("name", "丁昊成"); //创建Writer对象 Writer out = new FileWriter("d:/ftl/01.html"); //使用模板对象输出文件 template.process(dataModel, out); //关闭流 out.close(); } 
  • 学习站点:http://blog.csdn.net/shuaicihai/article/details/70136956
  1. Freemarker与Spring整合
  • 需求2:完成商品详情页系统tt-item-web
  • 创建spring-freemarker.xml
    
  • 创建产生HtmlGenerateAction测试
@Controllerpublic class HtmlGenerateAction {  @Autowired private FreeMarkerConfigurer freeMarkerConfigurer;​ @RequestMapping("/genhtml") @ResponseBody public String genHtml()throws Exception { // 1、从spring容器中获得FreeMarkerConfigurer对象。 // 2、从FreeMarkerConfigurer对象中获得Configuration对象。 Configuration configuration = freeMarkerConfigurer.getConfiguration(); // 3、使用Configuration对象获得Template对象。 Template template = configuration.getTemplate("hello.ftl"); // 4、创建数据集 Map dataModel = new HashMap(); dataModel.put("hello", "1000"); // 5、创建输出文件的Writer对象。 Writer out = new FileWriter(new File("D:/ftl/spring-freemarker.html")); // 6、调用模板对象的process方法,生成文件。 template.process(dataModel, out); // 7、关闭流。 out.close(); return "OK"; }}
  • 创建消费者监听器
/** * 监听商品添加消息,生成对应的静态页面 */public class HtmlGenListener implements MessageListener {  @Autowired private ItemService itemService; @Autowired private FreeMarkerConfigurer freeMarkerConfigurer;  @Override public void onMessage(Message message) { try { //创建一个模板,参考jsp //从消息中取商品id TextMessage textMessage = (TextMessage) message; String text = textMessage.getText(); Long itemId = new Long(text); //等待事务提交 //Thread.sleep(1000); //根据商品id查询商品信息,商品基本信息和商品描述。 TbItem tbItem = itemService.getItemById(itemId); Item item = new Item(tbItem); //取商品描述 TbItemDesc itemDesc = itemService.getItemDescById(itemId); //创建一个数据集,把商品数据封装 Map 
data = new HashMap(); data.put("item", item); data.put("itemDesc", itemDesc); //加载模板对象 Configuration configuration = freeMarkerConfigurer.getConfiguration(); Template template = configuration.getTemplate("item.ftl"); //创建一个输出流,指定输出的目录及文件名。 Writer out = new FileWriter("D:/ftl/" + itemId + ".html"); //生成静态页面。 template.process(data, out); //关闭流 out.close(); } catch (Exception e) { e.printStackTrace(); }​ }​}
  • 在配置文件中配置消费者(spring-activemq.xml)
       


分享到:


相關文章: