当前位置: 首页 > news >正文

freemarker网页静态化

网页静态化:

  将动态生成的jsp页面,变成静态的HTML页面,让用户直接访问。也就是说,事先把要展示的页面生成静态页面,存放到服务器中,当用户访问某商品详情页时便可以直接从服务器获取相应的静态页面,不用再重新渲染。

freemarker介绍:

  FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。

  个人理解:FreeMarker可以根据提供的数据和创建好的模板,去生成输出文本(HTML网页、电子邮件、配置文件、源代码等)。即输出=数据模型 + 模板

freemarker特点:

  FreeMarker是一个免费的模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。

  FreeMarker不是一个Web应用框架,而是作为Web应用框架一个组件。

  FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境。

       FreeMarker能够生成各种文本:HTML、XML、RTF、Java源代码等,但常用于生成html,发送邮件等。

 

使用Freemarker常考虑的问题:

  1,输出文件的名称

  2,输出文件的保存路径

  3,网页(静态资源)访问方式(Tomcat(效率不高),http服务器(Nginx,Apache))

     4,生成网页的时机(可以使用ActiveMQ,订阅topic)

   如:就商品详情页面:一种方案是用户点击详情的时候生成页面,但是高并发(许多人同时几乎同时刻访问)情况,可能会造成页面在生成过程中就返回,造成页面不全的情况,另一种方案是在添加商品的时候就生成静态页面,这样有请求时,就只做页面返回,这里涉及一个问题,就是商品添加操作结束,需要提醒生成静态页面的服务执行页面生成操作。在这里我们采用第二种方案,结合ActiveMQ进行消息发布与订阅等。

  5,部署(该服务(生成静态化页面的服务)部署多台还是一台服务器(看具体需求))

   注:我们这里采用2台Nginx服务器,进行该服务的部署,这两台Nginx服务器做同样的事情(发布生成页面的服务,记做:item-web),当添加商品的事件执行时(记做:itrem-add),我们管理add操作的服务(记作:manager)进行发布消息,通过ActiveMQ(与spring整合的spring-activemq.xml配置)进行发布,并通知消息订阅者,进行生成页面的操作(item-web),我们web操作将生成的页面id+“.html”存储在自己的服务器中。

这时候我们前台接受到页面访问请求,通过负载均衡服务器,随机的将请求分配给2台Nginx服务器(或者Apache)中任意一个,服务器接受到请求,加载存储的item+"。html"静态资源。

转载于:https://www.cnblogs.com/H---/p/8875830.html

相关文章:

  • Lucene解析 - 基本概念
  • git日常使用经验积累
  • 十六周四次课
  • CSS重置, 批量设置指定所有类型控件的CSS风格
  • 全民链郑宇谈区块链电商:和传统公司合作,“去中心化”提都不要提
  • 系统目录结构、ls命令、文件类型、alias命令
  • 京东八年架构师: Redis 如何分布式,金融的设计原理
  • oracle添加序列
  • Linux中常见文件类型及文件系统类型
  • Zabbix latest data页面500错误解决
  • 【凯子哥带你夯实应用层】使用ActionMode实现有删除动画的多选删除功能
  • Purism发布Librem 5 Linux手机文档
  • centos7 安装 elasticsearch-6.2.4
  • Kubernetes 1.10和Cross-Cloud CI Project Dashboard 1.3释放,Kubernetes发布用户调查
  • 【大数据】数据的优美
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 2018一半小结一波
  • Java 多线程编程之:notify 和 wait 用法
  • java 多线程基础, 我觉得还是有必要看看的
  • JDK9: 集成 Jshell 和 Maven 项目.
  • mysql innodb 索引使用指南
  • Node 版本管理
  • Python十分钟制作属于你自己的个性logo
  • 硬币翻转问题,区间操作
  • 原生Ajax
  • 正则表达式
  • 【干货分享】dos命令大全
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • 移动端高清、多屏适配方案
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​Linux·i2c驱动架构​
  • #define与typedef区别
  • #stm32整理(一)flash读写
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $$$$GB2312-80区位编码表$$$$
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (转)jQuery 基础
  • (转载)从 Java 代码到 Java 堆
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net6+aspose.words导出word并转pdf
  • .NET微信公众号开发-2.0创建自定义菜单
  • .NET中 MVC 工厂模式浅析
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @Controller和@RestController的区别?
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @RequestMapping-占位符映射
  • @RestController注解的使用
  • @WebServiceClient注解,wsdlLocation 可配置
  • [ C++ ] STL---仿函数与priority_queue
  • [2021 蓝帽杯] One Pointer PHP