一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情。
往期回顾
前言
在上一期中,介绍 技术派 网站的基本情况,简单列出了前后端的技术特点。今天继续详细拆解做这样一个资源聚合类的网站需要哪些技术栈。
工程结构
项目整体使用了 SpringBoot + Maven 的黄金组合。
一个大的maven工程分成3个子module,其中2个hunter和web模块是web工程,support模块是普通Java工程。
模块 | 作用 |
---|---|
hunter | 负责数据采集、数据分析、数据聚合、数据持久化 |
web | 包含前端代码和后端接口,负责网站的整体页面展示 |
support | 支撑模块,提供公共组件,比如常量类、工具类、基类、枚举类、模型对象等 |
blog | 规划中,以单独部署的服务来提供网站的博客服务 |
技术选型
前端
项目没有使用前后端分离的架构,前端采用了Bootstrap响应式的页面框架,通过在Springboot项目中集成Thymeleaf模板引擎的方式渲染HTML页面。
Tips:
对于非前端专业的开发者,在网上挑选合适的Bootstrap模板,下载到本地,把html文件和其他静态文件导入到Springboot工程中,将html中的静态数据替换成接口返回的数据,可以达到事半功倍的效果。
如上图
- 静态资源分类放到static目录下
- html文件放到templates目录下
- 公共页面如header、footer放到templates/common目录下
- 错误页面如404、500放到templates/error目录下
后端
hunter
hunter 工程主要用到了各种数据采集的工具。
技术派主要是提供网络上各个平台的优质资源的信息展示,以链接跳转方式访问原页面。
从技术派的定义可以分析出,这样一个网站要做的第一步就是数据采集。
根据各技术类平台采集数据的难易程度(开放程度)不同,可以大概分成四类数据源:
- 最易获取:提供 Open API
- 较易获取:提供 RSS源或Feed源
- 较难获取:前后端分离平台,可以通过开发者模式获取到Api接口
- 最难获取:通过模板引擎渲染页面,可以页面解析器获取页面数据
第一种情况,用HttpClient直连的方式,组装请求参数调用 Open API即可。
第二种情况,使用RSS或Feed源解析工具,技术派使用的Rome。
第三种情况,用HttpClient直连的方式,组装请求参数调用API即可。
第四种情况,用页面解析工具,技术派使用的老牌HTML解析器Jsoup和Web自动化工具Selenium。
墙裂推荐一下Selenium,不仅是测试同学要学会Web自动化测试,开发同学也可以用来开发一些自动化流程,提升工作效率。
web
web 工程主要提供页面所需的接口和邮箱订阅的推送能力。
具体代码不详细讲了,都是基本的业务代码,这里列一下最容易弄错的邮件和thymeleaf的配置。
1. 邮件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
spring:
mail:
default-encoding: utf-8
host: smtp.qq.com
port: 587
username: xxxxx@xxx.com # 发送邮件的邮箱
password: 1234567891234567 # 16位授权码
properties:
mail:
smtp:
auth: true
socketFactory:
class: javax.net.ssl.SSLSocketFactory
starttls:
enable: true
protocol: smtp
2. Thymeleaf 模板引擎
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
spring:
thymeleaf:
cache: true
check-template: true
check-template-location: true
enabled: true
encoding: UTF-8
excluded-view-names: ''
mode: HTML
prefix: classpath:/templates/
suffix: .html
mvc:
static-path-pattern: /static/** # 静态资源路径
下期预告
在下一期中,详细讲解技术派用到的限流、重试、缓存、定时任务等技术。
喜欢的同学请多多点赞,多多收藏我的网站 www.jspai.cc 哟😇😇