侧边栏壁纸
博主头像
CoderKui

坐中静,舍中得,事上练

  • 累计撰写 51 篇文章
  • 累计创建 69 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

开源 | 讨论社区项目开发文档及源码

CoderKui
2021-11-21 / 0 评论 / 0 点赞 / 272 阅读 / 2,264 字 / 正在检测是否收录...

程序员讨论社区

gitee开源链接

一、技术架构

  • Spring Boot
  • Spring 、SpringMVC、Mybatis
  • Redis、Kafka、Elasticsearch
  • Spring Security、Spring Actuator

前端:html、css、js、thymeleaf模版引擎

后端:spring、springmvc、mybatis 后期过渡到springboot

数据库:mysql、redis

中间件:kafka、elasticsearch

二、搭建开发环境

  1. Apache Maven

    负责构建项目、管理项目中的jar包

  2. IntelliJ IDEA

    Java集成开发工具

三、开发具体功能

  1. 首页模块

  2. 注册模块

    1. 发送邮件功能

      • 邮箱设置:启用客户端SMTP服务
      • Spring Email:使用JavaMailSender发送邮件
      • 模版引擎:使用Thymeleaf发送HTML邮件
    2. 注册功能详细流程

      • 访问注册页面
      • 提交注册数据(表单提交数据》服务端验证账号是否已经存在以及邮箱是否已经被注册〉服务端发送激活邮件)
      • 激活注册账号(点击邮件中的链接,访问服务端的激活服务)
  3. 登陆模块

    1. 会话管理

      Cookie,由于服务器发送到浏览器,并保存在浏览器的一小块数据

      浏览器下次访问该服务器时,会携带该cookie给服务器

      Session,是JavaEE的标准,用于在服务端记录客户端的信息,数据存放在服务端更加安全,但是也会增加服务端的内存压力

    2. 生成验证码

      Kaptcha

      导入jar包

      编写Kaptcha配置类

      生成随机字符、生成图片

    3. 开发登录、退出功能

      1. 访问登录页面
      2. 登录(验证账号、密码、验证码=》成功生成登录凭证发给客户端,失败跳回登录页)
      3. 退出(将登陆凭证修改为失效状态=〉跳转至网站首页)
    4. 显示登录信息

      拦截器应用

      在请求开始时查询登录用户

      在本次请求中持有用户数据

      在模版视图上显示用户数据

      在请求结束时清理用户数据

    5. 账号设置

      • 修改头像

        上传文件:

        请求:必须是POST请求

        表单:enctype = “multipart/form-data”

        Spring MVC:通过MultipartFile处理上传文件

      • 修改密码

四、开发核心功能

To do

修改密码、删除私信

  1. 过滤敏感词

    用前缀树构建敏感词过滤器

  2. 发布帖子

    使用AJAX实现异步请求

    用AJAX请求,实现发布帖子的功能

  3. 帖子详情

    显示标题、作者、发布时间、帖子正文等内容

  4. 事务管理

  5. 显示评论

  6. 添加评论--运用事务管理

    数据层:

    增加评论数据

    修改帖子的评论数量

    业务层:

    处理添加评论的业务:

    先增加评论、在更新帖子的评论数

    表现层:

    处理添加评论数据的请求

    设置添加评论的表单

  7. 私信列表

    私信列表:

    查询当前用户的会话列表

    每个会话只显示一条最新的私信

    支持分页显示

    私信详情:

    查询某个会话所包含的私信

    支持分页显示

  8. 发送私信

    发送私信:

    采用异步的方式发送私信

    发送成功后刷新私信列表

    设置已读:

    访问私信详情

    将显示的私信设置为已读状态

  9. 统一异常处理

    @ControllerAdvice

    用于修饰类,表示该类是Controller的全局配置类

    在此类中,可以对Controller进行如下三种配置:

    异常处理方案、绑定数据方案、绑定参数方案

    @ExceptionHandler

    用于修饰方法,该方法会在Controller出现异常后被调用,用于处理捕获后的异常

    @ModelAttribute

    用于修饰方法,该方法会在Controller方法执行前被调用,用于为model对象绑定参数

    @DataBinder

    用于修饰方法,该方法会在Controller方法执行前被调用,用于绑定参数的转换器

  10. 统一记录日志

    AOP 面相切面的实现

    AOP实现:

    1.ASpectJ

    是语言级实现,扩展了Java语言,定义了AOP语法

    是在编译期织入的代码,它有一个专门的编译器,用来生成遵守java字节码规范的class文件

    2.Spring AOP

    使用纯java实现,它不需要专门的编译过程,也不需要特使的类装载器

    在运行时通过代理的方式织入代码,只支持方法类型的连接点

    Spring支持对AspectJ的集成

    而Spirng AOP采用代理只如,代理有两种方式:

    1.JDK动态代理

    Java提供的动态代理技术,可以在运行时创建接口的代理实例

    SPring AOP默认采用此方式,在借口的代理实例中织入代码

    2.CGLib动态代理

    采用底层的字节码技术,在运行时创建子类代理对象

    当目标对象不存在接口时,Spring AOP会采用此种方式,在子类实例中织入代码

四、整合Redis开发点赞与粉丝模块

  1. 为什么选择Redis

    • Redis是一款基于键值对的NoSQL数据库,它的值支持多种数据结构,字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有续集合(sorted sets)等
    • Redis将所有的数据都存放在内存中,所以它的读写性能十分惊人,同时,Redis还可以将内存中的数据以快照或日志的形式保存到硬盘上,以保证数据的安全性
    • Redis典型的应用场景包括:缓存、排行榜、计数器、社交网络、消息队列等
  2. 点赞功能的开发

    • 点赞:

      支持对帖子、评论点赞

      第1次点赞,第2次取消点赞

    • 首页点赞数量

      统计帖子的点赞数量

    • 详情页点赞数量

      统计点赞数量

      显示点赞状态

  3. 用户个人中心统计收到的赞

    重构点赞功能

    开发个人主页

    以用户为key,记录点赞数量

  4. 关注、取消关注

    需求:

    • 开发关注、取消功能
    • 统计用户的关注数、粉丝数
  5. 关注列表、粉丝列表

    • 业务层

      查询某个用户关注的人,支持分页

      查询某个用户的粉丝,支持分页

    • 表现层

      处理“查询关注的人”、“查询粉丝”请求

      编写“查询关注的人”、“查询粉丝“模板

五、优化登录模块

  • 使用Redis存储验证码
    • 验证码需要频繁的访问与刷新,对性能要求较高
    • 验证码不需要永久保存,通常在很短的时间后就会失效
    • 分布式部署时,存在Session共享问题
  • 使用Redis存储登录凭证
    • 处理每次请求时,都要查询用户的登录凭证,访问的频率较高
    • 对数据库IO请求较多,故用Redis做优化
  • 使用Redis缓存用户信息
    • 处理每次请求时,都要根据凭证查询用户信息,访问的频率较高
    • 用Redis对用户信息作缓存,减少服务器压力

六、整合Kafka实现消息通知

  1. 阻塞队列

    • BlockingQueue
      • 解决线程通信的问题
      • 阻塞方法:put、take
    • 生产者消费者模式
      • 生产者:产生数据的线程
      • 消费者:使用数据的线程
    • 实现类
      • ArrayBlockingQueue
      • LinkedBlockingQueue
      • PriorityBlockingQueue、SynchronousQueue、DelayQueue
  2. Kafka入门

    • Kafka简介
      • 是分布式的流媒体平台
      • 应用:消息系统、日志收集、用户行为追踪、流式处理
    • Kafka特点
      • 高吞吐量、消息持久化、高可靠性、高扩展性
    • Kafka术语
      • Broker(服务器)、Zookeeper(管理集群)
      • Topic、Partition、Offset
      • Leader Repplica、 Follower Replica
  3. 发送系统通知

    • 触发事件
      • 评论后,发布通知
      • 点赞后,发布通知
      • 关注后,发布通知
    • 处理事件
      • 封装事件对象
      • 开发事件的生产者
      • 开发事件的消费者
  4. 显示系统通知

    • 通知列表
      • 显示评论、点赞、关注三种类型的通知
    • 通知详情
      • 分页显示某一类主题所包含的通知
    • 未读消息
      • 在页面头部显示所有的未读消息数量

七、整合Elasticsearch开发搜索功能

  • 简介
    • 一个分布式的、Restful风格的搜索引擎
    • 支持对各种类型的数据的检索
    • 搜索速度快,提供实时的搜索服务
    • 便于水平扩展,每秒可以处理pb级海量数据
  • 术语
    • 索引、类型、文档、字段
    • 集群、节点、分片、副本
0

评论区