初步理解:

架构优化:

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

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. [转载] RED-BLACK(红黑)树的实现TreeMap源码阅读

    转载自http://lxy2330.iteye.com/blog/1664786 由于平衡二叉树与红黑树都是二叉排序树,又红黑树是对平衡二叉树的一种改进实现,所以它的很多思想算法都来源于排序二叉或平衡 ...

  2. Python的路径引用

    1.以HOME目录为准,进行跳转 sys.path.append(os.path.dirname(__file__) + os.sep + '../') from config import swor ...

  3. wealoha thrift-client-pool 总结

    DefaultEvictionPolicy类是EvictionPolicy接口的实现主要描述,pool中那些idel对象会被Evict,回收.关键代码如下: public boolean evict( ...

  4. 将传统项目改造为SSM框架的项目

    首先 第一步改变传统dao层 先要再resource文件夹下创建一个applicationContext.xml  内容如下 关键代码     <!--        使spring扫描包下的所 ...

  5. springboot使用i18n时properties文件中文乱码

    在springboot使用i18n进行国际化文件配置时,文件名为messages_zh_CN.properties的文件中填写中文信息,当使用浏览器进行访问时,出现中文乱码,此时在idea中进行修改s ...

  6. 实战Excel Add-in的三种玩法

    作者:陈希章 发表于 2017年11月26日 前言 这个系列文章应该有一阵子没有更新了,原因是一如既往的多,但是根本所在是我对于某些章节其实还没有完全想好怎么写,尤其是对于Office Add-in这 ...

  7. 关于cocos2d-x面试的问题

    关于高效渲染的问题: 1.先说下渲染批次:这是游戏引擎中一个比较重要的优化指标,指的是一次渲染凋用.也就是说,渲染的次数越少,游戏的运行效率越高. 2.CCSpriteBatchNode就是cocos ...

  8. Web App适配iPhoneX

    前言 Iphone每次退出新尺寸的手机都会掀起一番适配风波,这次没有下巴但有刘海的iPhoneX更是如此,网传横屏下的适配动画更是令不少人汗颜. 其实对于Native App来说,适配并不算困难(当然 ...

  9. 运行java web项目时报错:Several ports (8005, 8080, 8009) required

    运行java web项目时报错:Several ports (8005, 8080, 8009) required 如下图 之所以报上面的错误是因为安装Tomcat的时候,已经把端口8005,8080 ...

  10. JAVA 异常向上抛和向下抛的优劣势

    向上抛: 优点:向上抛出异常,下面代码清秀: 缺点:不能直接看出抛出异常的代码: 向下抛: 优点:能直接看到出现异常的代码,方便查找,显得严谨: 缺点:代码太多: 总结:尽量向上抛,代码量减少,同意解 ...