网页静态化技术Freemarker——demo(1)_沉默木头人的博客-程序员宅基地

技术标签: spring  spring boot  java  freemarker  FreeMarker  

在项目中为什么会使用网页静态化技术呢?

对于一个比较成型的电商网站来说,一个网站中的商品就会有成百上千个甚至上亿;那么问题就来了这些商品对应的每一个商品详情页面中的数据从哪里来呢
总不能每次都去数据库查询每一个商品的详情数据吧!会有人说可以把这些数据放到缓存中啊,每次按照商品的id去缓存中查询;就拿redis来说是基于内存的key-value数据库,用来做查询算是比较快的了吧,那么既然是基于内存的就会有内存占满或者控制使用不足的情况,所以想这些大量的数据就不建议使用缓存将他们保存起来,而是使用另一种方式:网页静态化技术;
网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力,但是具体的应用场景不同,缓存适合比较小规模的数据,而网页静态化比较适合大规模的且相对变化不太频繁的数据(比如商品详情和新闻页);网页静态化还有利于SEO

FreeMarker介绍:

这里我们网页静态技术使用的模板是FreeMarker,像这种模板页面或许还有很多(例如:thymeleaf等)
什么是FreeMarker:
FreeMarker是一个用java语言编写的模板引擎,它基于模板来生成文本输出,FreeMarker与Web容器无关,即在Web运行
时他不知道Servlet或Http,他不仅可以用作在表现层的实现技术,而且还可以用于生成XML、JSP、或Java等
在这里插入图片描述

FreeMarker入门小Demo

这里我使用的是boot项目测试,将后台的参数在FreeMarker页面中显示出来
注:因为该项目是通过后台请求到模板页面,所以在创建项目的时候设置该项目的打包方式为war

demo结构目录:
在这里插入图片描述
1、首先创建一个boot项目,导入freemarker的依赖包

<dependency>
	  <groupId>org.springframework.boot</groupId>
	  <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

2、在application.properties配置文件中添加freeMarker的相关配置

#freemarker的相关配置
spring.freemarker.cache=false
spring.freemarker.charset=UTF-8
spring.freemarker.suffix=.ftl
spring.freemarker.content-type=text/html; charset=utf-8
spring.freemarker.template-loader-path=classpath:/templates
spring.mvc.static-path-pattern=/static/**

3、创建FreeMarker模板页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>欢迎</title>
</head>
<body>
    ${
    name}你好,${
    message}
</body>
</html>

4、编写后台控制层中的代码

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.HashMap;
import java.util.Map;

/**
 * freeMarker测试
 */
@Controller
public class Demo {
    

    @RequestMapping("/test")
    public String test(String name, Model model) {
    

        //封装要显示的数据
        Map<String,String> map = new HashMap<String,String>();
        map.put("name",name);
        map.put("message","欢迎来到FreeMarker的世界");

        //将数据使用Model带过去
        model.addAllAttributes(map);

        return "index";
    }

}

最后成功启动该项目之后,访问test服务并带有参数,就能够成功响应到index.ftl页面了
在这里插入图片描述

下一篇介绍FreeMarker是如何做网页静态化:https://blog.csdn.net/qq_44322555/article/details/103809504

谢谢欣赏!!!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44322555/article/details/103803821

智能推荐

Android Dependencies包_cao12345cong的博客-程序员宅基地

最近项目中,习惯把第三方包放到libs包中,然后add to Build patheclipse,工程上自动添加ReferenceLibrary ,或者use as source folder ,但是运行的时候,使用这两种方法,总有些包要报出如NoClassDefFoundError之类的异常,认识了Android Dependencies后,问题迎刃而解。一、Android De

Centos install Parosid_你狗的博客-程序员宅基地

SELinux and Parosid To run the VisualEditor and Parsoid on a CentOS7-Server, you need to do the following. The requirement is a working MediaWiki (min. V1.25.x) setup. (Crate a LAMP setup on Cen...

Python学习笔记(matplotlib实战篇)--函数积分图_weixin_30258901的博客-程序员宅基地

Python学习笔记--函数积分图  参靠视频:《Python数据可视化分析 matplotlib教程》链接:https://www.bilibili.com/video/av6989413/?p=6所用的库及环境:  IDE:Pycharm  Python环境:python3.7  Matplotlib: Matplotlib 1.11  Numpy: Numpy1...

所谓完整的linux系统包括哪些部分呢?【转】_饭小粒的博客-程序员宅基地_一个完整的linux操作系统包括什么

简介:三部分:bootloader、linux kernel(linux内核)、rootfile(根文件系统)。 那么这3部分是怎么相互协作来构成这个系统的呢?各自有什么用呢?三者有什么联系?怎么联系?系统的执行流程又是怎么样的呢?搞清楚这个问题你对整个系统的运行就很清楚了,对于下一步制作这个linux系统就打下了另一个重要的根基。下面是笔者针对网上bootloader、linuxkernel(linux内核)、rootfile(根文件系统),三者关系的一个总结,包括提问和回答。1.LI..

[JAVA] java_实例 获得系统字体_weixin_30635053的博客-程序员宅基地

这个代码可以帮助理解java是如何获取系统字体并设置文字字体: 1 import java.awt.*; 2 import java.awt.event.*; 3 4 import javax.swing.JComboBox; 5 import javax.swing.JFrame; 6 import javax.swing.JLabel; 7 8 pu...

棒棒糖(结构体)(类似前面循环的上树问题)_丿mfdsk丶的博客-程序员宅基地

题目描述新年快到了,计算机学院新年晚会正在筹备中,今年有一个新创意:来参加晚会的所有学生都有礼物(一根棒棒糖)。老师把买棒棒糖的任务交给小明了,并指定了要买的棒棒糖的品牌和品种。俗话说得好,货比三家不吃亏。小明来到了商店,看了各个店铺里这种棒棒糖的价格,不仅如此,他还记住了每个店铺的存货量。已知小明打算购买n根棒棒糖,问他最少要花多少钱?输入第一行输入一个整数n,表示要购买的棒棒糖数量;第二...

随便推点

js中如何解决跨域问题_前端菜鸟10086的博客-程序员宅基地_js解决跨域的三种方法

首先介绍一下js的同源策略同源策略是浏览器的一项安全策略,浏览器只允许js 代码请求和当前所在服务器域名,端口,协议相同的数据接口上的数据,这就是同源策略.也就是说,当协议、域名、端口任意一个不相同时,都会产生跨域问题,所以又应该如何解决跨域问题呢?以下是三种解决跨域问题的方法:Jsonp--- 只能处理get请求,且不是ajax请求jsonp跨域的原理是什么?动态在页面中创建一个script标签,使其src属性指向后端数据接口,也就是说,script会发送一个get请求到sr.

Web开发野蛮生长的这17年_摇摇马骑骑的博客-程序员宅基地

关于 NodeConfBPNodeConfBP 会议于 2017 年 1 月在布达佩斯召开,本次会议为期一天,只有一个演讲室,由 RisingStack - the Node.js Consulting & Development Company 组织并提供赞助。下面你将会从第一人称视角感受到一个近乎完美的风格化的会议记录:认识下 Daniel KhanDy

Ti BAII Plus常用快捷键_我是干勾鱼的博客-程序员宅基地

转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/121189651本文出自【我是干勾鱼的博客】Ti BAII Plus从普通的End模式转换到BGN的模式2nd PMT2nd Enter2nd CPT注意从End模式转换成BGN模式计算完之后一定要转换回来,否则后面的计算会出错。...

java观察者模式类图,吊打面试官系列!_普通网友的博客-程序员宅基地

内容简介:本书一共15章,核心内容为SpringBoot、SpringCloud、Docker、RabbitMQ消息组件。其中,SpringBoot是SpringMVC技术的延伸,使用它进行程序开发会更简单,服务整合也会更容易。SpringCloud是当前微架构的核心技术方案,属于SpringBoot的技术延伸,它可以整合云服务,基于RabbitMQ和 GITHUB进行微服务管理。除此以外,本书还重点分析了OAuth统一认证服务的应用。由于笔记的内容太多,没办法全部展示出来,在此只截取部分内容展示。

RedHat6.4安装Elasitcsearch5.2.0_mvpboss1004的博客-程序员宅基地

RedHat6.4安装配置Elasitcsearch5.2.0elastic的5.2.0版本最近刚刚发布,相比之前版本变动很大,而且其中的所有组件(包括Elasticsearch、Kibana、X-Pack等)都统一到了5.2.0版本。为避免兼容性问题,建议所有组件都使用5.2.0版本。 本文使用环境:elastic 5.2.0套件+RedHat 6.4 64bit,也适用于CentOS。1. 下

MAC 环境变量的加载顺序和设置环境path_Action_Wang的博客-程序员宅基地

理论篇Mac系统的环境变量,加载顺序为:/etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc/etc/profile和/etc/paths是系统级别的,系统启动就会加载,后面几个是当前用户级的环境变量。后面3个按照从前往后的顺序读取,如果/.bash_profile文件存在,则后面的几个文件就会被忽略不读了,如果/.bash_profile文件不存在,才会以此类推读取后面的文件。~/.bashrc没有上

推荐文章

热门文章

相关标签