网页静态化技术:
网页静态化技术:
如果将网页以纯静态化的形式展现,就可以使用 Nginx 这样的高性能的 web 服务器来部署。Nginx 可以承载 5 万的并发,而Tomcat只有几百;网页静态化技术减轻数据库的访问压力,减少服务器的压力,有利于SEO。
FreeMarker:
FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。
FreeMarker最重要的公式:
模板 + 数据 = 文件
FreeMarker的使用:
1.导入依赖
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
2.FTL指令:FreeMarker 指令,和 HTML 标记类似,名字前加#予以区分,不会输出。
3.注释: <#--注释内容-->
4.如果在模板中使用了变量,却没有对变量进行赋值,就会报错
FTL指令
1. ${key} 插值指令
如果使用插值指令进行插值,但是却没有数据,就会报错
2. #assign 定义变量指令
<#--直接在模板中定义变量-->
<#assign username='张三'/> <#--定义字符串-->
${username}
<#assign user={'username':'张三','age':18}/> <#--定义json对象-->
${user.username} ${user['age']}
注意:定义字符串,属性值需要用引号引起来;定义json对象,json对象不要引号,但是key-value需要引号
3. #include 引入模板指令
<#include "head.ftl"/>
4. #if 条件判断指令
<#if flag1>
...
<#elseif flag2>
...
<#else>
...
</#if>
5. #list 循环指令
<#list goodsList as goods>
${goods.name} 索引:${goods_index} <br/>
</#list>
注意:goodsList是我们要循环的集合,goods是循环变量,获取下标的方式是用循环变量后面加上"_index"
内建函数
内建函数语法格式: 变量?函数名
1. ?size 获取集合的长度,相当于list.size()
${goodsList?size}
2. ?eval 解析字符串函数
<#assign user="{'username':'张三'}"/>
<#assign u=user?eval/>
${u.username}
3. ?datetime 日期格式化函数
${today?datetime}
${today?string("yyyy年MM月dd日")} <#--自定义日期格式-->
4. ?c 格式化数字函数
${11111?c}
FreeMarker模板会自动把数字转换成"111,111,111"这样的格式,所以需要用"?c"函数格式化
5. ?? 判断变量是否被赋值
<#if variable??>
variable有值
<#else>
variable没有被赋值
</#if>
${key??} 如果key存在,就显示true,不存在就显示false
6. ! 缺失变量默认值
${variable!'默认值'}
${key!"默认值"} 如果key存在,就显示key的值,如果key不存在,就显示默认值。而且不会报错
如果默认值是'',可以省略为${key!}
7. 比较运算符
常见的运算符都可以使用
注意: "="和"=="在模板中都可以作为比较运算符
"=" "==" "!="都可以用来比较字符串,数值和日期;运算符两边数据类型要相同
FreeMarker会把大于号">"解释成FTL标签的结束字符,会报错,可以用gt或者()解决
<#if (1 > 2)>
</#if>
<#if (1 gt 2)>
</#if>
gt: greather than lt: less than
原生的模板对象使用:
Configuration configuration = new Configuration(Configuration.getVersion);
configuration.setDirectoryForTemplateLoading
(new File("D:\\IdeaProjects\\pyg_demo_project\\freemarker_demo\\src\main\\resources\\"));
configuration.setDefaultEncoding("utf-8");
Template template = configuration.getTemplate("test.ftl");
Map dataModel = new HashMap();
dataModel.put("username","zhangsan");
dataModel.put("mwssage","hello world...");
Writer writer = new FileWriter(new File("d:\\test.html"));
template.process(dataModel,writer);
writer.close();
基于Spring的模板对象使用:
在spring.xml文件中配置文件中配置模板对象:
<bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="defaultEncoding" value="utf-8"></property>
<property name="templateLoaderPath" value="/WEB-INF/ftl/"></property>
</bean>
@Autowired
private FreeMarkerConfigurer freeMarkerConfigurer;
Configuration configuration = freeMarkerConfigurer.getConfiguration();
Template template = configuration.getTemplate("test.ftl);
.....