Freemarker页面静态化技术,activemq监听页面变动

初步理解:

Freemarker页面静态化技术,activemq监听页面变动

架构优化:

Freemarker页面静态化技术,activemq监听页面变动Freemarker页面静态化技术,activemq监听页面变动Freemarker页面静态化技术,activemq监听页面变动

Freemarker页面静态化技术,activemq监听页面变动Freemarker页面静态化技术,activemq监听页面变动Freemarker页面静态化技术,activemq监听页面变动

Freemarker页面静态化技术,activemq监听页面变动

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

Freemarker:

导包Freemarker页面静态化技术,activemq监听页面变动

模板: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>

Freemarker页面静态化技术,activemq监听页面变动

 @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监听页面变动

访问:Freemarker页面静态化技术,activemq监听页面变动

上一篇:acm入门 杭电1001题 有关溢出的考虑


下一篇:性能瓶颈之Source