Java实现小型博客系统
本项目基于SpringBoot、Dubbo、Zookeeper、Redis、MySQL实现了一个分布式博客系统。功能包括账号的增删改查、文章的增删改查、文章评论的增删改查、热点文章的存取、文章的点赞等。
项目地址:https://github.com/ZhangHZ9802/MyLittleBlogSystem-Java-
(看过我之前文章的朋友们应该能看出这是我对之前项目的重构。主要改变有:优化了前端的界面、优化了前后端的交互、取消了数据库的外键由应用层实现数据库的逻辑关系、禁止重复登录变成挤掉之前登录者、优化了数据库向上提供的方法、优化了数据库的存取等)
主要功能实现介绍:
项目整体展示
欢迎界面:
登录界面:
用户主界面:
文章界面:
评论和点赞界面(在文章界面内):
项目启动
项目是基于SpringBoot和Dubbo、Zookeeper实现的分布式项目,但当然也可以在一个主机上运行。项目的运行首先需要有Mysql数据库、Redis数据库和Zookeeper服务器的支持,MySQl数据库也需要提前建立好相应的库和表,建立过程见github。
启动时,需要先启动好Redis和Zookeeper服务器。首先启动provider-mysql,再启动provider-redis,最后启动客户端client即可正常运行。 访问localhost:8091即可进入博客。
项目的主要架构层次
本项目使用了三个服务器来实现后台。分别是client、provider-mysql和provider-redis。各个项目之间的联系如下:
主要实现功能:
- 账号:
a. 账号的注册、修改、删除
b. 账号的登录、登出
c. 账号防止重复登录
d. 不退出浏览器的时候可以延续之前的登录 - 文章:
a. 文章的撰写、存取
b. 文章的修改、删除 - 评论:
a. 评论的撰写、修改、删除 - 点赞:
a. 对文章的点赞、取消与统计
各个项目功能简介
api
定义了服务提供者provider分别提供的数据库功能的接口。
common
定义了远程方法调用时传递的公共对象类。
client
客户端提供前端页面与后端的交互,页面的跳转与内容的显示,通过Dubbo远程调用数据库的服务,获取并展示博客主要信息,并提供增删改的界面。
主要功能有:
- 接收并处理前端请求,调用数据库方法获取数据,返回页面给前端
- 拦截未登录情况下对除登录界面外的页面访问,拦截已经被挤掉的账号的请求(会检测redis中的userID和SessionID对,看当前用户的userID中存的SessionID是否为当前浏览器的sessionID,如果是则可以访问,不然则返回到登录界面)
- 监听所有HttpSession的消失事件(session消失则删除redis中记录的相关登录信息)。
相当于MVC三层架构的Controller层和View层。
provider-mysql
提供MySQL数据库的相关操作功能,实现账号、文章、评论的增删改查功能,并通过Dubbo将这些服务注册到Zookeeper上供客户端使用。
相当于MVC三层架构的Model层。
数据库
注意:这里的数据库之间没有使用外键,数据库之间的逻辑关系都是在应用层实现的。
(外键会使得本来就比较复杂的数据库更加错综复杂,难以维护;对数据库的性能有较大的影响,在高并发的时候尤为突出;容易出现死锁)
CREATE DATABASE zhz_blog;
CREATE TABLE user_account(
user_id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
user_account VARCHAR(20) NOT NULL UNIQUE,
user_password VARCHAR(20) NOT NULL
);