主题词:Freemarker、Freemarker与Spring的整合
- 常见的模板引擎
国内:Beetl enjoy
国外:freemarker velocity Thymeleaf
- 什么是Freemarker?
- FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
- FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template Language(FTL),属于简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算,之后模板显示已经准备好的数据。在模板中,主要用于如何展现数据,而在模板之外注意于要展示什么数据。
- 简单总结
What:是一个模板引擎,可以将模板和数据整合,生成静态页面
Why:提高高并发系统的响应性能,是一种缓存策略
When:对于频繁使用数据查询但是更新内容很少的应用
- 面试题:高并发网络架构解决方案分析
https://zhuanlan.zhihu.com/p/27817343
- 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"); //创建数据集 MapdataModel = 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
- 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、创建数据集 MapdataModel = 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); //创建一个数据集,把商品数据封装 Mapdata = 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)
閱讀更多 跟老司機學Java 的文章