Java实现小型博客系统

article/2025/9/11 12:59:31

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。各个项目之间的联系如下:
在这里插入图片描述

主要实现功能:

  1. 账号:
    a. 账号的注册、修改、删除
    b. 账号的登录、登出
    c. 账号防止重复登录
    d. 不退出浏览器的时候可以延续之前的登录
  2. 文章:
    a. 文章的撰写、存取
    b. 文章的修改、删除
  3. 评论:
    a. 评论的撰写、修改、删除
  4. 点赞:
    a. 对文章的点赞、取消与统计

各个项目功能简介

api

定义了服务提供者provider分别提供的数据库功能的接口。

common

定义了远程方法调用时传递的公共对象类。

client

客户端提供前端页面与后端的交互,页面的跳转与内容的显示,通过Dubbo远程调用数据库的服务,获取并展示博客主要信息,并提供增删改的界面。

主要功能有:

  1. 接收并处理前端请求,调用数据库方法获取数据,返回页面给前端
  2. 拦截未登录情况下对除登录界面外的页面访问,拦截已经被挤掉的账号的请求(会检测redis中的userID和SessionID对,看当前用户的userID中存的SessionID是否为当前浏览器的sessionID,如果是则可以访问,不然则返回到登录界面)
  3. 监听所有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
);
CREATE TABLE article_comments(comment_id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,comment_article_id INT NOT NULL,comment_owner VARCHAR(20) NOT NULL,comment_contents TEXT
);
CREATE TABLE user_articles(article_id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,article_name VARCHAR(50)NOT NULL,article_content TEXT,article_owner VARCHAR(20)
);

provider-redis

该项目提供Redis数据库的相关操作功能
同样通过Dubbo将这些服务注册到Zookeeper上供客户端使用。相当于Model层。

提供的功能包括:

  1. 对热点文章的缓存(在客户端请求文章内容时,先从Redis中寻找,如果没有找到则从MySQL中读取,并缓存到Redis中,为其设置一个随机的生存时间(30~60min)。当文章被修改或删除时,先修改数据库中内容,再将Redis缓存删除)
  2. 防止账户重复登录(在Redis中存userID和SessionID对,当同一个账号在另一个浏览器中登录时,会覆盖掉原有的SessionID。)
  3. 点赞功能(点赞与取消,文章点赞数的统计)

相关内容展示

前端页面的实现

前端主要使用Html和Thymeleaf实现。
一个典型的页面如下:
在这里插入图片描述

大部分的前端页面都是form表单进行请求与数据的传递,使用thymeleaf使得前端页面具有一定的动态性(如该页面中的callback和原账号),使用thymeleaf进行一些判断和循环遍历(在article页面中有,这里就不展示了)

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>修改您的账号信息</title>
</head>
<style type="text/css">h2,form{text-align: center;}h2{margin-top: 300px;}input{margin: 5px 5px;}body{background-image: url("/images/ice.jpg");}
</style>
<body>
<h2>修改您的账号信息</h2>
<form action="/zhz/editAccount" method="post">注意:如果不想修改某项,则直接空缺即可。<br/>原账号:<input type="text" th:value="${userAccount}" readonly><br/>新账号:<input type="text" name="newUserAccount"  placeholder="请输入您的新账号"><br/>原密码:<input type="password" name="userPassword" placeholder="请输入您的原始密码"><br/>新密码:<input type="password" name="newUserPassword1" placeholder="请输入您的新密码"><br/>新密码:<input type="password" name="newUserPassword2" placeholder="请再输入您的新密码"><br/><p th:text="${callback}"></p><input type="submit" value="确定"><input type="reset" value="重置">
</form></body>
</html>

账号的修改实现

数据库中不再有外键,数据库之间的逻辑关系需要由应用层的代码来实现。
(Redis数据库相关内容的联动不在这里考虑)

	@Override@Transactional//添加事务public void updateUserAccount(String account, String newAccount, String newPassword) {//先改密码再改账号,不然找不到账号if (newPassword != null) {userAccountMapper.updateUserPassword(account, newPassword);}if (newAccount != null) {//删除账号信息userAccountMapper.updateUserAccount(account, newAccount);//修改相关文章内容articlesMapper.updateArticleOwner(account, newAccount);//修改文章评论相关内容commentsMapper.updateCommentOwner(account,newAccount);}}

小结

更多的内容大家可以下载我的代码运行看看。github地址:https://github.com/ZhangHZ9802/MyLittleBlogSystem-Java-
如果大家对我的项目感兴趣并有疑惑或者想要指出我的问题也欢迎留言或者私信我。


http://chatgpt.dhexx.cn/article/4MD3Qa0H.shtml

相关文章

[JAVA]从零开始创建个人博客——环境搭建

目录 一、购买服务器 二、远程登陆 三、安装相关环境 四&#xff0c;springboot项目创建 一、购买服务器 可以买腾讯云或者阿里云&#xff0c;本文以腾讯云举例。 买第一个就可以。 购买之后界面如下&#xff0c;因为需要用到mysql,点击防火墙进行配置&#xff1a; 配置如下…

Java实现个人博客网站

说明&#xff1a;该项目是实验楼用户“LOU3165780622”发布在实验楼上的项目教程&#xff1a;【Java实现个人博客】&#xff0c;未经允许&#xff0c;禁止转载&#xff1b; 该项目利用 SSM 框架和 Mysql 以及一些简单的前端知识搭建一个自己的个人博客网站&#xff0c;网站功能…

25 篇 Java 入门技术博文,送给正在自学的你

很多大学生或者正在自学的程序员问我&#xff1a;“二哥&#xff0c;能否提供一个 Java 入门的学习路线&#xff1f;”刚好我之前花了 7 周多的时间写了 25 篇 Java 入门的技术博文&#xff0c;于是我想不妨把这些整理成一个系列分享出来&#xff0c;给大家作为一个参考。 先来…

javaweb个人博客网站

该个人博客网站实现了前台用户注册登录&#xff0c;发布博文&#xff0c;发布照片&#xff0c;评论&#xff0c;关注&#xff0c;点赞&#xff0c;回复&#xff0c;留言&#xff0c;发私信等功能&#xff0c;适合新手学习SSM框架。 开发语言: Java 技术框架: SSM 开发工具…

Java项目---博客系统

博客系统url : 链接 项目已上传gitee : 链接 前言 之前笔者已经使用Servlet结合MySQL实现了第一版的个人博客。在这一版的博客系统中&#xff0c;将进行以下功能的升级&#xff1a; 框架升级&#xff1a;SSM版本&#xff0c;即&#xff08;Spring SpringMVC MyBatis&#…

javaweb——>个人博客项目

javaweb——>个人博客项目 具体代码参考&#xff1a;java_blog 目录 javaweb——>个人博客项目具体代码参考&#xff1a;[java_blog](https://github.com/zhuyunfeisn/java-project/tree/master/java_Blog)一.简单介绍1.功能简介2.使用的技术 二.项目准备1.需要的资源2.…

个人博客-javaWeb项目

一、目标 利用已有的前端页面实现一个个人博客系统的后端设计&#xff0c;可以实现用户登录&#xff0c;博客列表展示&#xff0c;博客详情页展示&#xff0c;写博客&#xff0c;删除博客的功能。 二、开发思路 采用前后端分离的方式&#xff0c;网页通过ajax构造HTTP请求和…

javaweb实现个人博客系统

JAVAweb项目——个人博客系统 技术路线&#xff1a; 项目主要采用jsphtml前台页面&#xff0c;后端服务器采用servlet&#xff0c;编辑相关样式以及函数功能的时候使用到了bootstap和jQuery。数据库操作通过dbutils和c3p0连接池实现。Md编辑通过第三方插件editor.md实现。 实现…

一个简单漂亮的Java博客系统

预览地址&#xff1a;http://forestblog.liuyanzhao.com 关于项目 该博客是基于SSM实现的一个个人博客系统&#xff0c;适合初学SSM和个人博客制作的同学学习。 主要涉及技术包括的包括 Maven、Spring、SpringMVC、MyBatis、JSP等 最新写了一篇该项目的毕业设计论文&#xf…

Java程序员博客系统推荐!我调研了100来个 Java 开源博客系统,发现这 5 个最好用!

最近想倒腾一下博客&#xff0c;看了很多现成的比较成熟的开源博客系统&#xff0c;自己也简单从下面几个维度总结对比了一下&#xff1a; star数量技术选型社区生态 当然啦&#xff01;好东西不能独享。下面简单分享一下我所做的笔记。 欢迎小伙伴们评论区补充完善。ღ( &a…

JavaWeb搭建简易个人博客

前台首页访问路径&#xff1a;/index.jsp 后台访问路径:/admin.jsp 运行项目前请把blog-parent目录下的database.sql加载到数据库中,并在blog-web/资源文件夹下的db.properties里配置数据库访问账号和密码 CSDN下载链接:点击链接下载

Java项目-Javaweb实现个人博客

作者主页&#xff1a;编程指南针 简介&#xff1a;Java领域优质创作者、CSDN博客专家 Java项目、简历模板、学习资料、面试题库、技术互助 文末获取源码 项目编号 &#xff1a;KS020 运行环境&#xff1a; 开发工具&#xff1a;IDEA /ECLIPSE 应用服务器&#xff1a;TOMCA…

用java写一个博客网站

可以先看一下这个网站长怎么样&#xff0c;哈哈哈&#xff0c;小屋知多少 先说一下这个博客有哪写功能&#xff1f;然后这个是代码后台下载地址&#xff1a;https://gitee.com/c-xiaobai-c/ssm-blog-website-background.git 前台下载地址&#xff1a;https://gitee.com/c-xia…

JavaWeb项目 -- 博客系统

JavaWeb项目 -- 博客系统 前言&#xff1a;页面展示一、创建 Maven 项目二、设计数据库三、封装数据库的操作3.1 创建 DBUtil 类3.2 创建 Blog 类3.3 创建 User 类3.4 创建类 BlogDao3.5 创建类 UserDao 四、导入准备好的前端代码五、实现博客列表界面5.1 约定好前后端交互接口…

【Java项目】从0到1构建一个博客系统

✨哈喽&#xff0c;进来的小伙伴们&#xff0c;你们好耶&#xff01;✨ &#x1f6f0;️&#x1f6f0;️系列专栏:【JavaWeb】 ✈️✈️本篇内容:从0到1构建一个博客系统&#xff01; &#x1f680;&#x1f680;代码托管平台github&#xff1a;博客系统源码托管&#xff01; ⛵…

史上最全的 Java 高质量博客与网站推荐(国内篇)

阅读文本大概需要 6.66 分钟。 前言 我最近在系统整理一些 Java 后台方面的面试题和参考答案&#xff0c;有找工作需求的童鞋&#xff0c;欢迎关注我的 Github 仓库&#xff0c;如果觉得不错可以点个 star 关注 &#xff1a; 1、awesome-java-interview2、awesome-java-notes…

博客系统[Java]

目录 一.准备工作 二.实现数据库代码(JDBC) 1.创建数据库/表结构>数据库设计 2.封装数据库(Model) 1>创建DBtil封装数据库连接操作 2>创建实体类-->表示一条记录 3>封装针对数据的增删改查 三.博客列表页 1.约定前后端 2.编写服务器代码 3.编写客户端…

JavaWeb项目—— 博客系统

文章目录 效果展示1. 创建 maven 项目2. 设计数据库3. 封装数据库的操作代码3.1 创建 DBUtil 类3.2 创建 Blog&#xff08;代表一篇博客&#xff09;3.3 创建 User&#xff08;代表一个用户&#xff09;3.4 创建类 BlogDao&#xff08;对博客表进行操作&#xff09;3.5 创建类 …

Java个人博客项目

目录 引言 开发环境 所用技术 项目目录 数据库设计 功能介绍 源码下载 更多优质练手项目 Java学生成绩管理系统 JavaWeb练手项目ATM机 Java图书管理系统 Java电子发票管理系统 引言 这个项目是大二下学期期末考核项目&#xff0c;当时是自选主题写一个项目&#x…

Java项目——个人博客系统

文章目录 一、项目背景二、项目功能三、项目的基本流程1.准备工作2.数据库设计3.准备前端页面4.实现前端匹配的Servlet所需功能5.项目难点 一、项目背景 在学习完JavaWeb相关知识后&#xff0c;有了基础能力就想通过完成一个Javaweb项目来回顾和加强已经学过的知识&#xff0c…