Java基于springboot+vue的个人博客网站 前后端分离

news2025/7/18 8:37:26

随着现在网络的快速发展,网上管理系统也逐渐快速发展起来,网上管理模式很快融入到了许多网站的之中,随之就产生了“博客网站”,这样就让博客网站更加方便简单。
对于本博客网站的设计来说,系统开发主要是采用java语言技术,在整个系统的设计中应用MySQL数据库来完成数据存储,具体根据博客网站的现状来进行开发的,具体根据现实的需求来实现博客网站网络化的管理,各类信息有序地进行存储,进入博客网站页面之后,方可开始操作主控界面,主要功能包括管理员:首页,个人中心,修改密码,个人信息,用户管理,文章分类管理,博客文章管理,论坛交流,留言板管理,系统管理。前台首页;首页, 博客文章,论坛交流,系统公告,留言反馈 ,个人中心 ,后台管理等功能。
请添加图片描述
用户在打开系统之后,首先打开的是首页,在首页可以看到推荐的一些博客和文章信息。用户通过点击博客的图片或者标题可以查看博客的详细内容。

环境需要
1.运行环境:最好是java jdk 1.8,这是目前最稳定的JDK也是被使用最多的JDK版本。
2.IDE环境:IDEA,Eclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat7/Tomcat8/Tomcat9版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.数据库:MySql 5.7版本;
6.是否Maven项目:是;
技术栈
后端:Spring+SpringMVC+Mybatis+Springboot
前端:vue+CSS+JavaScript+jQuery+elementui
请添加图片描述
上图为博客文章界面,在本界面中,用户可以根据博客的分类快速的定位不同类型的博客文章。也可以通过文章的标题和用户名进行模糊询。当用户找到了想要查看的文章之后,可通过点击文章的图片或标题,查看详细内容。

请添加图片描述
上图为博客的详细内容在这里,用户可以看到博客的标题类型,标签所属用户,发布日期,详细内容等信息。并且用户在登录之后可对该博客文章进行评论操作
请添加图片描述
管理员登录,通过填写用户名、密码、角色等信息,输入完成后选择登录即可进入博客网站
请添加图片描述
管理员对用户管理获取用户账号、用户姓名、头像、性别、年龄、手机、邮箱并进行详情、删除、修改。用户管理效果图如图
请添加图片描述
管理员对文章信息管理进行编辑文章标题、分类、图片、发布日期、用户账号、邮箱等信息进行详情、删除、修改操作。文章信息管理效果图如图


/**
 * 登录相关
 */
@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 captcha, HttpServletRequest request) {
		UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
		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);
	}
	
	/**
	 * 注册
	 */
	@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("/list")
    public R list( UserEntity user){
       	EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
      	ew.allEq(MPUtil.allEQMapPre( user, "user")); 
        return R.ok().put("data", userService.selectListView(ew));
    }

    /**
     * 信息
     */
    @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){
    	Long id = (Long)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 Long[] ids){
        userService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

目录
1 绪论 1
1.1课题背景 1
1.2课题研究现状 1
1.3初步设计方法与实施方案 2
1.4本文研究内容 2
2 系统开发环境 4
2.1 使用工具简介 4
2.2 环境配置 4
2.3 B/S结构简介 4
2.4 MySQL数据库 5
2.5 框架介绍 5
3 系统分析 6
3.1系统可行性分析 6
3.1.1经济可行性 6
3.1.2技术可行性 6
3.1.3运行可行性 6
3.2系统现状分析 6
3.3功能需求分析 7
3.4系统设计规则与运行环境 8
3.5系统流程分析 8
3.5.1操作流程 8
3.5.2添加信息流程 9
3.5.3删除信息流程 10
4 系统设计 11
4.1系统设计主要功能 11
4.2数据库设计 11
4.2.1数据库设计规范 11
4.2.2 E/R图 11
4.2.3数据表 12
5 系统实现 25
5.1系统功能模块 25
5.2后台模块 27
5.2.1管理员功能模块 27
5.2.2用户功能模块 30
6 系统测试 33
6.1功能测试 33
6.2可用性测试 33
6.3性能测试 34
6.4测试结果分析 34
7结 论 35
参考文献 36
致 谢 37

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

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

相关文章

2022国产8K摄像机介绍

摄像机是一种把光学图像信号转变为电信号&#xff0c;以便于存储或者传输的设备。当我们拍摄一个物体时&#xff0c;此物体上反射的光被摄像机镜头收集&#xff0c;使其聚焦在摄像器件的受光面&#xff08;例如摄像管的靶面&#xff09;上&#xff0c;再通过摄像器件把光转变为…

N-HiTS: Neural Hierarchical Interpolation for Time Series Forecasting

N-HiTS: Neural Hierarchical Interpolation for Time Series Forecasting 神经预测的最新进展加速了大规模预测系统性能的提高。然而,长期预测仍然是一项非常困难的任务。影响这项任务的两个常见挑战是预测的波动性和它们的计算复杂性。本文提出N-HiTS,一种通过结合新的分层…

不同字符编码对比

目录 1. ASCII码 2. Unicode 3. GBK编码 1. ASCII码 ASCII码使用一个字节编码&#xff0c;但只适用于英文&#xff1b; 2. Unicode Unicode定义了字符集&#xff0c;有 17 个 code plane&#xff0c;总共规划了 1,114,112 个 code point。而这些字符可以使用UTF-8、UTF-1…

Windows无法访问指定设备、路径或文件怎么办?

如何解决Windows 无法访问指定的设备、路径或文件错误&#xff1f; 1.修改安全中心的设置 如果在安装程序的过程中&#xff0c;遇到该错误&#xff0c;可以进入到【Windows安全中心】进行设置修改。 第一步&#xff1a;点击左下角的开始按钮&#xff0c;然后依次点击【设置】…

直接安装WSL2及安装Ubuntu到F盘

1. 勾选这三项&#xff0c;重启 2. 以管理员方式运行powersell wsl --updatewsl --shutdownwsl --set-default-version 2wsl --status3. 解压缩ubuntu 解压缩Ubuntu_1804.2019.522.0_x64.appx到F盘 4. 安装ubuntu 双击ubuntu1804.exe安装 5. 运行 双击ubuntu1804.exe …

AI人工智能实践技术系统性教学方案

郁磊老师【副教授】 &#xff1a;长期从事Python、Matlab机器学习及深度学习等研究工作&#xff0c;具备良好的数学及信号处理基础&#xff0c;熟悉如神经网络、支持向量机、决策树、随机森林等&#xff0c;以及群优 化算法&#xff0c;如遗传算法、蚁群算法、蝙蝠算法等&#…

React源码解读之更新的创建

React 的鲜活生命起源于 ReactDOM.render &#xff0c;这个过程会为它的一生储备好很多必需品&#xff0c;我们顺着这个线索&#xff0c;一探婴儿般 React 应用诞生之初的悦然。 更新创建的操作我们总结为以下两种场景 ReactDOM.rendersetStateforceUpdate ReactDom.render …

k8s-dynamic-pvc

安装 storage class: external-storage/nfs-client/deploy at master kubernetes-retired/external-storage GitHub 下载文件并安装: class.yaml deployment.yaml rbac.yaml 其中修改: 安装 测试: [rootmaster test-dir]# cat nginx-1.yaml apiVersion: v1 kind: Pers…

【Pytorch with fastai】第 4 章 :底层训练数字分类器

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

一切为了喵喵 | 攻防世界 x Nepnep x CATCTF邀你一战!

各位极客请注意❗ 各位极客请注意❗❗ 为了坚决捍卫每只小猫咪吃饱饭的权利 为了彻底贯彻“可爱就是王道”的正义 攻防世界 x Nepnep x CATCTF 邀你一战&#xff01; 此战若成&#xff0c;8333只流浪喵星人将能饱餐一顿&#xff01; 没有一只修猫咪饿肚子的明天在等着我们…

【Python】初始Python

文章目录一. Python背景知识1. Python的起源2. Python的作用3. Python的优缺点4. Python的前景二. 搭建Python环境1. 安装Python2. 安装 PyCharm一. Python背景知识 1. Python的起源 Python祖师爷吉多 范罗苏姆&#xff08;Guido van Rossum&#xff09;是一个荷兰程序员&am…

简易的Python小游戏,上班可玩一天,零基础小白可练手

文章目录 一、第一次写Python小游戏二、对小游戏进行改进 1.对玩家进行提示2.提供多次机会给玩家3.每次答案应该是随机的 三、总结 一、第一次写Python小游戏 刚开始学习Python这门计算机语言&#xff0c;所以在网上找了一个非常简易的小游戏来进行模仿编写&#xff0c;目的…

【数据挖掘】聚类分析

聚类分析 Cluster Analysis 肝到爆炸呜呜呜 一、什么是聚类分析 关键词 1️⃣ 簇 Cluster&#xff1a;数据对象的集合&#xff0c;相同簇中的数据彼此相似&#xff0c;不同簇中的数据彼此相异。 2️⃣ 聚类分析 Cluster analysis&#xff1a;根据数据特征找到数据中的相似性…

Servlet | HttpServlet源码分析、web站点的欢迎页面

目录 一&#xff1a;HttpServlet源码分析 二&#xff1a;web站点的欢迎页面 一&#xff1a;HttpServlet源码分析 1、HttpServlet类是专门为HTTP协议准备的&#xff0c;比GenericServlet更加适合HTTP协议下的开发 HttpServlet在哪个包下&#xff1f; jakarta.servlet.http.Ht…

vue - - - - vite创建vue3项目(不使用TS)

vite创建vue3项目 vite官方文档 1. 使用指令创建项目 > npm create vite your-project-name > or > yarn create vite your-project-name此处演示使用npm&#xff0c;执行该指令时&#xff0c;遇到下述7.1所示报错。 Need to install the following packages(需…

asp.net+sqlserver婚纱影楼摄影管理系统C#

目录 1绪论 5 1.1 选题背景目的和意义 5 1.2研究现状 5 1.3 课题理由 5 2系统需求分析 7 2.1可行性分析 7 2.1.1 技术可行性 7 2.1.2 经济可行性 7 2.2.3 操作可行性 8 2.2系统架构 8 2.3 业务流程分析 9 3系统总体设计 10 3.1 系统物理环…

JavaSE——异常

目录 一、基本概念 1.1 什么是异常&#xff1f; 1.2 java提供的异常处理机制有什么作用&#xff1f; 1.3 java语言中异常以什么形式存在&#xff1f; 例1&#xff1a; 二、异常处理机制 2.1 所有Exception的直接子类都叫做编译时异常 2.2 所有的RuntimeException及子类都属于…

Spring面试

1. IOC &#xff08;1&#xff09;如何实现一个IOC容器 &#xff08;2&#xff09;IOC理解 &#xff08;3&#xff09;BeanFactory BeanFactory 是 Spring 框架的基础设施&#xff0c;面向 Spring 本身&#xff1b;ApplicationContext 面向使用 Spring 框架的开发者&#xff…

Zookeeper和Eureka的区别

Zookeeper&#xff1a; CP设计(强⼀致性)&#xff0c;⽬标是⼀个分布式的协调系统&#xff0c;⽤于进⾏资源的统⼀管理。当节点crash后&#xff0c;需要进⾏leader的选举&#xff0c;在这个期间内&#xff0c;zk服务是不可⽤的。 eureka&#xff1a; AP设计&#xff08;高可用&…

动态规划--(不同的子序列,编辑距离,两个字符串的删除)

代码随想录day56 动态规划模块 不同的子序列,编辑距离&#xff0c;两个字符串的删除 文章目录1.leetcode 115. 不同的子序列1.1思路及详细步骤1.2 代码示例2.leetcode 583. 两个字符串的删除操作2.1思路及详细步骤2.2 代码示例3.leetcode 72. 编辑距离3.1思路及详细步骤3.2 代码…