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 添加页面预览按钮 调整下列表的列的宽度
随机推荐
- CSS实现盒子高度撑开且以最高的为高
前端开发中,常常会有需求两个盒子并排排列,高度以最高的为准,且高度是内容撑开的,类似于这样 如果不是用 table 布局,而是用 div 布局,两个子盒子浮动来实现的话,实际上默认写出来是这样的 此时 ...
- IDisposeable,Close
一.资源分类 资源分为托管资源和非托管资源. 非托管资源:所有的windows内核对象(句柄)都是非托管资源,如stream,数据库连接,GDI+和COM对象等,这些资源不受CLR管理. 托管资源:由 ...
- C/S架构自动化测试入门
所谓C/S架构即Client/Server(客户端/服务器架构).虽然近年来C/S架构产品越来越少,大有被B/S(Browser/Server 浏览器/服务器)架构超越的趋势,但C/S还是有B/S不可 ...
- MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作)
MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作): a.创建2张表 create table userinfo(nid int not nul ...
- 02-线性结构4 Pop Sequence
题目 Sample Input: 5 7 5 1 2 3 4 5 6 7 3 2 1 7 5 6 4 7 6 5 4 3 2 1 5 6 4 3 7 2 1 1 7 6 5 4 3 2 Sample ...
- 实验:企业级分布式存储应用与实战-mogilefs实现
实验:企业级分布式存储应用与实战-mogilefs实现 (1)安装mogilefs 1.创建一个存放安装mogilefs所需的软件包的目录 cd /app/ mkdir mogilefs cd mog ...
- MyEclipse Java基础使用笔记
一.Java开发平台 JavaSE 标准版 Java应用程序 application 五子棋.计算器.qq JavaEE 企业版 Java企业级应用 JavaME 微型版 小型设备 A ...
- ThinkPHP中处理模板引擎的volist标签
Volist标签主要用于在模板中循环输出数据集或者多维数组 必须得属性有:name属性,要输出的数据模板变量,id是循环变量. 其他属性参见开发手册. 通常模型的select方法返回的结果是一个二维数 ...
- 整合SSH时,遇到了org.springframework.beans.factory.BeanCreationException错误
严重: StandardWrapper.Throwableorg.springframework.beans.factory.BeanCreationException: Error creating ...
- 简单使用Unity导航系统(小白之路)
1.介绍 NavMesh:是一种根据场景中几何图像创建出来的3D网格.它会使导航和寻路变得很容易. 简单来说,NavMesh是一种我们在游戏世界中,可以让游戏角色在其表面行走并且导航的平面. 2.注意 ...