个人博客系统

news2024/11/15 21:43:37

目录

  • 一、项目简介
  • 二、项目开发流程
    • 2.1 准备工作
    • 2.2 实现Vue层
    • 2.2 实现Model层
    • 2.4 实现Controller层

一、项目简介

基于servlet,采用前后端分离的方式,实现个人博客系统,功能包括:登录、注销、编辑、删除博客、发布博客等.

二、项目开发流程

2.1 准备工作

准备工作包括,创建maven项目,引入依赖servlet,jackson,mysql,
说明:

  1. 在引入servlet依赖时,tomcat的版本要和servlet的版本对应
  2. jackson依赖包的作用是序列化(将Java对象转成json)与反序列化(将json反序列化成Java对象),主要使用的是ObjectMapper对象

2.2 实现Vue层

将前端页面拷贝到webapp目录下
因为在后续打包部署时,也要讲前端页面一起打包
在这里插入图片描述

2.2 实现Model层

Model层主要工作是实现数据库相关的代码

(1)设计数据库,也就是创建数据库和设计表结构
根据需求设计数据库,我们的需求包括博客列表页的展示,查看全文,登录,柏编辑页,需求中主要涉及到两个实体——博客和用户,因此我们要创建博客表和用户信息表

博客表:存储所有的博客数据
用户表:存储所有的用户信息

将建库建表的sql语句存储到db.sql中

在这里插入图片描述
博客表中的字段:博客id(自增主键),标题,正文,作者id,发布时间
用户表中的字段:用户id(自增主键),用户名,密码

(2)封装数据库操作

  • DBUtil类用来与数据库建立连接

  • 实体类Blog和User,每个Blog和User对象都对应表中的一条记录

  • BlogDao类和UserDao类分别提供了对Blog和User进行增删改查的操作
    在这里插入图片描述

2.4 实现Controller层

针对四个页面(登录页,列表页,详情页,编辑页),分别约定前后端交互接口,然后编写后端和前端代码

(1)博客列表页:在这个页面中需要展示出数据库中所有的博客

  • 约定前后端接口:
    请求: GET方法 url:/blog
    响应:返回json格式字符串

在这里插入图片描述

  • 实现服务器端代码,通过BlogServlet类
  • 编写客户端代码,在页面加载的时候,发送ajax请求给服务器,获取到数据库中的博客数据,并填到页面中

(2)博客详情页:在博客详情页的页面加载的过程,触发ajax请求来访问服务器,获取到博客内容,然后填充到博客详情页中

  • 约定前后端交互接口
    请求:GET方法 url: /blog?blogId=1
    响应:json对象(包含了博客的详情)

在这里插入图片描述

  • 实现服务器端代码,同样通过BlogServlet类中的doGet方法处理前端发来的请求,先尝试获取请求中的blogId参数,如果blogId不存在说明该请求是用来获取博客列表,如果blogId存在,说明请求是用来获取某篇博客的详情
  • 实现前端代码,加载博客详情页时,发送ajax请求给服务器,获取博客详情并显示到页面上

(3)登录页:用户输入用户名和密码进行登录

  • 约定前后端接口
    请求:POST方法 url:/login
    数据格式:application/x-www-form-urlencoded ,使用form表单提交用户名和密码给后端
    响应:状态码 302,因为登录成功后需要进行跳转
    Location:blog_list.html
    在这里插入图片描述
  • 实现服务器端,通过LoginServlet类处理前端发来的登录请求
    获取请求中的参数,然后和数据库中的内容进行比较,比较通过则创建会话

(4)实现验证登录的功能:也就是在访问博客列表页或详情页时,需要检查用户的登录状态,如果此时用户未登录需要强制跳转到登录页
实现的方式是,在访问博客列表页和详情页时通过ajax发送请求,获取用户的登录状态,如果没有获取到则跳转到登录页

  • 约定前后端交互接口
    请求:方法GET url:/login
    响应:如果此时有用户登录,则返回状态码200,如果没有用户登录则返回403

  • 实现服务器代码,在LoginServlet中添加doGet方法,用来验证用户的登录信息

  • 实现客户端代码,通过ajax发送验证登录的请求,根据后端返回的状态码,决定是否要跳转到登录页

(5)正确显示用户信息:在博客列表页显示当前登录的用户,在博客详情页显示当前文章的作者信息
在这里插入图片描述
在这里插入图片描述
对于博客列表页来说:

  • 约定前后端接口:GET方法 url:userInfo
  • 实现后端代码:通过UserInfoServlet类,返回当前登录的用户信息
  • 实现前端代码:访问列表页时,通过ajax发送请求,从服务器获取当前登录用户的信息并显示到页面上

对于博客详情页来说:

  • 约定前后端接口:GET方法 url:userInfo?blogId=?
  • 实现后端代码:通过UserServlet类,通过url中的blogId查找到对应的文章作者信息,然后返回
  • 实现前端代码:访问详情页时,发送ajax请求,从服务器获取当前文章作者的信息并显示到页面上

(6)实现注销功能:退出当前登录的状态
在这里插入图片描述

  • 约定前后端接口:GET方法 url:logout
  • 实现后端代码:通过LogoutServlet类处理前端发来的注销请求,获取当前登录用户的session对象,将session中的user属性删除,并返回一个重定向地址,因为我们在验证用户登录的时候需要同时具备session对象和user属性
  • 实现前端代码:在注销按钮的 a标签中的herf属性添加logout,这样在点击注销按钮的时候,同时发送一个请求给后端

(7)发布博客的功能:在博客编辑页,点击发布博客后,能后将该博客存储到数据库中,并且能在博客列表页中显示出来
在这里插入图片描述

  • 约定前后端交互接口:POST方法 url:blog
  • 请求的Content-Type:application/x-www-form-urlencoded,使用form表单的方式将文章发送给后端
  • 响应:返回 状态码 302 ,Location:blog_list.html,重定向到博客列表页
  • 实现后端代码:从请求中获取文章信息,包括作者,标题,正文等,构造成一篇博客并存储到数据库中,返回一个重定向地址
  • 实现前端代码:通过form表单发送文章信息给后端服务器

(8)删除博客的功能:只有当前登录的用户能删除其自己写的博客而不能删除别人的博客,例如当前的登录用户为张三,那么张三只能删除文章作者为张三的文章,而不能删除其他作者的文章
在这里插入图片描述

页面上的处理:
因此我们需要在博客详情页进行判断,当前文章作者和登录用户是否是同一个人,如果是就在导航栏中添加一个删除按钮,如果不是就不显示

服务器端的处理:
用户点击删除按钮,触发一个HTTP请求,HTTP请求就会让服务器删除指定的博客

判断登录用户和文章作者的关系:

  • 约定前后端接口:GET方法 url:userInfo?blogId=?
  • 实现后端代码:在User类中添加字段yourblog,当前字段非0表示该文章是当前登录用户写的,反之不是,在UserInfoServlet类中,判断当前登录用户和当前温行作者是否是同一个人,如果是将yourblog设置为1并返回,如果不是则设置为0
  • 实现前端代码:访问详情页时,通过ajax发送请求,从服务器获取作者信息,判断yourblog字段,如果非0,则在当前页面添加删除按钮,否则不添加

实现删除功能:

  • 约定前后端接口:GET方法 url:blogDelete?blogId=?
  • 实现后端代码:通过BlogDeleteServlet类处理前端的删除请求,通过blogId将文章从数据库中删除,并返回重定向地址到博客列表页
  • 实现前端代码:在删除按钮的herf属性中添加 blogDelete?blogId=?,点击删除按钮,就会给后端发送请求

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

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

相关文章

用了10年开源工具,换了Smartbi后,3分钟搞定一份报表

大约在20年前,中国企业开始应用国外BI软件,报表工具可以说是BI 1.0时代的代表产物。在BI软件盛行之初,大部分软件都有开源的,从系统到数据库到各类工具、应用,当时大部分企业使用的BI软件包括报表工具,也都…

外汇天眼:外汇占款是什么意思? 与外汇储备之间的差额是由哪些原因造成的?

外汇占款就是指受资国中央银行回收外汇财产而相对投放的本币。 因为人民币是是非非随意换取代币,外资企业导入后需换取成人民币才可以进到商品流通应用,国家以便外资企业兑换外币要投入很多的资产提升了贷币的需要量,产生了外汇占款。 外汇占…

线程池源码解析 3.excute() 方法

线程池源码解析—excute()方法 execute() execute 方法是线程池的核心方法,所有的方法,包括包装的 FutureTask,都是调用这个方法。 大致流程 这里只是总结了一遍大致的流程,一些细节问题见下面的流程图或者参考源码。 当提交任…

【毕业设计】大数据电商销售预测分析 - python 数据分析

文章目录1 前言2 开始分析2.1 数据特征2.2 各项投入与销售额之间的关系2.3 建立销售额的预测模型3 最后1 前言 🔥 Hi,大家好,这里是丹成学长的毕设系列文章! 🔥 对毕设有任何疑问都可以问学长哦! 这两年开始&#x…

Java8新特性 CompletableFuture

Java8新特性 CompletableFuture 什么是CompletableFuture? CompletableFuture类的设计灵感来自于 Google Guava 的 ListenableFuture 类,它实现了 Future 和 CompletionStage 接口并且新增了许多方法,它支持 lambda表达式,通过回…

【IDEA插件】这5款IDEA插件,堪称代码BUG检查神器!

随着业务的发展,系统会越来越庞大,原本简单稳定的功能,可能在不断迭代后复杂度上升,潜在的风险也随之暴露,导致最终服务不稳定,造成业务价值的损失。而为了减少这种情况,其中一种比较好的方式就…

5.盒子阴影(重点)

提示:css3中新增了盒子阴影,我们可以使用box-shadow属性为盒子添加阴影。 1、语法: div{ box-shadow:"h-shadow"或者“v-shadow” } 解释: h-shadow 必须,水平阴影位置,允许负值。 v-shado…

UE4 回合游戏项目 18- 退出战斗

在上一篇(UE4 回合游戏项目 17- 进入指定区域触发战斗事件)基础上完成击败敌人从而退出战斗的功能。 效果: 步骤: 1.打开“battleScenario”蓝图,添加一个自定义事件,命名为“离开战斗” ​ 2.删除所有…

[附源码]Python计算机毕业设计_社区无接触快递栈

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

手撕二叉搜索树

目录 一、概念 二、常见操作 2.1 查找操作 2.2 插入操作 2.3 删除操作 三、模型应用 3.1 K模型 3.2 KV模型 3.3 代码完整实现 四、 性能分析 一、概念 二叉搜索树(BST,Binary Search Tree),也称二叉排序树或二叉查找树 它或者是一棵空树,或者是具有以下…

Spring整合Mybatis和Junit小案例(9)

Spring整合Mybatis和Junit环境准备步骤1:准备数据库步骤2:创建项目导入jar包步骤3:根据数据库的表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.properties文件步骤7&#xff…

5种常用格式的数据输出,手把手教你用Pandas实现

导读:任何原始格式的数据载入DataFrame后,都可以使用类似DataFrame.to_csv()的方法输出到相应格式的文件或者目标系统里。本文将介绍一些常用的数据输出目标格式。 01 CSV DataFrame.to_csv方法可以将DataFrame导出为CSV格式的文件,需要传入一个CSV文件名。 df.to_csv(done.…

在 SPRING Boot JPA 中调用带有本机查询中的参数的存储过程

配置pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…

惊了!10万字的Spark全文!

Hello&#xff0c;大家好&#xff0c;这里是857技术社区&#xff0c;我是社区创始人之一&#xff0c;以后会持续给大家更新大数据各组件的合集内容&#xff0c;路过给个关注吧!!! 今天给大家分享一篇小白易读懂的 Spark万字概念长文&#xff0c;本篇文章追求的是力求精简、通俗…

Linux(基于Centos7)(一)

文章目录一、任务介绍二、基本操作命令三、目录操作命令四、文件操作命令五、查看系统信息六、其他常用命令一、任务介绍 Linux服务器配置与管理&#xff08;基于Centos7.2&#xff09;任务目标&#xff08;一&#xff09; 实施该工单的任务目标如下&#xff1a; 知识目标 1、…

RNA剪接增强免疫检查点抑制疗效

什么是 RNA 剪接&#xff1f;真核生物基因包含一系列外显子和内含子&#xff0c;内含子必须在转录过程中被移除以便成熟的 mRNA 被翻译成蛋白质&#xff0c;RNA 剪接则是这一过程中至关重要的一步。RNA 剪接包含两类剪接事件。组成型剪接 (constitutive splicing): RNA 剪接的一…

【蓝桥杯Web】第十四届蓝桥杯(Web 应用开发)模拟赛 1 期-职业院校组 | 精品题解

&#x1f9d1;‍&#x1f4bc; 个人简介&#xff1a;一个不甘平庸的平凡人&#x1f36c; &#x1f5a5;️ Nodejs专栏&#xff1a;Node.js从入门到精通 &#x1f5a5;️ TS知识总结&#xff1a;十万字TS知识点总结 &#x1f449; 你的一键三连是我更新的最大动力❤️&#xff0…

企业级Java EE架构设计精深实践

内容简介 本书全面、深入介绍了企业级Java EE设计的相关内容&#xff0c;内容涵盖了Java EE架构设计的常见问题。 本书每一章讲解一个Java EE领域的具体问题&#xff0c;采用问题背景、需求分析、解决思路、架构设计、实践示例和章节总结的顺序组织内容&#xff0c;旨在通过分…

生成树(STP)

1.详细说明STP的工作原理 在二层交换网络中&#xff0c;逻辑的阻塞部分的接口&#xff0c;实现从跟交换机到所有节点唯一的路径称为最佳路径&#xff0c;生成一个没有环路的拓扑。当最佳路径出现故障时&#xff0c;个别被阻塞的接口将打开&#xff0c;形成备份链路。 2. STP的…

Redis的发布和订阅

Redis的发布和订阅 什么是发布和订阅 redis发布订阅&#xff08;pub/sub&#xff09;是一种消息通信模式&#xff1a;发布者&#xff08;pub&#xff09;发布消息&#xff0c;订阅者&#xff08;sub&#xff09;接收消息。 redis客户端可以订阅任意数量的频道。 redis的发布…