基于java springboot博客管理系统设计和实现

news2024/12/30 4:26:45

基于java springboot博客管理系统设计和实现

博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域
作者主页 超级帅帅吴
Java项目精品实战案例《500套》
欢迎点赞 收藏 ⭐留言
文末获取源码联系方式

文章目录

  • 基于java springboot博客管理系统设计和实现
  • 前言
  • 需求分析
    • 用户管理。
    • 文章管理。
    • 链接管理。
    • 日志管理。
    • 数据管理。
    • 系统管理。
  • 功能分析
    • 用户登录注册:
    • 博客主页:
    • 文章详情:
    • 评论互动:
    • 后台用户管理:
    • 后台文章管理:
    • 后台链接管理:
    • 后台日志管理:
    • 后台数据管理:
    • 后台菜单管理:
  • 部分表设计
    • 用户表
    • 文章表
    • 评论互动表
  • 部分代码实现

前言

博客,又译为网络日志、 部落格或部落阁等,是一种通常由个人管理、不定期张贴新的文章的网站。 博客上的文章通常根据张贴时间, 以倒序方式由新到旧排列。 许多博客专注在特定的课题上提供评论或新闻, 其他则被作为比较个人的日记。 一个典型的博客结合了文字、图像、 其他博客或网站的链接、 及其它与主题相关的媒体。 能够让读者以互动的方式留下意见,是许多博客的重要要素。大部分的博客内容以文字为主, 仍有一些博客专注在艺术、摄影、视频、音乐、播客等各种主题。博客是社会媒体网络的一部分。博客秉承了个人网站的自由精神, 但是综合了激发创造的新模式, 使其更具开放和建设性。它作为一种新表达的方式,它的传播不仅情绪,包括大量的智慧、意见和思想。某种意义上说,它也是一种新的文化现象, 博客的出现和繁荣, 真正凸现网络的知识价值,标志着互联网发展开始步入更高的阶段。
在这里插入图片描述

需求分析

本系统主要针对博客论坛的管理员对论坛信息进行有效的管理,对用户数量,链接数量,文章数量进行增删改查,能通过数据统计分析近来论坛的发展情况,还能通过类别更改管理论坛的界面。游客则通过发布文章,管理文章对论坛做出贡献,发布自己的想法。

用户管理。

该模块是由管理员进行操作的,将所有用户的用户名,邮箱,创建时间,用户状态,列在一张表上,方便管理员增加、删除、修改,查询用户的信息,还可以批量删除。

文章管理。

这个模块是管理员和用户都可以操作的,他们都可以对现有文章进行删除、修改,查询的操作。他们还可以在文章添加板块,进行文章创作。

链接管理。

该模块是在论坛页面的右边添加友情网站的链接,起到互帮互助的作用,它也由两个小板块组成,链接添加和链接列表,这是只有管理员才能查看且增删查改的板块,

日志管理。

日志模块是所有用户包括管理员论坛对后台管理系统的访问记录,由管理员查看,能够进行查询,删除和批量删除的操作。

数据管理。

数据模块是以月为单位,对论坛的发帖量和访问量进行数据统计,并转换成柱状图的形式呈现,是只能由管理员查看的用于网站现状的分析的工具。分为文章发表数据和文章浏览数据。

系统管理。

这个模块下面有一个前台栏目列表,是前台论坛上方展示的分类类别,有由管理员增加、删除、修改,查询的功能。

功能分析

用户登录注册:

输入账号密码进行登录、后台判断账号权限是普通用户还是管理员、没有注册的可以进入注册页面注册在这里插入图片描述

博客主页:

用户进入主页后查看分类查看博客内容、点击查看详情、右侧可以跳转超链接、以及登录注册
在这里插入图片描述

文章详情:

在这里插入图片描述

评论互动:

博客详情评论互动
在这里插入图片描述

后台用户管理:

在这里插入图片描述
添加用户:
在这里插入图片描述

后台文章管理:

在这里插入图片描述
在这里插入图片描述

后台链接管理:

在这里插入图片描述

后台日志管理:

在这里插入图片描述

后台数据管理:

文章数据《发表数据和流量数据》按月统计显示
在这里插入图片描述

后台菜单管理:

在这里插入图片描述

部分表设计

使用Mysql数据库、 INNODB 存储引擎和 UTF8 编码格式。

用户表

CREATE TABLE `NewTable` (
`id`  int(11) NOT NULL AUTO_INCREMENT COMMENT '主键' ,
`username`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户登录名' ,
`email`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱' ,
`password`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码' ,
`status`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '2' COMMENT '状态 0:正常 1:删除 2:未激活或者未启用' ,
`avatar`  varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '头像' ,
`code`  varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '激活码' ,
`create_date`  datetime NULL DEFAULT NULL COMMENT '添加时间' ,
`create_by`  varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '添加用户id' ,
`update_date`  datetime NULL DEFAULT NULL COMMENT '更新时间' ,
`update_by`  varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新用户id' ,
`remark`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注' ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=21
ROW_FORMAT=DYNAMIC
;
 

文章表

CREATE TABLE `NewTable` (
`id`  int(64) NOT NULL AUTO_INCREMENT ,
`type_id`  int(64) NOT NULL ,
`title`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`content`  longtext CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`create_date`  datetime NULL DEFAULT NULL ,
`create_by`  varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`update_date`  datetime NULL DEFAULT NULL ,
`update_by`  varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`status`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`read`  varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0' ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=24
ROW_FORMAT=DYNAMIC
;
 

评论互动表

CREATE TABLE `NewTable` (
`id`  int(11) NULL DEFAULT NULL ,
`news_id`  varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL ,
`content`  mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL ,
`create_date`  date NULL DEFAULT NULL ,
`create_by`  int(11) NULL DEFAULT NULL ,
`update_time`  date NULL DEFAULT NULL ,
`update_by`  int(11) NULL DEFAULT NULL ,
`status`  varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL 
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_unicode_ci
ROW_FORMAT=DYNAMIC
;
 

部分代码实现

这个项目功能比较简单、用的技术也是大家非常熟悉的技术、主要是springboot、springmvc、mybatis以前端的jquery、layui、html和css等基本样式。就拿登录来举一个完整例子吧、首先是前端静态页面的编写以及发送登录请求

 
<div class="wrapper">
 
    <div class="froyo-frame login-body">
        <div class="admin-face">
            <div class="face-img">
                <img src="${ctxStatic}/images/editor.png" alt="logo">
            </div>
        </div>
        <h1 class="admin-login-tittle">「从现在开始,为每一天写下一篇记录」</h1>
        <div class="admin-login-form">
            <form class="form" action="${ctx}/login" method="post" autocomplete="off">
                <div class="admin-name"><input name="username" type="text" placeholder="用户名"></div>
                <div class="admin-password"><input name="password" type="password" placeholder="密码"></div>
                <div class="admin-button"><button type="submit" id="login-button">登录</button></div>
            </form>
          <!--   其他账号登录:
            <a href=""><img src="${ctxStatic}/images/qqLogin.png" style="width: 50px;margin: 10px" οnclick="loginQQ()"></a>
            <img src="${ctxStatic}/images/weChatLogin.png" style="width: 50px;margin: 10px">
            <img src="${ctxStatic}/images/weboLogin.png" style="width: 50px;margin: 10px"> -->
            <div class="admin-button"><a id="login-button" href="${ctx}/index">返回首页</a></div>
</div>
<script type="text/javascript" src="${ctxStatic}/plugins/layui/layui.js"></script>
<script type="text/javascript">
    layui.use('layer', function() {
        var $ = layui.jquery,
            layer = layui.layer;
        //login-button的点击事件..
        $('#login-button').click(function (event) {
            event.preventDefault();
            if (!$("input[name=username]").val()) {
                layer.msg("用户名不能为空");
                return false;
            } else if (!$("input[name=password]").val()) {
                layer.msg("密码不能为空");
                return false;
            } else {
                $('form').fadeOut(500);
                $('.wrapper').addClass('form-success');
                $('.form').submit();
            }
        });
 
</script>
</body>
</html>

后台Controller接收到前端的登录请求之后执行参数校验、将前端传递过来的用户名密码以及用户角色进行判断验证、调用LoginController.login方法执行用户登录验证、查询数据库当前账号密码是否正确、返回状态码给前端、前端根据状态码进行相对的页面跳转以及数据效应。

   /**
     * 登录验证
     *
     * @param user
     * @param map
     * @return
     */
    @PostMapping("/login")
    public String login(User user, ModelMap map) {
        if (user != null) {
            if (StringUtils.isBlank(user.getUsername()) || StringUtils.isBlank(user.getPassword())) {
                return Views.LOGIN;
            }
            AuthenticationToken token = new UsernamePasswordToken(user.getUsername(), user.getPassword(), true);
            if (token == null) {
                map.put("message", "用户名或密码错误");
                return Views.LOGIN;
            }
            //记住我
            ((UsernamePasswordToken) token).setRememberMe(true);
            try {
                SecurityUtils.getSubject().login(token);
                return Views.REDIRECT_ADMIN;
            } catch (AuthenticationException e) {
                if (e instanceof UnknownAccountException) {
                    map.put("message", "用户不存在");
                } else if (e instanceof LockedAccountException) {
                    map.put("message", "账户未激活");
                    map.put("status", 2);
                    map.put("user", user);
                } else if (e instanceof DisabledAccountException) {
                    map.put("message", "账户未启用");
                }
                e.printStackTrace();
                map.put("message", "用户认证失败");
            }
            return Views.LOGIN;
        } else {
            map.put("message", "未知异常");
            return Views.LOGIN;
        }
    }
 
 
 
}

博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域
作者主页 超级帅帅吴
Java项目精品实战案例《500套》
欢迎点赞 收藏 ⭐留言
文末获取源码联系方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/688551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端技术到底是深度重要,还是广度重要?

前言 前几天跟朋友讨论“技术广度和技术深度哪个重要”&#xff0c;再想想自己像过山车一般的前端历程&#xff0c;有感而发&#xff0c;想给小兄弟们一些建议~ 为什么会有这个疑问&#xff1f; 还记得两年前&#xff0c;甚至是一年前&#xff0c;当时想要找到一份好工作&am…

API 网关 vs 负载均衡:选择适合你的网络流量管理组件

由于互联网技术的发展&#xff0c;网络数据的请求数节节攀升&#xff0c;这使得服务器承受的压力越来越大。在早期的系统架构中&#xff0c;通常使用负载均衡来将网络流量平摊到多个服务器中&#xff0c;以此减轻单台服务器的压力。但是现如今&#xff0c;后端服务的种类在不断…

STM32-ADC模拟数字转换器

ADC 1、简介1.2、逐次逼近型ADC1.3 ADC基本结构转换模式触发控制数据对齐转换时间&#xff08;针对高转换速率&#xff09;校准硬件电路 2、软件编写初始化 1、简介 1、ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 2、ADC可以将引脚上连续变化的模拟…

【MySQL学习笔记】(一)MySQL数据库基础

MySQL数据库基础 1 MySQL 连接服务器指令2 mysql 和mysqld的区别3 数据库存储 VS 文件存储4 初次使用数据库 理解数据库是什么4.1 使用数据库4.2 小总结 5 主流数据库6 SQL分类7 存储引擎 1 MySQL 连接服务器指令 mysql -h 127.0.0.1 -P 3306 -u root -p-h 指明登录部署了mysq…

Vue3 简介

Vue3简介 01 Vue vue 是一个前端的框架&#xff0c;主要负责帮助我们构建用户的界面MVVM&#xff1a;Model - View - View Modelvue 负责 vm 的工作&#xff08;视图模型&#xff09;&#xff0c;通过 vue 可以将视图和模型相关联。 当模型发生变化时&#xff0c;视图会自动更…

Quartus 实例应用(1)——EDA技术概述

EDA 技术概述 一、EDA技术及其发展二、Top-down 设计与 IP 核复用2.1 Top-down 设计2.2 Bottom-up 设计2.3 IP 复用技术与 SoC 三、数字设计的流程3.1 设计输入3.2 综合3.3 布局布线3.4 仿真3.5 编程配置 我们已经进入数字化和信息化的时代&#xff0c;其特点是各种数字产品的广…

UM2082F08三通道低频无线唤醒ASK接收芯片

UM2082F08 是基于单周期 8051 内核的超低功耗 8 位、 具有三通道低频无线唤醒 ASK 接收功能的 SOC 芯片。芯片可检测 30KHz~300KHz 范围的 LF&#xff08;低频&#xff09;载波频率数据并触发唤醒信号&#xff0c;同时可以调节接收灵敏度&#xff0c;确保在各种应用环境下实现可…

Python(request)爬虫有多强大

Python 的 requests 库是一个非常强大的网络爬虫工具&#xff0c;可以帮助开发人员快速&#xff0c;高效地从各种网站获取信息并处理数据。以下是 requests 库的一些强大功能&#xff1a; 1. 简单易用&#xff1a;requests 库的 API 设计合理&#xff0c;易于学习和使用。使用 …

“咸粽与甜粽”之争再启,五芳斋一季度亏损6393万

又是一年端午粽叶飘香&#xff0c;“咸粽与甜粽”之争再启。 4月29日&#xff0c;浙江五芳斋实业股份有限公司&#xff08;下称“五芳斋”&#xff0c;603237.SH)公布了2022年报及2023年一季报。 财报公布后的首个交易日&#xff08;5月4日&#xff09;&#xff0c;其股价下跌…

数据库监控与调优【二】—— 测试数据准备与数据操作工具

测试数据准备与数据操作工具 导入测试数据 使用MySQL官方测试数据库——employee-data 地址&#xff1a;https://dev.mysql.com/doc/index-other.html 下载项目&#xff0c;将项目传到服务器的/opt目录下 导入employees.sql语句 mysql -uroot -pImooc123456 < employe…

软考高级系统架构设计师(九) 作文模板-企业应用集成

目录 作文模板 例子-企业应用集成 摘要 项目相关背景及主要功能 你的岗位及主要职责 论文主体内容的总概 项目最终的实施效果或你的总结和感悟等 正文 项目背景介绍 相关问题回应 主体内容 论文结论 例子-类似方向- 作文模板 例子-企业应用集成 2021系统架构设计…

【App渗透】用BurpSuite抓包安卓手机app内容(详细)

文章目录 前言一、电脑端的配置二、BurpSuite的配置三、手机端的配置四、抓包总结 前言 很多情况下&#xff0c;在电脑的手机模拟器上面做app测试会存在大大小小的bug或者各种坑&#xff0c;而且有些模拟器很不方便&#xff0c;非常不好用。网上的教程虽然多&#xff0c;但是大…

【大数据之Hive】十六、Hive-HQL函数之窗口函数(开窗函数)

1 概述 先定义了窗口的大小&#xff08;按行来算&#xff09;&#xff0c;然后对窗口内的行的数据进行计算&#xff0c;再将计算结果返回给改行。   窗口函数包括窗口和函数两部分&#xff0c;窗口用于定义计算范围&#xff0c;函数用于定义计算逻辑&#xff0c;窗口函数只会…

React通过useContext特性实现组件数据传递

我们来说一个属性 useContext 这个确实用的挺少的 不过 还是简单做一下 打开我们的react项目 在src下创建一个文件夹 components 因为他是两个 甚至多个组件之间使用的 然后在components下创建两个组件 分别叫 dom.jsx dom1.jsx 命名命的比较不规范 不过本身只是做个案例 懒得做…

0-1背包

问题概述&#xff1a; 0-1背包是在n件物品取出若干件放在空间为V的背包里&#xff0c;每件物品的体积为v[ i ]&#xff0c;与之相对应的价值为w[ i ],要求在不超过背包空间的情况下&#xff0c;得到的物品的价值总和最大&#xff0c;问这个最大值是多少&#xff1f; 问题分析…

pod 知识点 下

上一篇分享了 pod 的基本知识点&#xff0c;有 K8S 环境的小伙伴还是可以用起来的&#xff0c;还对比较简单&#xff0c;知道了 pod 的 yaml 文件结构&#xff0c;标识&#xff0c;基本的创建 pod 和删除 pod 的用法等等&#xff0c;我们继续 pod 的基本分类 前面我们说到了 p…

什么是Natural Language Generation(NLG)?

文章目录 1.NLG的定义2.NLP的步骤3.NLG生成文本方式有哪些&#xff1f;3.1.简单的数据合并3.2.模板化的NLG3.3.高级NLG 4.NLG的应用有哪些&#xff1f; 1.NLG的定义 自然语言生成&#xff08;Natural Language Generation, NLG&#xff09;是NLP&#xff08;自然语言处理&…

Sikulix自动化工具的使用

1.Sikuli-x简介 Sikuli是识别和控制GUI组件进行UI自动化测试的技术&#xff0c;它是有MIT的研究人员开发进行设计的。Sikuli在墨西哥维乔印第安人(Huichol Indians)的语言里是上帝之眼的意思&#xff0c;Sikuli的工作模式与人眼一样&#xff0c;直接识别图像。 Sikuli-x是Sik…

1、Redis入门与安装配置

是什么&#xff1f; Remote Dictionary Server(远程字典服务) 是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高性能的Key-Value数据库。提供了丰富的数据结构&#xff0c;例如String、Hash、List、Set、SortedSet等等。数据是存在内存中的&#xf…

python爬虫-逆向实例小记-2

注意&#xff01;&#xff01;&#xff01;&#xff01;某数据网站逆向实例仅作为学习案例&#xff0c;禁止其他个人以及团体做谋利用途&#xff01;&#xff01;&#xff01;&#xff01; 案例分析 第一步&#xff1a;分析请求和响应内容。该网站任何一请求和内容都不可直接…