> 文章列表 > 仿牛客网社区Web开发项目代码逐行精读(更新中)

仿牛客网社区Web开发项目代码逐行精读(更新中)

仿牛客网社区Web开发项目代码逐行精读(更新中)

仿牛客网社区Web开发项目

    • 怎么看项目?
    • 如何调试
    • 项目前瞻
      • 技术架构
      • 项目亮点
    • 开始看代码
      • LoginController
      • DiscussPostController

怎么看项目?

  1. pom.xml看技术架构
  2. resource看配置文件,这个项目是前后端不分离的
  3. 以调试为导向,从前端入手检查
  4. 先看controller,只做调用;调用service,实现具体业务;service还会调用其他service
  5. 后看dao,这个项目是dataSource,与数据库相关
  6. 深入源码

如何调试

  1. 网页检查,看NetworkHeader是发送的请求,Preview是响应信息
  2. 找到接口,如:Login
  3. 找到该接口的.java文件,打断点调试,查看所带参数
  4. 再进到方法中,打断点,F8执行到下一断点

项目前瞻

技术架构

  • 核心框架:SpringBoot SSM
  • 持久层框架:Mybatis
  • 日志管理:SLF4J
  • 模板框架: ElasticSearch
  • 项目管理框架: Maven
  • 消息队列:Kafka
  • 缓存框架:Redis
  • 其他:Spring Security、Quatz、Caffeine

项目亮点

参考文章

  • 项目构建在Spring Boot+SSM框架之上,并统一的进行了状态管理、事务管理、异常处理;
  • 利用Redis实现了点赞和关注功能;
  • 利用Kafka实现了异步的站内通知;
  • 利用ElasticSearch实现了全文搜索功能,可准确匹配搜索结果,并高亮显示关键词;
  • 利用Caffeine+Redis实现了两级缓存,并优化了热门帖子的访问。
  • 利用Spring Security实现了权限控制,实现了多重角色、URL级别的权限管理;
  • 利用HyperLogLog、Bitmap分别实现了UV、DAU的统计功能,100万用户数据只需*M内存空间;
  • 利用Quartz实现了任务调度功能,并实现了定时计算帖子分数、定时清理垃圾文件等功能;
  • 利用Actuator对应用的Bean、缓存、日志、路径等多个维度进行了监控,并通过自定义的端点对数据库连接进行了监控。

开始看代码

启动zookeeper

bin\\windows\\zookeeper-server-start.bat config\\zookeeper.properties

启动server

bin\\windows\\kafka-server-start.bat config\\server.properties

LoginController

  1. 首先,总体上看看这个Controller包含哪些模块:
    • 未登录前,可以点击按钮得到注册和登录界面
    • 注册功能模块
    • 激活用户
    • 验证码模块
    • 检查账号密码
    • 登出
  2. Get、Post与Put
    • POST /url 创建
    • DELETE /url/xxx 删除
    • PUT /url/xxx 更新
    • GET /url/xxx 查看
  3. 注册功能模块先调用userService,userService:
    • 初始化一个HashMap,用于存放提示信息
    • 先进行空值处理,若参数为空直接返回
    • 调用userMapper,通过查询检查用户名和邮箱是否已经存在
    • 通过MD5算法对密码加密
    • 对User实体类创建的对象user,设置必要的数据,存入数据库
    • 通过TemplateEngine 和Context 的配合,使用thymeleaf模版来生产html文件
    • 调用MailClient工具类发送邮件,即上一步生成的html文件
  4. 激活模块调用userService,用不同数值来表示不同激活状态
  5. 验证码模块:
    • 服务器通过Cookie将验证码和用户标识发送给浏览器
    • 将验证码放入Redis,设置过期时间60s
    • 通过字节流向浏览器传输图片
  6. 检查账号密码:
    • 对密码进行md5加密,判断是否正确
    • 生成登录凭证,并将其存入Redis
    • 将登录凭证通过Cookie发送给浏览器

DiscussPostController

  1. 首先,总体上看看这个Controller包含哪些模块:

    • 发帖
    • 获取帖子详情页面
    • 置顶
    • 加精
    • 删帖
  2. 发帖模块:

    • 先创建DiscussPost实体对象

    • 调用discussPostService

      • discussPostService调用sensitiveFilter过滤敏感词,原理
    • 创建Event实体对象

      • 设置主题类型:有六种:评论、点赞、关注、分享长图、发帖、删帖。此处是发帖
      • 设置实体类型,有三种:帖子、评论、用户。此处是帖子
    • 调用eventProducer,生产者发布消息

    • 把帖子放入Redis中

  3. 获取帖子详情页面:

    • 查询帖子,根据帖子查询作者
    • 调用likeService查询点赞数量和当前用户对这个帖子的点赞状态
    • 遍历评论列表,创建评论VO(Value Object)列表,这个列表是要给用户看的。将查询到的数据put到Map,再add到List,最后放入model中。model中存放了数据,再经过渲染得到View,呈现给用户,这不就体现了Spring MVC嘛!
  4. 置顶、加精和删帖:

    • 设置不同的类型和主题,发布事件