『技术派实战』第二期:工程结构和技术选型

881 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情

往期回顾

『技术派实战』第一期:我的网站上线了

前言

在上一期中,介绍 技术派 网站的基本情况,简单列出了前后端的技术特点。今天继续详细拆解做这样一个资源聚合类的网站需要哪些技术栈。

工程结构

项目整体使用了 SpringBoot + Maven 的黄金组合。

image.png

一个大的maven工程分成3个子module,其中2个hunterweb模块是web工程,support模块是普通Java工程。

模块作用
hunter负责数据采集、数据分析、数据聚合、数据持久化
web包含前端代码和后端接口,负责网站的整体页面展示
support支撑模块,提供公共组件,比如常量类、工具类、基类、枚举类、模型对象等
blog规划中,以单独部署的服务来提供网站的博客服务

技术选型

前端

项目没有使用前后端分离的架构,前端采用了Bootstrap响应式的页面框架,通过在Springboot项目中集成Thymeleaf模板引擎的方式渲染HTML页面。

Tips:

对于非前端专业的开发者,在网上挑选合适的Bootstrap模板,下载到本地,把html文件和其他静态文件导入到Springboot工程中,将html中的静态数据替换成接口返回的数据,可以达到事半功倍的效果。

image.png

如上图

  1. 静态资源分类放到static目录下
  2. html文件放到templates目录下
  3. 公共页面如header、footer放到templates/common目录下
  4. 错误页面如404、500放到templates/error目录下

后端

hunter

hunter 工程主要用到了各种数据采集的工具。

技术派主要是提供网络上各个平台的优质资源的信息展示,以链接跳转方式访问原页面。

从技术派的定义可以分析出,这样一个网站要做的第一步就是数据采集。

根据各技术类平台采集数据的难易程度(开放程度)不同,可以大概分成四类数据源:

  1. 最易获取:提供 Open API
  2. 较易获取:提供 RSS源或Feed源
  3. 较难获取:前后端分离平台,可以通过开发者模式获取到Api接口
  4. 最难获取:通过模板引擎渲染页面,可以页面解析器获取页面数据

第一种情况,用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 哟😇😇