初步理解:

架构优化:

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

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监听页面变动的更多相关文章

  1. php页面静态化技术;学习笔记

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 页面静态化技术Freemarker技术的介绍及使用实例.

    一.FreeMarker简介 1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效 ...

  3. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_23-页面预览-页面预览开发

    1.用户进入cms前端,点击“页面预览”在浏览器请求cms页面预览链接. 2.cms根据页面id查询DataUrl并远程请求DataUrl获取数据模型. 3.cms根据页面id查询页面模板内容 4.c ...

  4. java秒杀系列(2)- 页面静态化技术

    前言 通过代码片段分别介绍服务端渲染.客户端渲染.对象缓存三种方式的写法. 代码片段仅供参考,具体实现需要根据业务场景自行适配,但思想都是一样. 一.服务端渲染方式 1.接口返回html页面的设置 @ ...

  5. Freemarker 页面静态化技术使用入门案例

    在访问 新闻.活动.商品 详情页面时, 路径可以是 xx[id].html, 服务器端根据请求 id, 动态生成 html 网页,下次访问数据时,无需再查询数据,直接将 html 静态页面返回.这样一 ...

  6. 高性能Java Web 页面静态化技术(原创)

    package com.yancms.util; import java.io.*; import org.apache.commons.httpclient.*; import org.apache ...

  7. 高性能Java Web 页面静态化技术

    package com.yancms.util; import java.io.*; import org.apache.commons.httpclient.*; import org.apache ...

  8. Thymeleaf页面静态化技术

    Teymeleaf的使用 案例一:springboot搭建Thymeleaf 1.导入依赖 2.新建html页面模板 3.新建前端控制层Controller 4.新建启动类 1.导入依赖 <?x ...

  9. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_24-页面预览-页面预览测试

    通过nginx转发到预览的地址 重启nginx 添加页面预览按钮 调整下列表的列的宽度

随机推荐

  1. 使用Docker跑MySQL 作为Django的存储后端

    Docker的好处不科普了,用过的都说好. 不想污染自己开发机器上的文件环境,本萌新使用Docker运行Mysql,Redis来作为Django的存储后端和缓存. 在第一次安装过程中,我遇到了一些问题 ...

  2. 使用 Rust 构建分布式 Key-Value Store

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 引子 构建一个分布式 Key-Value Store 并不是一件容易的事情,我们需要考虑很多的问题,首先就是我们的系统到底需要提供什么样的功能 ...

  3. spring+springmvc+mybatis+oracle+atomikos+jta实现多数据源事务管理

    ---恢复内容开始---   在做项目过程中,遇到了需要一个项目中访问两个数据库的情况,发现使用常规的spring管理事务,导致事务不能正常回滚,因此,采用了jta+atomikos的分布式数据源方式 ...

  4. ListView ,recycleView列表带进度条

    实现上图功能有两种思路. 一:普通做法,更新item的数据,不停调用notifydatachange ; 二:各管自家刷新. 一个下载对应一个下载线程.线程持有对应item在Listview中的位置. ...

  5. Nosql简介 Redis,Memchche,MongoDb的区别

    本篇文章主要介绍Nosql的一些东西,以及Nosql中比较火的三个数据库Redis.Memchache.MongoDb和他们之间的区别.以下是本文章的阅读目录 一.Nosql介绍 1.Nosql简介 ...

  6. C++ UTF8和GB2312相互转换

    #include <Windows.h> #include <string> using std::string; void UTF8_to_GB2312(const char ...

  7. 关于javascript removeChild的那些事

    关于javascript removeChild的那些事 今天给removeChild搞死了,弄了几个小时,上代码 <ul id="myList"> <li> ...

  8. A:点排序-poj

    A:点排序 总时间限制:  1000ms 内存限制:  65536kB 描述 给定一个点的坐标(x, y),在输入的n个点中,依次计算这些点到指定点的距离,并按照距离进行从小到大排序,并且输出点的坐标 ...

  9. 数据库 SQL Server2012安装步骤详解

    这篇文章主要给大家讲解一下数据库SQL Server2012的安装步骤(若有雷同纯属巧合,还望谅解!) 在正式安装之前,我们需要进行两个设置: ① 首先需要关闭Windows防火墙,若不关闭,后续的安 ...

  10. springboot集成swagger

    对于搬砖的同学来说,写接口容易,写接口文档很烦,接口变动,维护接口文档就更更更烦,所以经常能发现文档与程序不匹配. 等过一段时间就连开发者也蒙圈了 Swagger2快速方便的解决了以上问题.一个能与S ...