1. Freemarker模板引擎渲染web视图
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。
第一步:在pom.xml中配置引入 freeMarker的依赖包 。
<!-- freeMarker的依赖包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
第二步:编写控制器。
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Map;
@EnableAutoConfiguration
@Controller
public class TestFreemarkerController {
@RequestMapping("/testFreemarker")
public String index(Map<String, Object> map) {
map.put("name","大白");
return "index";
}
}
第三步:编写视图,视图 index.ftl 的位置如下所示。
视图的内容:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<title></title>
</head>
<body>
<h1>${name}</h1>
</body>
</html>
第四步:启动项目,访问http://localhost:8080/testFreemarker,如下图所示:
2. Freemarker的优缺点
FreeMarker的原理就是:模板+数据模型=输出。
Freemarker的优点:
- 很好的将业务逻辑和表现层分离。
- 提高开发效率。相对于JSP,FreeMarker不需要每次修改后重新编译,因此在开发调试中可以有效节省时间。
- 有利于提高访问速度。对于不会频繁发生变化的页面,建议使用FreeMarker生成的静态页面。而不是每次都要动态生成的JSP页面。
- 可以提高并发量。例如单台tomcat容器只支持几百并发,我们如果将网页以纯静态化的形式展现,就可以使用Nginx这样的高性能的web服务器来部署。Nginx可以支持几万的并发。
- 静态页面对SEO更友好。
- 不占用JVM的PermGen space。因为不会被编译成类,所以不会占用web服务器永生代的空间,避免OutOfMemoryError:PermGen space的问题。
- 对于电商网站的商品详细页来说,至少几百万个商品,每个商品又有大量的信息,这样的情况同样也适用于使用网页静态化来解决。
Freemarker的缺点:
- 数据在更新后需要及时更新模板,否则可能会看到过期数据。
- FreeMarker中的变量必须要赋值,不赋值就会抛出异常。想避免错误就要应用if/elseif/else 指令进行判段,如果对每一个变量都判断的话,那么则反而增加了编程的麻烦。
- FreeMarker的map限定key必须是string,其他数据类型无法操作。
- FreeMarker不支持集群应用。为了编成的方便性,把序列化的东西都放到了Session中,如Session,request等,在开发的过程中确实方便,但如果将应用放到集群中,就会出现错误。
网页静态化技术和缓存技术区别:网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力。但是具体的应用场景不同,缓存比较适合小规模的数据,而网页静态化比较适合大规模且相对变化不太频繁的数据。
参考文献:
- Freemarker优缺点总结
- https://baike.baidu.com/item/freemarker/9489366?fr=aladdin