Freemarker页面静态化技术

Posted yb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Freemarker页面静态化技术相关的知识,希望对你有一定的参考价值。

初步理解:

架构优化:

静态页面的访问速度优于从缓存获取数据的动态页面的访问速度;

Freemarker:

导包

模板:hello.ftl

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>freemarker入门案例</title>
 6 </head>
 7 <body>
 8 <h1>获取字符类型数据:${hello}</h1>
 9 </body>
10 </html>
View Code

生成静态页面:

 1     @Test
 2     public void test01() throws Exception{
 3         //创建freemarker核心配置对象
 4         Configuration cf = new Configuration(Configuration.getVersion());
 5         //指定模版文件存储路径
 6         cf.setDirectoryForTemplateLoading(new File("E:\\\\folder\\\\template"));
 7         //指定模版文件编码
 8         cf.setDefaultEncoding("UTF-8");
 9         //读取模版文件,获取模版对象
10         Template template = cf.getTemplate("hello.ftl");
11         //准备数据
12         Map<String, Object> maps = new HashMap<String, Object>();
13         maps.put("hello", "freemarker很简单,非常简单!");
14 //        maps.put("hello", "sdfs");
15 //        maps.put("hello", 0.23);
16         //创建一个输出流对象,把生成html页面写入磁盘
17         Writer out = new FileWriter(new File("E:\\\\folder\\\\template\\\\out\\\\first.html"));
18         //生成HTML页面
19         template.process(maps, out);
20         //关闭
21         out.close();
22     }
View Code

spring整合freemarker:

1 <!-- freeemarker交给spring管理 -->
2     <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
3         <property name="templateLoaderPath" value="/WEB-INF/fm/"></property><!--模板路径 -->
4         <property name="defaultEncoding" value="UTF-8"></property>
5     </bean>

 

 1 @RequestMapping("/fm/{name}")
 2     public String showFm(Model model,@PathVariable String name) throws Exception{
 3         //从核心配置对象中获取freemarker配置对象
 4         Configuration cf = freeMarkerConfigurer.getConfiguration();
 5         //直接读取服务器模版文档
 6         Template template = cf.getTemplate("hello.ftl");
 7         model.addAttribute("hello", name);
 8         //创建输出流对象
 9         Writer out = new FileWriter(new File("e:\\\\folder\\\\template\\\\out\\\\springWithfm.html"));
10         //生成html
11         template.process(model, out);
12         return "success";
13     }

mq监听器监听到消息的产生,就会将消息队列中的商品id消费掉,根据获取的id查询商品信息,将该信息写入模板生成静态页面:
1
/** 2 * 需求:接受消息,同步生成静态页面 3 * @author Administrator 4 * 同步静态页面流程: 5 * 1,后台管理系统添加,修改,删除时候,发送消息 6 * 2,静态系统接受消息,根据消息内容(商品id)查询数据库,同步静态页面 7 */ 8 public class FmListener implements MessageListener{ 9 //注入商品服务对象 10 @Autowired 11 private ItemService itemService; 12 //注入freemarker核心对象 13 @Autowired 14 private FreeMarkerConfigurer freeMarkerConfigurer; 15 //注入静态服务器地址 16 @Value("${STATIC_SERVER_URL}") 17 private String STATIC_SERVER_URL; 18 @Override 19 public void onMessage(Message message) { 20 try { 21 //接受消息 22 Long itemId = null; 23 if(message instanceof TextMessage){ 24 TextMessage m = (TextMessage) message; 25 itemId = Long.parseLong(m.getText()); 26 } 27 //获取freemarker配置对象 28 Configuration cf = freeMarkerConfigurer.getConfiguration(); 29 //获取模版对象 30 Template template = cf.getTemplate("item.ftl"); 31 //创建map对象 32 Map<String, Object> maps = new HashMap<String, Object>(); 33 //休眠1s 34 Thread.sleep(1000); 35 //模版页面需求数据 36 TbItem item = itemService.findItemByID(itemId); 37 //把数据放入map 38 maps.put("item", item); 39 //创建输出流对象: ftp 工具 远程上传linux服务器 40 Writer out = new FileWriter(new File(STATIC_SERVER_URL+itemId+".html")); 41 template.process(maps, out); 42 out.close(); 43 } catch (Exception e) { 44 e.printStackTrace(); 45 } 46 } 47 }

使用nginx服务器访问静态页面

配置nginx/conf/nginx.conf:

访问:

 

以上是关于Freemarker页面静态化技术的主要内容,如果未能解决你的问题,请参考以下文章

静态化技术Freemarker

大数据学习总结记录—页面静态化技术(Freemarker/velocity)& 网站伪静态(UrlRewriteFilter)

FreeMarker实现网页静态化

SpringBoot2 整合FreeMarker模板,完成页面静态化处理

网页静态化FreeMarker的使用

页面静态化