【Java EE】-博客系统二(前后端分离)

这篇具有很好参考价值的文章主要介绍了【Java EE】-博客系统二(前后端分离)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者:学Java的冬瓜
博客主页:☀冬瓜的主页🌙
专栏:【JavaEE】
分享:
徘徊着的 在路上的 你要走吗
易碎的 骄傲着
那也曾是我的模样
——《平凡之路》

主要内容:显示用户信息、上传头像、新增博客、删除博客、修改博客。

【Java EE】-博客系统二(前后端分离)

一、显示用户信息

分两个子功能:列表页显示登录用户信息;详情页显示博客作者信息。

1)列表页显示登录用户信息

1>约定前后端交互接口
【Java EE】-博客系统二(前后端分离)

2>编写前端代码

理解:在blog_list.html中,在写验证登陆时,就把user作为json格式的字符串响应给前端,在这里前端只需要新增一点东西,即验证登录成功后,取出username显示在页面上。
【Java EE】-博客系统二(前后端分离)

3>编写后端代码

理解:在loginServlet的doGet方法中,在写验证登陆时,就把user作为json格式的字符串响应给前端,和其他地方的验证登录一样,如果未登录(session为null,或session中没有当前用户的会话),则返回一个userId为null的user对象。如果已经登录,那么就根据userId查询数据库,再响应从数据库中根据userId查出来的user给前端。

2)详情页显示博客作者信息

1>约定前后端交互接口

理解:从博客列表页跳转到博客详情页时,带了博客的id,在发ajax请求时,把博客id带上,到后端去查询该篇博客对应的用户id,再查出该用户写回给前端。
【Java EE】-博客系统二(前后端分离)

2>编写前端代码
在blog_detail.html中:
【Java EE】-博客系统二(前后端分离)
3>编写后端代码
在AuthorServlet的get方法中:
【Java EE】-博客系统二(前后端分离)

二、上传头像

分两个子功能:上传头像、显示头像。

1)上传头像

思路:前端使用file控件将文件上传后,后端需要读取这个上传的文件并把它保存在另外一个路径下,并且得保证这个路径是唯一的(所以用uuid作为另存的文件名),然后需要把路径保存在当前修改头像对应的用户在数据库的用户信息。

1>约定前后端交互接口
【Java EE】-博客系统二(前后端分离)

【Java EE】-博客系统二(前后端分离)
multipart/form-data请求体格式:
【Java EE】-博客系统二(前后端分离)

2>编写前端代码

理解:在card_upload.html页面中,提交POST请求,并给上传的标签input文件加上name属性便于后端使用getPart()方法获取上传的文件。
【Java EE】-博客系统二(前后端分离)

3>编写后端代码

在LoadCardServlet的doPost方法中,使用req.getPart()获取上传的文件,然后再获取上传文件的流。生成uuid作为另存文件名(保证文件的唯一,保证多用户同时修改头像不出问题)。
1>并另存该上传文件在web项目中,路径为:路径:/static/upload/uuid.png
2>然后根据session中的会话取出当前登录用户,并把uuid.png保存在数据库对应的用户的信息中。
3>写一个a标签,用于头像上传成功后,跳转到博客列表页面。
【Java EE】-博客系统二(前后端分离)
【Java EE】-博客系统二(前后端分离)
【Java EE】-博客系统二(前后端分离)

2)显示头像

思路:使用GET方法,请求获取头像。从数据库中查出这个唯一的路径,并响应给前端(可以使用静态资源配置,我弄了半天没弄出来,等以后有机会再弄),前端将这个路径作为相对路径解析,补全网络路径,去除字符串拼接引号带来的影响。最后将这个路径赋值给对应头像位置img的src属性。

1> 列表页显示登录用户头像

1>约定前后端交互接口
【Java EE】-博客系统二(前后端分离)

2>编写前端代码

在blog_list.html页面中,在写验证登陆时,就把user作为json格式的字符串响应给前端blog_list.html,在前端blog_list.html,显示用户名时,只需要新增一处,即验证登录成功后,取出username显示在页面上。【Java EE】-博客系统二(前后端分离)
同时验证登陆成功后,如果此时登陆用户的headpPath为null,则直接返回,即:使用默认的头像。如果此时headPath不为null,那么发送请求获取头像,如下图:【Java EE】-博客系统二(前后端分离)
后端给响应结果路径:/uploads/uuid.png,在前端这里补满路径,再给img的src赋值,自动获取图像。

3>编写后端代码

通过blog_list.html的获取头像的请求,来到了LoadCardServlet的doGet方法中,(前端传输的地址栏上没有blogId)在这里获取当前登录的用户id,根据当前登录的id去查询数据库,查出uuid.png,并把/uploads加在这个文件名前。写回给前端。
【Java EE】-博客系统二(前后端分离)
【Java EE】-博客系统二(前后端分离)
【Java EE】-博客系统二(前后端分离)

问题:这里如果直接从session中取出登录用户,然后直接取出headPath行不行?
理解:不行!因为登陆时,session创建并把我的登录信息保存在session中,但是在这之后我修改了头像,那如果我直接从session里的用户的headPath取出,这个headPath是我头像修改前的路径,就出问题了!
同时因为这里获取用户头像的请求是在checkLogin()方法的检验登陆的回调函数中发起的,所以发起检验请求时,在LoginServlet类中,如果检验登录通过,应当从数据库查出该user,再返回给前端,确保发起获取头像请求的条件成立(即检验请求的响应是user,user的头像路径属性不为null)。【Java EE】-博客系统二(前后端分离)

2> 详情页显示博客作者头像

1>约定前后端交互接口
【Java EE】-博客系统二(前后端分离)
2>编写前端代码

理解:在blog_detail.html页面中,在发起检查当前状态是否登录的回调函数中,如果返回的user的userId=0,那么当前未登录,需要强制跳转到登陆页面。如果user的的属性headPath为null,那么只需要修改用户名,不需要修改头像。如果user的属性headPath不为null,那就再发起一个获取头像的请求,该请求带上该篇博客blogId以便后端查询到该篇博客对应的作者。回调函数返回/uploads/uuid.png,把它补全为一个网路路径,再赋值给img的src,就可以获取头像。
【Java EE】-博客系统二(前后端分离)
【Java EE】-博客系统二(前后端分离)【Java EE】-博客系统二(前后端分离)

3>编写后端代码
通过前端的请求,来到了LoadCardServlet的doGet方法中,先判断blogId是否为null,为null代表是博客列表页发起的获取头像请求,不为null,则代表是博客详情页发起的获取头像请求,需要通过博客id查数据库找到该篇博客blog,再通过该篇博客的userId属性找到对应作者user,再把对应作者的属性headPath(uuid.png)前加上/uploads/响应给前端。
【Java EE】-博客系统二(前后端分离)

【Java EE】-博客系统二(前后端分离)

3> 简述修改geet地址统计博客数量及博客分类

补充:个人信息的小卡片:
【Java EE】-博客系统二(前后端分离)

  • 注:在小卡片上,还有gitee地址,文章数量,文章分类。修改gitee功能就是修改路径,然后个人文章数量和博客类型,可以由以下思路去实现。
    统计博客数量:后端提供一个查询当前用户的博客数据统计的接口,从数据库blog表查询出来当前用户的博客数量,显示在前端页面上。
    博客分类:再使用一张表flg(类型表),这张表中的类型和博客的关系是多对多关系。需要使用另一张表设置blog表和flag表的外键,来建立相互之间的联系。

三、新增博客

说明:除了登录、注册页面,其他页面(要求强制登录才可访问博客系统),都可以点击导航栏上的写博客,跳转到写博客的页面。
一篇博客,内容包含博客Id,标题title,正文content,发布时间postTime,作者id。在这里博客id可以设置主键自增,发布时间和作者id都可以在后台设置,因此前端只需要输入标题title和正文content即可。

1>约定前后端交互接口
【Java EE】-博客系统二(前后端分离)

2>编写前端代码

理解:在blog_edit.html页面中,需要对markdown编辑器进行初始化,调用editormd()方法可完成初始化。点击发布文章,就把title和content提交到后端。
【Java EE】-博客系统二(前后端分离)
【Java EE】-博客系统二(前后端分离)

3>编写后端代码

理解:点击发表文章,就把title和content发送到了BlogServlet的doPost()方法中。在BlogServlet的doPost()方法中,获取文章标题和正文(主要:获取前先把req的字符集设置成utf8,防止乱码问题),并获取登录会话从而获取到当前登录的userId,同时new TimeStamp()参数是当前时间戳生成时间。然后将title,content,postTime,userId装入一个Blog对象中,再进行数据库插入博客操作。插入成功后,重定向到博客列表页面,列表页面自己再发送ajax请求获取当前博客列表数据,这篇博客就展示到列表页面了。
【Java EE】-博客系统二(前后端分离)
【Java EE】-博客系统二(前后端分离)

四、显示删除和编辑按钮

说明:
1> 对于博客的删除和编辑来说,都应该是博客作者才有的权限,非作者只能浏览博客。因此这个功能就是为了实现这而写的,具体为:如果当前登录用户和博客作者是一个人,就在前端给出删除和编辑按钮,否则没有这两个按钮。
2> 因为删除、修改博客,需要后端使用blogId去定位要删除博客,因此可以将删除和修改两个按钮放在博客详情页,因为博客列表页到详情页带了blogId,从详情页到删除和修改请求就可以在前端使用location.search带上blogId,很方便。

1>约定前后端交互接口
【Java EE】-博客系统二(前后端分离)

2>编写前端代码

理解:在blog_detail.list页面中,发送检查当前登录用户是否是一个人的请求后,后端响应给前端一个json格式的blog字符串。前端jQuery封装的Ajax将它解析为json格式的blog对象(js对象),然后如果userId=0,那么消除两个a标签的样式。如果userId>0,那么就给a标签加上名称和路径,删除的路径是像后端发起一个get请求,编辑则是跳转到blog_edit.html页面,注意两个路径都会带上blogId。
【Java EE】-博客系统二(前后端分离)
【Java EE】-博客系统二(前后端分离)

3>编写后端代码

理解:在CheckLoginUserAndAuthor类的doGet方法中,从会话session中取出当前登录用户,并通过blogId获取该篇博客从而获取这篇博客的userId(authorId),再和登录用户的id比较,不相等则new一个blog对象,这个对象的成员全部为初始值,要么为null,要么为0,并将这个对象响应给前端。如果authorId和登录用户的id相等,那么直接响应给前端已经从数据库查出的blog对象。
【Java EE】-博客系统二(前后端分离)

五、删除博客

1>约定前后端交互接口
【Java EE】-博客系统二(前后端分离)

2>编写前端代码

在bolg_detail.html中,当当前登录用户和博客作者是同一个人时,显示了删除按钮,点击这按钮,就触发get请求给后端。
【Java EE】-博客系统二(前后端分离)

3>编写后端代码

当当前登录用户和博客作者是同一个人时,点击删除博客按钮,跳转到DeleteBlogServlet的doGet方法中,先获取当前博客的id,然后查询数据库是否有该博客id,有的话最后删除并跳转回blog_list.html页面。
【Java EE】-博客系统二(前后端分离)

六、修改博客

1>约定前后端交互接口
获取博客请求:
【Java EE】-博客系统二(前后端分离)
修改博客请求:
【Java EE】-博客系统二(前后端分离)

2>编写前端代码

说明:在bolg_detail.html中,当当前登录用户和博客作者是同一个人时,显示了编辑按钮,点击这按钮,跳转到blog_edit.html页面,这个跳转的请求我就不解释了,重点在blog_edit.html中怎么讲博客的原来的信息展示在编辑页的markdown文档中。
在blog_edit.html中,判断从其他地方跳转到当前页面时,有没有query string,没有query string,就认为是点击写博客触发跳转到blog_edit.html页面;而如果有query string,就认为是点击编辑按钮触发跳转到blog_edit.html页面。我们刚才也说了,从blog_detail.html页面点击编辑博客会带上博客Id,因此此时是带有blogId,即有query string,因此下面的代码就不是在if条件中进行markdown初始化,而是在else条件中对blogId对应的这篇博客进行markdown编辑页面的信息填充。
【Java EE】-博客系统二(前后端分离)
【Java EE】-博客系统二(前后端分离)
注意:修改操作至少涉及到三个比较关键的请求:
1>从blog_detail.html跳转到blog_edit.html。
2>将该篇博客信息在markdown编辑器中填充,这里通过发送ajax请求,来在前端获取该篇博客,并将博客信息(title和content)展示在markdown编辑器中。
3> 发布文章的路径修改,并且复用上传博客时的html代码,将发布文章的请求路径修改成edit?blogId="博客Id"
【Java EE】-博客系统二(前后端分离)

3>编写后端代码

第一个请求前端可以直接跳转,tomcat自动帮它跳转。
第二个请求,即获取当前博客信息的请求,后端代码就是复用BlogServlet的doGet方法,并通过blogId从数据库查出blog,把blog以json格式的字符串写给前端,这样就可以将该篇编辑的博客的内容写到markdown编辑器上。
第三个请求,即真正的修改的请求,点击发布文章,路径会跳转到EditBlogServlet的Post方法中,该方法会像点击写博客后发布博客那样,只是此时blogId,postTime和userId应当是固定不变的(和原来一样),然后在数据库中只需修改博客标题title和博客正文content。
最后重定向到blog_list.html页面,获取新的博客列表信息。【Java EE】-博客系统二(前后端分离)
【Java EE】-博客系统二(前后端分离)文章来源地址https://www.toymoban.com/news/detail-515297.html

到了这里,关于【Java EE】-博客系统二(前后端分离)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 个人博客系统(前后端分离)

    努力经营当下,直至未来明朗! 普通小孩也要热爱生活! 个人博客系统采用前后端分离的方法来实现,同时使用了数据库来存储相关的数据,同时使用tomcat进行项目的部署。前端主要有四个页面构成:登录页、列表页、详情页以及编辑页,以上模拟实现了最简单个博客列表

    2024年02月02日
    浏览(41)
  • 基于Java+MySQL+Tomcat+Servlet+Maven+JQuery+jackson+开源Markdown编辑器实现前后端分离个人博客系统

    目录 项目简介 模块实现 设计实现数据库相关代码 博客列表页 博客详情页 注册页 登录页 检测登录状态 显示用户信息 退出登录 发布博客 删除博客 统计博客数量 效果展示 部分代码展示 小结:     项目中使用了Java ,MySQL ,Tomcat ,Servlet ,Maven ,JQuery ,jackson,开源MarkDo

    2024年02月02日
    浏览(49)
  • 项目实战-前后端分离博客系统

    纯后端讲解 完整的前台后台代码编写 主流技术栈(SpringBoot,MybatisPlus,SpringSecurity,EasyExcel,Swagger2,Redis,Echarts,Vue,ElementUI....) 完善细致的需求分析 由易到难循序渐进 ​我们有前台和后台两套系统。两套系统的前端工程都已经提供好了。所以我们只需要写两套系统的后端。 ​但是

    2024年02月14日
    浏览(43)
  • 【基于前后端分离的博客系统】Servlet版本

      🎉🎉🎉 点进来你就是我的人了 博主主页: 🙈🙈🙈 戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔 🤺🤺🤺 目录 一. 项目简介  1. 项目背景 2. 项目用到的技术 3. 项目功能简单介绍  二. 博客系统页面设计  三. 项目准备工作 前后端交互约定内容的分析  1. 接口

    2024年02月08日
    浏览(40)
  • 大型医院云HIS系统:采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发 融合B/S版电子病历系统

    一套医院云his系统源码 采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发。融合B/S版电子病历系统,支持电子病历四级,HIS与电子病历系统均拥有自主知识产权。 文末卡片获取联系! 基于云计算技术的B/S架构的医院管理系统(简称云HIS),采用前后

    2024年02月03日
    浏览(50)
  • SSM项目前后端分离+IDEA运行环境(含前端源码)(个人博客系统)

    目录  后端项目环境配置 1、创建一个SpringBoot项目,添加MyBatis框架和数据库MySQL驱动依赖 2、配置项目文件:application.yml 3、创建数据库表 4、创建分层结构目录 返回统一数据格式  创建统一数据格式返回类:AjaxResult 创建实现统一数据返回的保底类:ResponseAdvice 统一处理 登录

    2024年02月13日
    浏览(75)
  • 川西旅游网系统-前后端分离(前台vue 后台element UI,后端servlet)

    前台:tour_forword: 川西旅游网前端----前台 (gitee.com) 后台:tour_back: 川西旅游网-------后台 (gitee.com) 后端 :tour: 川西旅游网------后端 (gitee.com)

    2024年02月07日
    浏览(40)
  • 博客项目(前后端分离)(servlet实战演练)

    作者简介:大家好,我是未央; 博客首页: 未央.303 系列专栏:实战项目 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!! 文章目录 前言 项目介绍 一、MVC模式简介 1.1  MVC 模式含义 1.2 MVC 的工作流程 二、项目概述 2.1 项目的几个页面 2.2 功能大概

    2024年02月07日
    浏览(40)
  • 前后端分离------后端创建笔记(02)

     本文章转载于【SpringBoot+Vue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论,如有侵权请联系 源码:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/1ZZ8c-kRPUxY6FWzsoOOjtA 提取码:up4c 项目概述笔记:https://blog

    2024年02月12日
    浏览(37)
  • 前后端分离------后端创建笔记(11)用户删除

     1.1 首先做一个删除的功能接口,第一步先来到后端,做一个删除的接口  3.1这里给他调一下删除方法,用下面这个 3.2 接口准备好了,但是这里存在了一个问题,它真的会把数据给改掉 9.1 10.1   12.1   15.1  18.1 在main.js中定义出来   25.1 把代码拿过来 27.1 删除成功了

    2024年02月12日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包