Freemarker页面静态化技术,activemq监听页面变动
初步理解:

架构优化:







静态页面的访问速度优于从缓存获取数据的动态页面的访问速度;
Freemarker:
导包
模板:hello.ftl
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>freemarker入门案例</title>
</head>
<body>
<h1>获取字符类型数据:${hello}</h1>
</body>
</html>
生成静态页面:
@Test
public void test01() throws Exception{
//创建freemarker核心配置对象
Configuration cf = new Configuration(Configuration.getVersion());
//指定模版文件存储路径
cf.setDirectoryForTemplateLoading(new File("E:\\folder\\template"));
//指定模版文件编码
cf.setDefaultEncoding("UTF-8");
//读取模版文件,获取模版对象
Template template = cf.getTemplate("hello.ftl");
//准备数据
Map<String, Object> maps = new HashMap<String, Object>();
maps.put("hello", "freemarker很简单,非常简单!");
// maps.put("hello", "sdfs");
// maps.put("hello", 0.23);
//创建一个输出流对象,把生成html页面写入磁盘
Writer out = new FileWriter(new File("E:\\folder\\template\\out\\first.html"));
//生成HTML页面
template.process(maps, out);
//关闭
out.close();
}
spring整合freemarker:
<!-- freeemarker交给spring管理 -->
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/fm/"></property><!--模板路径 -->
<property name="defaultEncoding" value="UTF-8"></property>
</bean>

@RequestMapping("/fm/{name}")
public String showFm(Model model,@PathVariable String name) throws Exception{
//从核心配置对象中获取freemarker配置对象
Configuration cf = freeMarkerConfigurer.getConfiguration();
//直接读取服务器模版文档
Template template = cf.getTemplate("hello.ftl");
model.addAttribute("hello", name);
//创建输出流对象
Writer out = new FileWriter(new File("e:\\folder\\template\\out\\springWithfm.html"));
//生成html
template.process(model, out);
return "success";
}
mq监听器监听到消息的产生,就会将消息队列中的商品id消费掉,根据获取的id查询商品信息,将该信息写入模板生成静态页面:
1 /**
* 需求:接受消息,同步生成静态页面
* @author Administrator
* 同步静态页面流程:
* 1,后台管理系统添加,修改,删除时候,发送消息
* 2,静态系统接受消息,根据消息内容(商品id)查询数据库,同步静态页面
*/
public class FmListener implements MessageListener{
//注入商品服务对象
@Autowired
private ItemService itemService;
//注入freemarker核心对象
@Autowired
private FreeMarkerConfigurer freeMarkerConfigurer;
//注入静态服务器地址
@Value("${STATIC_SERVER_URL}")
private String STATIC_SERVER_URL;
@Override
public void onMessage(Message message) {
try {
//接受消息
Long itemId = null;
if(message instanceof TextMessage){
TextMessage m = (TextMessage) message;
itemId = Long.parseLong(m.getText());
}
//获取freemarker配置对象
Configuration cf = freeMarkerConfigurer.getConfiguration();
//获取模版对象
Template template = cf.getTemplate("item.ftl");
//创建map对象
Map<String, Object> maps = new HashMap<String, Object>();
//休眠1s
Thread.sleep(1000);
//模版页面需求数据
TbItem item = itemService.findItemByID(itemId);
//把数据放入map
maps.put("item", item);
//创建输出流对象: ftp 工具 远程上传linux服务器
Writer out = new FileWriter(new File(STATIC_SERVER_URL+itemId+".html"));
template.process(maps, out);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用nginx服务器访问静态页面
配置nginx/conf/nginx.conf:

访问:
Freemarker页面静态化技术,activemq监听页面变动的更多相关文章
- php页面静态化技术;学习笔记
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 页面静态化技术Freemarker技术的介绍及使用实例.
一.FreeMarker简介 1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效 ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_23-页面预览-页面预览开发
1.用户进入cms前端,点击“页面预览”在浏览器请求cms页面预览链接. 2.cms根据页面id查询DataUrl并远程请求DataUrl获取数据模型. 3.cms根据页面id查询页面模板内容 4.c ...
- java秒杀系列(2)- 页面静态化技术
前言 通过代码片段分别介绍服务端渲染.客户端渲染.对象缓存三种方式的写法. 代码片段仅供参考,具体实现需要根据业务场景自行适配,但思想都是一样. 一.服务端渲染方式 1.接口返回html页面的设置 @ ...
- Freemarker 页面静态化技术使用入门案例
在访问 新闻.活动.商品 详情页面时, 路径可以是 xx[id].html, 服务器端根据请求 id, 动态生成 html 网页,下次访问数据时,无需再查询数据,直接将 html 静态页面返回.这样一 ...
- 高性能Java Web 页面静态化技术(原创)
package com.yancms.util; import java.io.*; import org.apache.commons.httpclient.*; import org.apache ...
- 高性能Java Web 页面静态化技术
package com.yancms.util; import java.io.*; import org.apache.commons.httpclient.*; import org.apache ...
- Thymeleaf页面静态化技术
Teymeleaf的使用 案例一:springboot搭建Thymeleaf 1.导入依赖 2.新建html页面模板 3.新建前端控制层Controller 4.新建启动类 1.导入依赖 <?x ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_24-页面预览-页面预览测试
通过nginx转发到预览的地址 重启nginx 添加页面预览按钮 调整下列表的列的宽度
随机推荐
- python学习总结笔记(一)
1.raw_input("请输入:")提示录入信息,读取录入的字符串返回你录入的字符串2.os.environ 获取所有系统的环境变量,返回一个字典.3.str与repr区别str ...
- 图文详解AO打印(端桥模式)
一.概述 AO打印是英文Active-Online Print的简称,也称主动在线打印.打印前支持AO通讯协议的AO打印机首先通过普通网络与C-Lodop服务保持在线链接,网页程序利用JavaSc ...
- Ambari概览
文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/7886195.html 转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点, ...
- 第二个MapReduce
大家在学习Hadoop的MapReduce的时候,90%的第一个程序都是WordCount,所以在这里分享一下我的第二个MapReduce程序.对于学习编程语言的人来说,有时候代码是最好的沟通方式之一 ...
- async await Task
一.使用Task 引用命名空间 using System.Threading.Tasks; 1.工厂方式 Task.Factory.StartNew(() => {Console.WriteLi ...
- Python简单爬虫
爬虫简介 自动抓取互联网信息的程序 从一个词条的URL访问到所有相关词条的URL,并提取出有价值的数据 价值:互联网的数据为我所用 简单爬虫架构 实现爬虫,需要从以下几个方面考虑 爬虫调度端:启动爬虫 ...
- php代码在服务器中查看接值
error_log("You messed up!", 3, "/var/tmp/my-errors.log");
- SEO中TDK写法的意思以及注意事项
在SEO中,所谓的TDK其实就是title.description.keywords这三个标签,这三个标签在网站的优化过程中,至关重要所以今天童童来和大家分享下,如何去写好TDK标签! 1.title ...
- 项目实战8—tomcat企业级Web应用服务器配置与会话保持
tomcat企业级Web应用服务器配置与实战 环境背景:公司业务经过长期发展,有了很大突破,已经实现盈利,现公司要求加强技术架构应用功能和安全性以及开始向企业应用.移动APP等领域延伸,此时原来开发w ...
- java 之 组合模式(大话设计模式)
代码是一门艺术,每次看完大话设计模式后都会有新的认识,有时会感叹原来还可以这样玩,相信大家都用过递归,递归的使用一般遍历文件夹等会常用到, 今天讲的设计模式类似于递归,也比较神奇,先看下类图,稍后再帮 ...