1.1    技术简介与使用

1.1.1     简介

为什么使用:

1、  减轻数据库的访问压力,静态化比较适合大规模且相对变化不太频繁的数据;

2、  有利于SEO(搜索引擎优化); 纯的HTML,没有和后端有任何的联系。迎合了浏览器的喜好,浏览器优先加载HTML。模板 + 数据 -->HTML页面。只有在生成静态页面的时候会访问数据库。

3、  并发能力大,解决高可用的问题

什么是freemarker网页静态化:

是一个Java语言编写的模板引擎,基于模板来生成文本输出。模板不能识别js,只把它当成字符串,生成静态页面后,被浏览器访问后才可以识别

不仅仅可以生成HTML,还可以jsp,pdf,xml 除图片外的任何文件,模板决定了页面类型

使用技术:使用freemarker

1.1.2     使用

引入依赖

<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>

创建模板。例如test.ftl,free marker默认后缀是.ftl  但是也可以用别的

文本   注释<#--...-->  插值${..}  FTL指令<#...>

<html>
<head>
<meta charset="utf-8">
<title>Freemarker入门小DEMO </title>
</head>
<body>
<#--我只是一个注释,我不会有任何输出,不会生成在源代码里 -->
<!—html注释 ,会出现在源代码里-->
${name},你好。${message}
</body>
</html>

生成模板

//1.创建配置类
Configuration configuration=new Configuration(Configuration.getVersion());
//2.设置模板所在的目录
configuration.setDirectoryForTemplateLoading(new File("D:/pinyougou_work/freemarkerDemo/src/main/resources/"));
//3.设置字符集
configuration.setDefaultEncoding("utf-8");
//4.加载模板
Template template = configuration.getTemplate("test.ftl");
//5.创建数据模型
Map map=new HashMap();
map.put("name", "张三 "); //和模板中的${name}保持一致
map.put("message", "helo张三先生!");
//6.创建Writer对象
Writer out =new FileWriter(new File("d:\\test.html")); //文件名 的地址
//7.输出
template.process(map, out);
//8.关闭Writer对象
out.close();

和spring整合:

配置文件中:

<bean id="freemarkerConfig"    class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/ftl/" />
<property name="defaultEncoding" value="UTF-8" />
</bean>

整合后的生成模板:

@Service
public class ItemPageServiceImpl implements ItemPageService { @Value("${pagedir}")
private String pagedir;
@Autowired
private FreeMarkerConfig freeMarkerConfig;
@Autowired
private TbGoodsMapper goodsMapper;
@Autowired
private TbGoodsDescMapper goodsDescMapper;
@Override
public boolean genItemHtml(Long goodsId){
try {
Configuration configuration = freeMarkerConfig.getConfiguration();
Template template = configuration.getTemplate("item.ftl");
Map dataModel=new HashMap<>();
//1.加载商品表数据 TbGoods goods = goodsMapper.selectByPrimaryKey(goodsId);
dataModel.put("goods", goods); //2.加载商品扩展表数据 TbGoodsDesc goodsDesc = goodsDescMapper.selectByPrimaryKey(goodsId);
dataModel.put("goodsDesc", goodsDesc);
Writer out=new FileWriter(pagedir+goodsId+".html");
template.process(dataModel, out);
out.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
} <include “head.ftl”> 静态模板的复用

指令的使用:

Assign:定义变量 include:引入外部模板文件  if:判断 list:遍历集合 ${item_index}:下标

1、<#assign linkman="周先生">    联系人:${linkman}

<#assign info={"mobile":"13301231212",'address':'合肥'} >

电话:${info.mobile}  地址:${info.address}

2、<#include "head.ftl">

3、<#if success=true>

你已通过实名认证

<#else>

你未通过实名认证

</#if>

4、

----商品价格表----<br>

<#list goodsList as goods>
${goods_index+1} 商品名称: ${goods.name} 价格:${goods.price}<br>
</#list>

内建函数:

size:集合大小 ?eval:将字符串转成。。。

共  ${goodsList?size}  条记录

转json

<#assign text="{'bank':'工商银行','account':'1000092020199912'}" />

<#assign data=text?eval />

开户行:${data.bank}  账号:${data.account}

日期转换

当前日期:${today?date} <br>

当前时间:${today?time} <br>  

当前日期+时间:${today?datetime} <br>       

日期格式化:  ${today?string("yyyy年MM月")}

数字转字符串

累计积分:${point?c}

1.2     工作中遇到的哪些问题

1、模板中有值,但是没有给他赋值,就会报错

解决:给其赋值,或者对控制进行处理

方式一、用法为:variable??,如果该变量存在,返回true,否则返回false 

<#if message??>
message变量存在
<#else>
message变量不存在
</#if>

方式二、在代码中不对aaa定义,或者赋值为null,也不会报错了.显示后边的内容-

  ${message!'-'}

2、日期,没有指定日期规格,会报错

4、  问题分析:shangp 的状态修改的时候:商品状态修改,更新索引库,生成静态页面。分布式事务的一致性问题,效率较低。

如何解决:MQ

网页静态化解决方案-Freemarker的更多相关文章

  1. 网页静态化解决方案-Freemarker demo+语法

    1.网页静态化技术Freemarker 1.1为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说 ...

  2. 网页静态化解决方案Freemarker

    序言: 沉淀了三个月,逐步将自己最近两年在公司中用到的技术和知识点,重新整理归纳了下,对比以前可以发现,现在技术更新越来越快,也越来越成熟,在互联网企业,用到的技术也更先进,更领先,比如微服务.分布式 ...

  3. 网页静态化技术Freemarker的详细介绍

    网页静态化技术Freemarker 一.Freemarker的基本介绍 1.1为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道 ...

  4. 网页静态化技术--Freemarker入门

    网页静态化技术:为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说,至少几百万个商品,每个商品又 ...

  5. 网页静态化—redis | freemarker

    1.   学习计划 1.商品详情页面展示,动态展示 jsp + redis 2.使用freemarker实现网页静态化 3.ActiveMq同步生成静态网页 两个方案对比,方案一依赖web容器,red ...

  6. 网页静态化技术Freemarker

    1.为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说,至少几百万个商品,每个商品又有大量的信息 ...

  7. 网页静态化解决方案:Freemarker生成简单html页面

    FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与 Web 容器无关,即在 Web 运行时,它并不知道 Servlet 或 HTTP.它不仅 ...

  8. JAVAEE——宜立方商城10:使用freemarker实现网页静态化、ActiveMq同步生成静态网页、Sso单点登录系统分析

    1. 学习计划 1.使用freemarker实现网页静态化 2.ActiveMq同步生成静态网页 2. 网页静态化 可以使用Freemarker实现网页静态化. 2.1. 什么是freemarker ...

  9. 网页静态化技术Freemarkerh简介

    1.1为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 对于电商网站的商品详细页来说,至少几百万个商品,每个商品又有大量的信 ...

随机推荐

  1. 浏览器组成、线程及event loop

    浏览器组成 User interface: a. Every part of the browser display, except the window. b. The address bar, b ...

  2. CSS知多少

    1.Cascading Style Sheets 层叠样式表 2.层叠就是浏览器对多个样式来源进行叠加,最终确定结果的过程. 3. 样式的5大来源:浏览器默认样式.浏览器用户自定义样式.行内样式.内部 ...

  3. toast, 警告窗

    //浮动提示框 1秒后消失 toast(msg, isError, sec) { var div = $('#toast'); div.html(msg); div.css({visibility: ...

  4. js点击事件在苹果端失效的问题

    在安卓机上,我们随意定义点击事件也能够在找到点击的元素,但是在苹果端上就是不行,怎么点击都没有效果.这是因为在苹果机上window禁止了手指误点功能,必须解除这一功能,或者给点击事件指引某个元素上绑定 ...

  5. 已注册成Portal联合服务器的Server,如何修改机器名?

    1.产品版本 ArcGIS for Server 10.2.2 2.修改说明 本环境中,Portal for ArcGIS和ArcGIS for Server两个产品安装在同一台机器上.安装前已将完全 ...

  6. 【vue入门】日志demo,增删改查的练习(无vuex版本)

    安装 1. 确定电脑已装node和npm 出现版本号则说明电脑已经安装好node和npm2. 创建一个基于webpack的项目   3. 在项目里安装依赖 4. 运行 配置路由为了动态渲染各个页面的组 ...

  7. Android N(API level 24.)废弃了Html.fromHtml(String)

    从API level 24开始,fromHtml(String)被废弃,使用fromHtml(String source, int flags) 代替 flags: FROM_HTML_MODE_CO ...

  8. Spring MVC基本配置和实践(二)

    1. springmvc: 是一个表现层框架,作用是从请求中接收传入的参数,将处理后的结果数据返回给页面展示 2. ssm整合: 1)Dao层 pojo.mapper接口.mapper映射文件(使用逆 ...

  9. java将int类型的变量转化成String类型的

    第一种方法:String的valueOf方法,int i=5;String s=String.valueOf(i);第二种方法,直接在int后面加一个空的字符串,因为在java里面,默认任务int类型 ...

  10. resin发布spring-boot项目报错“java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger”

    说白了还是jar包冲突问题,直接说解决方式: 首先将resin/lib下的validation-api-1.0.0.GA.jar替换成项目中的包validation-api-2.0.1.Final.j ...