实时抓取网页数据(【干货】网页静态化的几种常见问题及解决方法)
优采云 发布时间: 2021-12-21 05:05实时抓取网页数据(【干货】网页静态化的几种常见问题及解决方法)
一、 静态页面
1、 动态和静态页面
静态页面
即静态网页是指加载了内容的HTML页面,直接加载到客户端浏览器上显示,不经过请求服务器数据和编译的过程。通俗的说就是生成一个独立的HTML页面,不需要与服务器进行数据交互。
优缺点说明:
动态页面
指一种网页编程技术,而不是静态网页。页面内容需要由服务器获取。在不考虑缓存的情况下,服务接口的数据发生变化,页面加载的内容也会实时发生变化,但显示的内容是数据库操作动态变化的结果。
优缺点说明:
动态页面和静态页面有很强的相关性,比较起来更容易理解。
2、应用场景
动态页面的静态处理有很多应用场景,例如:
静态技术基础:提示服务的响应速度,或者提前做好响应节点,比如一般流程、页面(客户端)请求服务、服务处理、响应数据、页面加载等一系列流程不仅复杂,而且耗时,如果基于静态技术处理后直接加载静态页面,则请求结束。
二、过程分析
静态页面转换是一个比较复杂的过程,核心过程如下:
主要流程大致如上。如果数据接口的响应参数发生变化,需要重新生成静态页面,因此数据加载的实时性会低很多。
三、代码实现案例
1、基本依赖
FreeMarker 是一个模板引擎:一个基于模板和要更改的数据的通用工具,用于生成输出文本(HTML 网页、电子邮件、配置文件、源代码等)。
org.springframework.boot
spring-boot-starter-freemarker
2、页面模板
这里都使用了 FreeMarker 开发的模板样式。
PageStatic
主题:${myTitle}
作者:${data.auth} 日期:${data.date}
规格描述
产品详情
${info.desc}
${info.imgUrl}
${imgIF}
FreeMarker 的语法与原来的 HTML 语法基本一致,但有自己的一套数据处理标签,使用起来并不复杂。
3、分析过程
通过分析,可以将页面模板和数据接口数据合并在一起。
@Service
public class PageServiceImpl implements PageService {
private static final Logger LOGGER = LoggerFactory.getLogger(PageServiceImpl.class) ;
private static final String PATH = "/templates/" ;
@Override
public void ftlToHtml() throws Exception {
// 创建配置类
Configuration configuration = new Configuration(Configuration.getVersion());
// 设置模板路径
String classpath = this.getClass().getResource("/").getPath();
configuration.setDirectoryForTemplateLoading(new File(classpath + PATH));
// 加载模板
Template template = configuration.getTemplate("my-page.ftl");
// 数据模型
Map map = new HashMap();
map.put("myTitle", "页面静态化(PageStatic)");
map.put("tableList",getList()) ;
map.put("imgList",getImgList()) ;
// 静态化页面内容
String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
LOGGER.info("content:{}",content);
InputStream inputStream = IOUtils.toInputStream(content,"UTF-8");
// 输出文件
FileOutputStream fileOutputStream = new FileOutputStream(new File("F:/page/newPage.html"));
IOUtils.copy(inputStream, fileOutputStream);
// 关闭流
inputStream.close();
fileOutputStream.close();
}
private List getList (){
List tableInfoList = new ArrayList() ;
tableInfoList.add(new TableInfo(Constant.desc1, Constant.img01));
tableInfoList.add(new TableInfo(Constant.desc2,Constant.img02));
return tableInfoList ;
}
private List getImgList (){
List imgList = new ArrayList() ;
imgList.add(Constant.img02) ;
imgList.add(Constant.img02) ;
return imgList ;
}
}
生成的HTML页面可以直接用浏览器打开,不再需要依赖任何数据接口服务。
四、源码地址
GitHub·地址
GitEE·地址
以上就是文章关于SpringBoot2集成FreeMarker实现页面静态化示例的介绍。更多SpringBoot2集成FreeMarker实现页面静态内容相关相关内容,请搜索之前的文章面圈教程或继续浏览下方相关文章,希望大家多多支持面条教程未来!