freemarker+minio实现页面静态化
什么是页面静态化?
将原本动态生成的网页内容通过某种形式转化为html并存储在服务器上,当用户请求这些页面时就不需要执行逻辑运算和数据库读
优点:
- 性能:提高页面加载速度和响应速度,还可以减轻数据库、服务器的负担
- 安全性:不涉及服务器端脚本执行,减少因代码漏洞而被攻击的风险
实现步骤:通过freemarker生成固定模板->将模板写入minIO->读取
1.freemarker生成固定模板
public File generateCourseHtml(Long courseId) {
//配置freemarker
Configuration configuration = new Configuration(Configuration.getVersion());
File htmlFile=null;
try {
//加载模板
//选指定模板路径,classpath下templates下
//得到classpath路径
String classpath = this.getClass().getResource("/").getPath();
configuration.setDirectoryForTemplateLoading(new File(classpath + "/templates/"));
//设置字符编码
configuration.setDefaultEncoding("utf-8");
//指定模板文件名称
Template template = configuration.getTemplate("course_template.ftl");
//准备数据。这里model使用map
CoursePreviewDto coursePreviewInfo = getCoursePreviewInfo(courseId);
Map<String, Object> map = new HashMap<>();
map.put("model", coursePreviewInfo);
//静态化
//参数1:模板,参数2:数据模型
String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
//将静态化内容输出到文件中
InputStream inputStream = IOUtils.toInputStream(content);
htmlFile = File.createTempFile("course", ".html");
//输出流
FileOutputStream outputStream = new FileOutputStream(htmlFile);
IOUtils.copy(inputStream, outputStream);
} catch (Exception e) {
throw new RuntimeException(e);
}
if(htmlFile==null){
throw new XueChengPlusException("生成静态文件失败");
}
return htmlFile;
}
2.minIO写入:这里规定是两个功能属于不同模块,使用feign进行调用
feign接口
/**
* 远程调用媒资的接口
*/
@FeignClient(value = "media-api",configuration = MultipartSupportConfig.class,fallbackFactory = MediaServiceClientFallback.class)
public interface MediaServiceClient {
@RequestMapping(value = "/media/upload/coursefile",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String uploadCoursefile(@RequestPart("filedata") MultipartFile filedata,
@RequestParam(value="objectName",required = false)String objectName
) throws IOException;
}
minIO上传controller
@ApiOperation("上传文件接口")
@RequestMapping(value = "/upload/coursefile",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public UploadFileResultDto uploadCoursefile(@RequestPart("filedata")MultipartFile filedata,
@RequestParam(value="objectName",required = false)String objectName
) throws IOException {
File tempFile=File.createTempFile("minio", ".temp");
filedata.transferTo(tempFile);
String absolutePath = tempFile.getAbsolutePath();
return mediaFileService.upload(filedata,absolutePath,objectName);
}
minIO上传实现service。注:下文的filename即absolutePath;object需要指定具体路径,例如我使用了上文的objectName+“//”+filedata.getOriginalFilename()
public boolean uploadToMinio(String bucket, String filename, String object, String mimeType) {
try {
minioClient.uploadObject(
UploadObjectArgs.builder()
.bucket(bucket)
.filename(filename)
.object(object)
.contentType(mimeType)
.build()
);
log.info("文件上传成功:{}", object);
return true;
} catch (Exception e) {
log.error("上传文件到minio失败:{}", e.getMessage());
}
return false;
}
freemarker+minio实现页面静态化的更多相关文章
- 页面静态化技术Freemarker技术的介绍及使用实例.
一.FreeMarker简介 1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效 ...
- Spring MVC 学习总结(七)——FreeMarker模板引擎与动态页面静态化
模板引擎可以让程序实现界面与数据分离,业务代码与逻辑代码的分离,这就提升了开发效率,良好的设计也使得代码复用变得更加容易.一般的模板引擎都包含一个模板解析器和一套标记语言,好的模板引擎有简洁的语法规则 ...
- JavaWeb页面静态化之使用freemarker模板生成一个html静态页面
题外话: 页面静态化(展示数据从JSP页面变成HTML页面)实现方式-->模板技术 从本质上来讲,模板技术是一个占位符动态替换技术.一个完整的模板技术需要四个元素:①模板语言(使 ...
- SpringBoot2 整合FreeMarker模板,完成页面静态化处理
本文源码:GitHub·点这里 || GitEE·点这里 一.页面静态化 1.动静态页面 静态页面 即静态网页,指已经装载好内容HTML页面,无需经过请求服务器数据和编译过程,直接加载到客户浏览器上显 ...
- freemark 页面静态化
1. 页面静态化是什么? 页面静态化有非常多含义,在WEB开发中.静态网页一般理解为站点中大部分超级链接所引用的页面是单独的HTML静态页面文件(如.htm..html等页面文件,html语言本身是静 ...
- fastDFS shiro权限校验 redis FreeMark页面静态化
FastDFS是一个轻量级分布式文件系统, 使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传.下载等服务 FastDFS服务端有两个角色:跟踪器(tracker)和存储节点( ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_16-页面静态化-模板管理-模板制作
这是轮播图的原始文件 运行门户需要把 nginx启动起来 单独运行轮播图.把里面的css的引用都加上网址的url 这就是单独访问到的轮播图的效果 轮播图模板的地址: 阶段5 3.微服务项目[学成在线] ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_09-freemarker基础-内建函数
可以理解为freemaker提供的一些函数和方法 controller里面记得把map的数据注释去掉,.放开代码 工程需要重启下 <br/> 学生的个数: ${stus?size} < ...
- JSP页面静态化
Ps:好久没写博客了,不是我太懒,是因为苦逼的我出差去上海了,天天加班 刚回成都.... 今天说说jsp页面静态化,知道静态化的朋友都不陌生,说白了就是访问后缀是html 而不是jsp. 没听说过静态 ...
- 大型网站提速关键技术(页面静态化,memcached,MySql优化)(三)
页面静态化的技术实现有两种方式 使用PHP自己的缓存机制 先说明一下OB缓存的机制. ob1.php 代码:说明的ob的各个用法->项目中 ☞ 如何打开ob缓存 ① 配置php.ini ...
随机推荐
- 一个 .NET 开源的地图组件库 - Mapsui
前言 今天大姚给大家分享一个.NET开源(MIT License).免费.同时支持多平台框架(MAUI.WPF.Avalonia.Uno.Blazor.WinUI.Eto..NET Android 和 ...
- grafan+cadvisor+prometheus监控docker
grafan+cadvisor+prometheus监控docker: 运行cadvisor: docker run \ --volume=/:/rootfs:ro \ --volume=/var/r ...
- 《剑指offer - 题目1》
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- iOS 后台录音Tweak实现参考--stackoverflow
up vote9down voteaccepted +50 "Audio Recorder" is indeed a very simple tweak. The author t ...
- vue绑定下拉框 vue修饰符
<select v-model="selected"> <option>请选择</option> <option>HTML</ ...
- window.onload()函数和jQuery中的document.ready()有什么区别?
a.执行时间:window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行.$(document).ready()是DOM结构绘制 完毕后就执行,不必等到加载完毕.$(doc ...
- pyenv-win 替换国内镜像源
前情提要 今天心血来潮想学一学python 然后因为python版本众多,了解到了pyenv这个python版本管理器 在github下载好pyenv以后,打算先安装一个稳定的版本 pyenv ins ...
- 图片预加载需要token认证的地址处理
1.添加函数修改img的属性: /** * * @param {*} idName 传入的id,获取改img的dom,添加相应的数学 */ export const proxyImg = (idNam ...
- 父类和子类对象的获取值的方式验证,通过父类属性的方式获取不到值,需要使用get方法
父类和子类对象的获取值的方式验证,通过父类属性的方式获取不到值,需要使用get方法 静态属性通过类.属性的方式获取,对象获取使用get方法获取 package com.example.core.myd ...
- gradle dependencies 查找jar导入OR解决jar冲突
在gradle项目中,使用gradle dependencies先查询jar包的导入关系.然后找到导入的jar加入到项目中来.解决jar冲突等问题. 类似格式如下: annotationProcess ...