第十二

本文探讨使用Freemarker技术生成静态网页的优势,包括减轻数据库压力、提升SEO效果及提高并发处理能力。介绍Freemarker的基本操作,如模板加载、数据绑定及指令使用,展示如何在Java中配置并应用模板,生成静态HTML文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

静态网页技术freemarker:
减少数据库压力
可以优化SEO搜索引擎
如果是动态的,tomcat并发只有几百
但是静态的可以Nginx并发5万。因为Nginx只能是静态网页。

入门
导入jar freemarket 就这么一个
第一 template
text.ftl 其实什么文件都行,但是规范就是ftl 结尾 里面的内容就是html的东西。然后加入了一个变量 ${}

其中一共分为4部分
文本
<#-- -->注释。不会输出
${} 插值
FTL指令。

demo

<#-- 我是一个注释,我不会输出–>

${name},你好。${message} 第二

java
main{
//配置对象
Configration cfg = new Configration(Configration.getVersion());
cfg.setDirectoryForTemplateLoading(new File(“d:\”)) 设置模板的目录
cfg.getTemplate(“text.ftl”): 设置模板名称
cfg.setDefaultEncodeing(“utf-8”) 字符集的对应。
创建数据 可以使pojo 也可以是map map更方便与扩展。
Map map = new HashMap():
map.put(“name”,“秦先生”):
map.put(“message”,“欢迎来到freemarket的世界”)

通过以上的5步,我们在程序中得到了 模板 以及数据
下面是弄到文件中。
Writer w = new FileWriter(“test.html”); 县创建文件
在文件中写入
template.proess(map,w);用模板的替换数据,以及写入流
w.close();关闭对象。

插值中定义了的值 map中必须赋值。否则报错。

FTL指令
模板中用与赋值,判断啊,遍历

demo

<#-- 我是一个注释,我不会输出–>

<# assgin name = “秦先生”> 这句话用于给插值的默认赋值,不用去java中赋值了
${name}:你好

name,你好。{name},你好。name,{message}

<#assign info = { “mobil”= “1231231798789”, “address”=“被禁场频”}>
${mobil}
<# include “tittle.ftl”>这样就引入利
<# if success= true> 在java中 map.put(“success”,true); 这个if判断中的 = 和 == 是一个效果的。
你过了
<#else>
你没过
<#else>

<#if>

<#list goodslist as goods> goodslist 是一个list
goodsindex+1这个是固定语法获取下标。也可以做数学运算。商品名称:{goods_index+1} 这个是固定语法获取下标。也可以做数学运算。 商品名称:goodsindex+1{goods.name}
一共${goodslist?size}条记录

<#assign str = “{‘name’: ‘zhangsan’,‘card’:‘2312312398’}”>外边双引号,里面都是单引号。都要单引号数字也是。
<#assign data = str?eval>将字符创转换为对象。
名字:${data.name}

map.put(“today”,new Date()):
${today?date} 日期
${today?time} 时间
${today?datetime} 日期+时间

日期转换为字符创
${today?string(‘yyyy年MM月’}

map.put(“num”,1238791273);
${point} 123,34,132会出现这种格式的数字
${point?c}这样就是原样显示了。

<#if aaa??>
aaa存在${aaa}
<#else>
aa不存在
<#else>
<#if>

以上是用了if 和??
还有更简单的吗?
${bbb!‘bbb没有被赋值’}如果不存在就 ‘bbb没有被赋值’

运算符
在表达式中是支持运算的。
比如+ - * / % 这些都是支持的。
&& || ! 也支持。
< > 这种符号可以用但是如果在if标签中,就会和标签想通了
<#if num>100> 会报错
<#if num gt 100> ✔
<#if (num>100)>✔

新建一个template
tittle.ftl
<h1>标题
<h1>

与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");

因为路径不应该写死
我么创建一个dir.properties文件
dir = d:\item\

publi class serviceimpl{

@Autowired
TbGoodsMapper goodmapper;
@Autowired
TbGoodsDescMapper descmapper;

@Value("${dir}")
String dir;

@Autowired
FreemarkerConfigurer  freemarkerConfigurer;
boolean getHtml(Long goodid){
Configration c = freemarkerConfigurer.getConfigration();
Template  t  = c.getTemplate("item.ftl");
Map data = new HashMap():
TbGoods good = goodmapper.selectById(goodid);
data.put("good",good);
TbGoodsDesc desc = descmapper.selectById(goodid);
data.put("desc",desc");


Writer out = new FileWriter(dir+goodid+".html"):
t.proess(data,out);
out.close();

我们拿到文件,第一部就是把头部和尾部都弄成一个单独的文件。然后引入
<#include “head.ftl”>
<#include “end.ftl”>
然后就是找到具体的文字的地址,先用浏览器访问,在源文件中改位置,用插值。

前段的数量
我们需要引入js
建立一个方法,一个变量记录选择的个数。

选中的效果要打框。
也是需要js处理
一个是 对象记录选择了哪个。就有个点击事件记录到对象中。 因为key不一样。
因为是两个,所以每一个对比一下变量的值,用key来对比。两个方法,完成记录和找到记录。前段显示

我们要做的是根据规格,显示的名称要变。显示的价格要变。但是不能去访问数据库
所以在生成静态页面的时候,我们要查item表。其中有sku的信息 这个是在java中
在页面中呢。我们需要

var skulist = [
<#list itemlits as item>
{
id:${item.id?c},
tittle:${item.tittle},
price:${item.price?c},
spec:${item.spec}
},

<#list>

]

因为我们需要将查出来的list的【0】赋值给原来默认的
scope.specificationItems=JSON.parse(JSON.stringify(scope.specificationItems = JSON.parse(JSON.stringify(scope.specificationItems=JSON.parse(JSON.stringify(scop.sku.spec)); 经过对象转换成String 在从String 转换成对象。实现了申客隆

因为我们给了默认的值,所以默认就会打上

js中有个牛逼的东西。遍历属性

findOne = function(o1,o2){
for (var k in o1){
if(o1[k]!=o2[k]){
return false;
}
if(o2[k]!=o1[k]){
return false;
}
return true;
}
因为属性不知道哪个对象多。

就是用我们选择的对象和我们的list做比较。什么时候作比较呢?
在点击的时候。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值