目录
前言
Freemark页面静态化技术,把页面静态化,这样就能把项目部署到linux下的Nginx下
Nginx能够承载高并发
freemark介绍
引入依赖
模版中的元素
生成静态文件
ftl指令
定义数据指令<#assign>
模版嵌套指令<#include>
条件判断指令<#if>
集合质量<#list>
map的遍历
有2种形式可以直接使用
遍历可以通过<#list>,只不过需要加一个问号 keys as k,来获取map里的key
内建函数
size函数
size为内建函数,goodsList是一个集合
转换json函数
日期格式化函数
数字转字符串函数
空值处理函数
运算符
Freemark的缓存问题
参考 https://www.jb51.net/article/83220.htm
FreeMarker缓存模版的意思就是,当你通过getTemplate方法获取一个模版的时候,FreeMarker不仅会返回一个Template对象,而且会缓存该对象,当你下一次以相同的路径请求模版的时候,它就会返回缓存中的模版对象。如果你改变了模版文件,那么当你下一次获取模版的时候,FreeMarker会自动重新加载,重新解析模版。虽然如此,但是如果直接判断一个文件是否修改过是一个耗时的操作,那么FreeMarker 在Configuration 对象级别提供了一个配置参数“update delay”。该参数的意思是FreeMarker多长时间去判断一次模版的版本,默认设置是5秒钟,也就是每个5秒就会判断模版是否经过修改,如果你想实时的判断,那么设置该参数为0。另外一点需要注意,并不是所有的加载器都支持这种判断方式,举例来说基于class-loader 的模版加载器就不会发现你修改过模版文件。
对于删除缓存中的模版FreeMarker 是这么做的,你可以使用Configuration 对象方法clearTemplateCache 以手工的方式清楚缓存中的模版对象。而实际上缓存部分可以作为一个组建加入到FreeMarker 中(也就是它可以使用第三方缓存方案)你可以通过设置cache_storage 这个参数来实现。对大多数开发者来FreeMarker 自带的freemarker.cache.MruCacheStorage 实现已经足够了。这个缓存使用2 个级别的Most Recently Used(最近最多用)策略。在第一个级别,所有的缓存条目都是使用强引用(strongly referenced:条目并不会被JVM 所清楚,与其相对的弱引用softly reference)直到达到最大时间,那些最近最少使用的条目就会被迁移到二级缓存。在这个级别条目都是使用弱引用直到达到过期。若引用与强引用的区域的大小是可以在构造函数中设置的,例如你想把强引用区域设置为20,弱引用区域设置为250,那你可以使用以下代码:
cfg.setCacheStorage(new freemarker.cache.MruCacheStorage(20, 250))
由于MruCacheStorage 是默认的缓存实现,那么你也可以这样设置:
cfg.setSetting(Configuration.CACHE_STORAGE_KEY,"strong:20, soft:250");
当你创建一个新的Configuration时,其默认使用MruCacheStorage缓存实现且默认的值maxStrongSize等于0,maxSoftSize等于Integer.MAX_VALUE(也就是理论最大值)。但是对于高负荷的系统来说,我们建议maxStrongSize 设置成一个非0 的数值,不然会导致频繁的重新加载,重新解析模版。
整合spring的Freemark
在spring 配置文件里加入,那么我们创建文件的时候就能节省一些步骤
第1 是输出文件的目录,从配置文件里读取
第2 是拼接输出的文件路径,goodsId是商品的id
还需要把数据传给页面