基于Java+SpringBoot+Vue前后端分离个人博客系统设计和实现

news2024/11/24 20:08:32

博主介绍全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战

🍅文末获取源码联系🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅

Java项目精品实战案例《100套》

Java微信小程序项目实战《100套》

系统介绍:

随着国内市场经济这几十年来的蓬勃发展,突然遇到了从国外传入国内的互联网技术,互联网产业从开始的群众不信任,到现在的离不开,中间经历了很多挫折。本次开发的个人博客系统,有管理员,用户,博主三个角色。管理员功能有个人中心,用户管理,博主管理,文章分类管理,博主文章管理,系统公告管理,轮播图管理。博主可以注册登录,修改个人信息,对自己发布的博主文章进行管理操作。用户可以注册登录,查看管理员发布的公告信息和博主发布的文章信息,还可以对博主文章进行收藏评论以及评论操作。开发本程序后台用到了Spring Boot开发技术,页面设计采用VUE框架和layui样式。数据库采用关系数据库市场占有率最高的MySQL作为本程序使用的数据库,完全符合程序使用并且有丰富的拓展余地。程序从需求到设计,从开发到测试,都在功能上和性能上都不断的进行了调试,让开发的程序在使用上用户体验更美好。

程序的功能在系统分析这部分已经确定了,这部分主要还是针对程序功能进行更加详细的设计,设计成果使用结构图展示直观明了,也更容易让人理解。绘制结构图采用的工具是Visio,使用它可以快速绘制出不同角色拥有的功能结构。

图4.2 功能结构图

程序上交给用户进行使用时,需要提供程序的操作流程图,这样便于用户容易理解程序的具体工作步骤,现如今程序的操作流程都有一个大致的标准,即先通过登录页面提交登录数据,通过程序验证正确之后,用户才能在程序功能操作区页面操作对应的功能。

程序操作流程图

功能截图:

对个人博客系统进行了前面的系统分析,系统设计之后,接下来的环节就是个人博客系统的具体编码实现功能的部分。这部分内容会显示系统各个功能的具体界面运行效果。

5.1 管理员功能实现

5.1.1 用户管理

管理员可以对用户信息进行添加,修改,删除,查询操作。

对个人博客系统进行了前面的系统分析,系统设计之后,接下来的环节就是个人博客系统的具体编码实现功能的部分。这部分内容会显示系统各个功能的具体界面运行效果。

5.1 管理员功能实现

5.1.1 用户管理

管理员可以对用户信息进行添加,修改,删除,查询操作。

图5.1 用户管理页面

5.1.2 文章分类管理

管理员可以对文章分类信息进行添加,修改,删除,查询操作。

图5.2 文章分类管理页面

5.1.3 公告信息管理

管理员可以对公告信息进行添加,修改,删除,查询操作。

图5.3 公告信息管理页面

5.1.4 博主信息管理

管理员可以对博主信息信息进行添加,修改,删除,查询操作。

图5.4 博主信息管理页面

5.2 博主功能实现

5.2.1 博主文章管理

博主可以对自己发布过的博主文章信息进行添加,修改,删除,查询操作,还可以查看评论。

图5.5首页页面

5.3 用户功能实现

5.3.1 博主文章信息

用户可以在博主文章里面查看到博主发布的文章信息,可以对博主文章信息进行查看,收藏,赞踩,评论操作。

图5.6 博主文章信息页面

5.3.2 我的收藏

我的收藏里面可以看到自己收藏过的博主文章信息,可以去点击收藏的信息去取消收藏。

图5.7 我的收藏页面

图5.1 用户管理页面

5.1.2 文章分类管理

管理员可以对文章分类信息进行添加,修改,删除,查询操作。

图5.2 文章分类管理页面

5.1.3 公告信息管理

管理员可以对公告信息进行添加,修改,删除,查询操作。

图5.3 公告信息管理页面

5.1.4 博主信息管理

管理员可以对博主信息信息进行添加,修改,删除,查询操作。

图5.4 博主信息管理页面

5.2 博主功能实现

5.2.1 博主文章管理

博主可以对自己发布过的博主文章信息进行添加,修改,删除,查询操作,还可以查看评论。

图5.5首页页面

5.3 用户功能实现

5.3.1 博主文章信息

用户可以在博主文章里面查看到博主发布的文章信息,可以对博主文章信息进行查看,收藏,赞踩,评论操作。

图5.6 博主文章信息页面

5.3.2 我的收藏

我的收藏里面可以看到自己收藏过的博主文章信息,可以去点击收藏的信息去取消收藏。

图5.7 我的收藏页面

代码实现:

/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UserController{
    
    @Autowired
    private UserService userService;
    
    @Autowired
    private TokenService tokenService;

    /**
     * 登录
     */
    @IgnoreAuth
    @PostMapping(value = "/login")
    public R login(String username, String password, String role, HttpServletRequest request) {
        UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
        if(user != null){
            if(!user.getRole().equals(role)){
                return R.error("权限不正常");
            }
            if(user==null || !user.getPassword().equals(password)) {
                return R.error("账号或密码不正确");
            }
            String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
            return R.ok().put("token", token);
        }else{
            return R.error("账号或密码或权限不对");
        }

    }
    
    /**
     * 注册
     */
    @IgnoreAuth
    @PostMapping(value = "/register")
    public R register(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
        if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
            return R.error("用户已存在");
        }
        userService.insert(user);
        return R.ok();
    }

    /**
     * 退出
     */
    @GetMapping(value = "logout")
    public R logout(HttpServletRequest request) {
        request.getSession().invalidate();
        return R.ok("退出成功");
    }
    
    /**
     * 密码重置
     */
    @IgnoreAuth
    @RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
        UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
        if(user==null) {
            return R.error("账号不存在");
        }
        user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
    
    /**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UserEntity user){
        EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
        PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
        Integer id = (Integer)request.getSession().getAttribute("userId");
        UserEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }

    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
        if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
            return R.error("用户已存在");
        }
        userService.insert(user);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody UserEntity user){
//        ValidatorUtils.validateEntity(user);
        userService.updateById(user);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

论文参考:

源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻

 精彩专栏推荐订阅下方专栏👇🏻

2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅

Java项目精品实战案例《100套》

Java微信小程序项目实战《100套》

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

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

相关文章

浅分析安防视频监控平台EasyCVR视频融合平台接入大量设备后如何维持负载均衡

安防视频监控平台EasyCVR视频融合平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备…

Pycharm配置及使用Git教程

文章目录 1. 安装PyCharm2. 安装Git3. 在PyCharm中配置Git插件4. 连接远程Gtilab仓库5. Clone项目代码6. 将本地文件提交到远程仓库6.1 git add6.2 git commit6.3 git push6.4 git pull 平时习惯在windows下开发&#xff0c;但是我们又需要实时将远方仓库的代码clone到本地&…

OJ练习第163题——反转字符串中的单词

反转字符串中的单词 力扣链接&#xff1a;151. 反转字符串中的单词 题目描述 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空…

南方科技大学博士研究生奖助学金,深圳大学

目录 南方科技大学 中南大学 南京大学 厦门大学 苏州大学 中南财经政法大学 深圳大学 南方科技大学 https://ocean.sustech.edu.cn/ocean/public/upload/download/3/2.pdf 南方科技大学的在读研究生&#xff0c;每人每年都会得到40000元的补助&#xff0c;这40000块钱分…

Redis集群服务器

集群简介 试想有一家餐厅&#xff0c;如果顾客人数较少&#xff0c;那么餐厅只需要一个服务员即可&#xff0c;如图1。但是&#xff0c;当顾客人数非常多时&#xff0c;一个服务员是绝对不够的&#xff0c;如图2。此时&#xff0c;餐厅需要雇用更多的服务员来解决大量访问&…

运算符重载(个人学习笔记黑马学习)

1、加号运算符重载 #include <iostream> using namespace std; #include <string>//加号运算符重载 class Person { public://1、成员函数重载号//Person operator(Person& p) {// Person temp;// temp.m_A this->m_A p.m_A;// temp.m_B this->m_B p…

算法:移除数组中的val的所有元素---双指针[2]

1、题目&#xff1a; 给你一个数组 nums和一个值 val&#xff0c;你需要原地移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并原地修改输入数组。 元素的顺序可以改变。你不需要考虑数组…

外包干了2个月,技术退步明显了...

先说一下自己的情况&#xff0c;大专生&#xff0c;19年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年8月份&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

AFG EDI 解决方案

AFG一直是汽车行业出境物流的专家&#xff0c;不仅运输汽车&#xff0c;同时也提供模块化IT解决方案&#xff0c;用于接收、控制、互联以及整个车辆调度过程的可视化和监控。 对于物流行业而言&#xff0c;如果已经确定了供应链整合的目标&#xff0c;但却没有明确的计划及足够…

渗透测试:Linux提权精讲(四)之sudo方法第四期

目录 写在开头 sudo screen sudo script sudo sed sudo service sudo socat sudo ssh sudo ssh-keygen sudo strace sudo systemctl sudo tcpdump sudo tee sudo timedatectl sudo tmux sudo vi sudo wall sudo watch sudo wget sudo xxd sudo zip 总结…

软件测试/测试开发丨Web自动化测试 cookie复用

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27165 一、cookie简介 cookie是一些数据&#xff0c;存储于用户电脑的文本文件中 当web服务器想浏览器发送web页面时&#xff0c;在链接关闭后&#xff0c…

RK3588平台产测之ArmSoM-W3 DDR压力测试

1. 简介 RK3588从入门到精通 ArmSoM团队在产品量产之前都会对产品做几次专业化的功能测试以及性能压力测试&#xff0c;以此来保证产品的质量以及稳定性 优秀的产品都要进行多次全方位的功能测试以及性能压力测试才能够经得起市场的检验 2. 环境介绍 硬件环境&#xff1a; …

java八股文面试[多线程]——FutureTask

FutureTask介绍 FutureTask是一个可以取消异步任务的类。FutureTask对Future做的一个基本实现。可以调用方法去开始和取消一个任务。 一般是配合Callable去使用。 异步任务启动之后&#xff0c;可以获取一个绑定当前异步任务的FutureTask。 可以基于FutureTask的方法去取消…

APP运营的核心是什么?

APP的运营的核心就是用户运营&#xff0c;主要分为四个指标&#xff1a;用户拉新、留存、促活、转化&#xff08;营收&#xff09;下面进行一一分析。 一、APP用户拉新&#xff1a;提高用户精准度 用户拉新&#xff0c;无非是把APP推广出去进行品牌曝光&#xff0c;提高下载量…

将 ordinals 与 比特币智能合约集成 : 第 1 部分

将序数与比特币智能合约集成&#xff1a;第 1 部分 最近&#xff0c;比特币序数在区块链领域引起了广泛关注。 据称&#xff0c;与以太坊 ERC-721 等其他代币标准相比&#xff0c;Ordinals 的一个主要缺点是缺乏对智能合约的支持。 我们展示了如何向 Ordinals 添加智能合约功…

CPU与GPU渲染的差异有哪些?最佳3D渲染 GPU推荐

什么是 GPU 渲染&#xff1f; GPU 渲染使您可以使用显卡而不是 CPU 进行渲染。从广义上讲&#xff0c;GPU渲染允许许多并行操作同时运行。这提高了执行速度&#xff0c;因为现代 GPU 旨在计算大量数据。快速渲染使 GPU 能够实时处理图形。但是&#xff0c;在这种情况下&#x…

前后端中的异步和事件机制 | 前后端开发

前言 在前后端程序设计开发工作中&#xff0c;小伙伴们一定都接触过事件、异步这些概念。出现这些概念的原因之一是&#xff0c;我们的代码在执行过程中所涉及的逻辑在不同的场合下执行时间的期望是各不相同的。为了尽量做到充分利用CPU等资源做尽可能多的事&#xff0c;免不了…

JWT解决跨域问题详解

介绍 在前后端不分离时&#xff0c;我们利用前面讲过的Spring Security的各种知识点&#xff0c;就可以实现对项目的权限管控。但是在前后端分离时&#xff0c;尤其是在引入了Spring Security后的前后端分离时&#xff0c;我们从前端发来的请求&#xff0c;就会存在一些问题。…

IBM Spectrum LSF Process Manager —— 设计、记录和运行复杂的计算工作流

亮点 ● 快速创建复杂的分布式工作流 ● 开发可重复的最佳实践 ● 自信地运行关键工作流程 ● 提高流程可靠性 IBM Spectrum LSF Process Manager 使您能够设计和自动化计算或分析流程&#xff0c; 捕获和保护可重复的最佳实践。 使用直观的图形界面…

时序预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机时间序列预测未来

时序预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机时间序列预测未来 目录 时序预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机时间序列预测未来预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab实现PSO-LSSVM时间序列预测未…