网页静态化技术 -Freemarker
原因:在我们开发过程中,一般会大量的网页静态化部分的解决问题,例如新闻网站的那些静态新闻,再比如我们大型的电商项目,每个商品的详情页,都是一些静态资源,如果每次用户访问都要去数据库中访问,那么无疑会造成高并发的现象,而且造成资源的浪费。
SEO
NginxwebNginx5Tomcat
FreeMarker Java FreeMarkerWeb Web Servlet HTTPXMLJSP Java
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency>
以前的时候可能我们还写过信,或者现在很多人也会写请假条之类的,会发现那个东西是不是一种模板呢?
亲爱的**,你好! ************************************************************************ 署名: 日期:
那么我们今天就来创建一个:
<html> <head> <meta charset="utf-8"> <title>Freemarker入门小DEMO </title> </head> <body> <#--我只是一个注释,我不会有任何输出 --> ${name},你好。${message} </body> </html>
下面我们来创建一个类:
package cn.liurui.core.demo; import freemarker.template.Configuration; import freemarker.template.Template; import java.io.File; import java.io.FileWriter; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * @author liurui * @date $ {DATE} 12:04 */ public class Freemarker_Demo { public static void main(String[] args) throws Exception{ //准备数据模型 可以是json数据,也可以是javabean数据类型 Map dataMap = new HashMap(); //配置freemarker //设置configuration的配置 Configuration configuration = new Configuration(Configuration.VERSION_2_3_23); //设置模板路径 configuration.setDirectoryForTemplateLoading(new File("D:/Users/Administrator/ shop_pinyougou_demo_parent/freemarker_demo/src/main/resources")); //设置模板内容编码 configuration.setDefaultEncoding("utf-8"); //设置模板对象 Template template = configuration.getTemplate("index.ftl"); //设置模板文件 FileWriter writer = new FileWriter("D:/1.html"); //合成输出 template.process(dataMap,writer); //关闭 writer.flush(); writer.close(); } }
//5.创建数据模型 Map map=new HashMap(); map.put("name", "张三 "); map.put("message", "欢迎来到神奇的Freemarker世界!");
然后我们启动这个主方法:就会在页面上看到我们会输出 张三,欢迎来到神奇的Freemarker世界!
如果这个Freemarker模板仅仅只能做到这么简单的,那我们也不会用它是吧。。。。
下面我们来看看Ftl指令:
<#assign linkman="赵四">
联系人:${linkman}//联系人:赵四
<#assign info={"mobile":"110",'address':'黄河西路'} > 电话:${info.mobile} 地址:${info.address}//电话:110 地址:黄河西路
##一,我们一般网页前端写的页面,如果几个页面头部相同,会单独写一个头部,然后通过inculde命令去导入,那么我们模板也会有这个指令:
<#include "head.ftl">
##二,if指令
在我们的类中我们会添加一个:
dataMap.put("success",false);//当为true时,为ok,当为false时,为no
<#if success=true> ok <#else> no </#if>
##三,list指令
List goodsList=new ArrayList(); Map goods1=new HashMap(); goods1.put("name", "苹果"); goods1.put("price", 5.8); Map goods2=new HashMap(); goods2.put("name", "香蕉"); goods2.put("price", 2.5); Map goods3=new HashMap(); goods3.put("name", "橘子"); goods3.put("price", 3.2); goodsList.add(goods1); goodsList.add(goods2); goodsList.add(goods3); map.put("goodsList", goodsList);
在我们的模板中添加;
----商品价格表----<br> <#list goodsList as goods> ${goods_index+1} 商品名称: ${goods.name} 价格:${goods.price}<br> </#list> 打印结果: 1 商品名称:苹果 价格:5.8 2 商品名称:香蕉 价格:2.5 3 商品名称:橘子 价格:3.2
##四,我们需要将json字符串转成对象:
<#assign text="{'bank':'工商银行','account':'10101920201920212'}" /> <#assign data=text?eval /> 开户行:${data.bank} 账号:${data.account}
##五,日期格式:
Map dataMap = new HashMap(); dataMap.put("today",new Date()); /** * 当前日期:2019-9-30 当前时间:16:38:50 当前日期加时间;2019-9-30 16:38:50 日期格式化:2019年09月30日 16时38分50秒 */ 当前日期:${today?date}<br> 当前时间:${today?time}<br> 当前日期加时间;${today?datetime}<br> 日期格式化:${today?string("yyyy年MM月dd日 HH时mm分ss秒")}
##六,判断变量是否存在?
<#if aaa??> aaa变量存在 <#else > aaa变量不存在 </#if>
来源:博客园
作者:阿锐互联网
链接:https://www.cnblogs.com/liurui-bk517/p/11613846.html