【JavaEE】前后端综合项目-博客系统(下)

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

【JavaEE】前后端综合项目-博客系统(下)

【JavaEE】前后端综合项目-博客系统(下),JavaEE,java-ee,java

【JavaEE】前后端综合项目-博客系统(下)

紧接上文:【JavaEE】前后端综合项目-博客系统(上)_s:103的博客-CSDN博客

1. 博客登录页

1.1 用户名密码校验

【JavaEE】前后端综合项目-博客系统(下),JavaEE,java-ee,java

1.1.1 约定前后端交互接口

请求:POST

向谁请求:/login

响应:302(重定向)location:博客列表页

请求的正文格式:application/x-www-from-urlencoded

  • query string格式一样
  • ?username=xxx&password=xxx
  • 这里我们前端代码就是通过from表单提交的,所以就简单的用这个也可以~
1.1.2 后端代码

【JavaEE】前后端综合项目-博客系统(下),JavaEE,java-ee,java

  1. 获得的是form格式的请求,那么后端要以utf8去理解
  2. 用getParameter方法去获取参数
  3. 在数据库中去查找核对
  4. 核对成功再重定向
    • 并且设置会话(Session)
    • 博客传送门:【JavaEE】Cookie与Session的前后端交互-表白墙登录设计_s:103的博客-CSDN博客
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.setCharacterEncoding("utf8");
    resp.setContentType("text/html;charset=utf8");
    String username = req.getParameter("username");
    String password = req.getParameter("password");
    if(username == null || username.replaceAll(" ", "").equals("") 
       || password == null || password.replaceAll(" ", "").equals("")) {
        String html = "<h3>登录失败</h3>";
        resp.getWriter().write(html);
        return;
    }
    UserDao userDao = new UserDao();
    User user = userDao.selectUserByName(username);
    if(user == null) {
        String html = "<h3>登录失败</h3>";
        resp.getWriter().write(html);
    }else {
        if(user.getPassword().equals(password)) {
            HttpSession httpSession = req.getSession(true);
            httpSession.setAttribute("user", user);
            resp.sendRedirect("博客列表页.html");
        }else {
            String html = "<h3>登录失败</h3>";
            resp.getWriter().write(html);
        }
    }
}
  • 没有重定向,from表单跳转到/login,也就是响应的内容

重定向中有中文会导致重定向失败:
【JavaEE】前后端综合项目-博客系统(下),JavaEE,java-ee,java

将html文件的名字改文英文,并且其他关联代码都需要更改!

resp.sendRedirect("blog_list.html");
1.1.3 前端代码

【JavaEE】前后端综合项目-博客系统(下),JavaEE,java-ee,java

【JavaEE】前后端综合项目-博客系统(下),JavaEE,java-ee,java

1.2 登录信息记忆功能

要求:

  1. 登录页在有登录信息的时候,核对成功后自动登录
  2. 其他页面在没有登录信息的时候,强制退出登录
1.2.1 约定前后端交互接口

请求:GET

向谁请求:/login

响应:成功:200,失败:403

  • 前端可以通过success接受2开头的响应信息,error接受其他响应信息
1.2.2 后端代码
  • 由于无更改密码的操作,所以在会话中,只有登录成功才有记录,所以只需要判断有没有对应的映射就行了
ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    HttpSession session = req.getSession(false);
    if(session == null) {
        resp.setStatus(403);
        return;
    }
    User user = (User) session.getAttribute("user");
    if(user == null) {
        resp.setStatus(403);
        return;
    }
    resp.setStatus(200);
    resp.setContentType("application/json; charset=utf8");
    String ret = objectMapper.writeValueAsString(user);
    resp.getWriter().write(ret);
}
1.2.3 前端代码
  • 只需要在访问对应html的时候发送请求即可

其他三个页面

jQuery.ajax({
    type:"get",
    url:"login",
    error: function(body) {
        location.href = "blog_login.html";
    }
});

登录页

jQuery.ajax({
    type: "get",
    url: "login",
    success: function(body) {
        location.href = "blog_list.html";
        alert("欢迎" + body.username + "!");
    }
});

【JavaEE】前后端综合项目-博客系统(下),JavaEE,java-ee,java

1.3 显示用户/作者信息功能

要求:

  1. 列表页左侧栏显示的是登录的用户信息
  2. 详情页左侧栏显示的是博客作者的信息

对于列表页,复用一下刚才的后端代码即可,因为成功的时候,会返回用户信息user的json字符串

  • 只需要前端对success的情况进行处理即可
    【JavaEE】前后端综合项目-博客系统(下),JavaEE,java-ee,java

【JavaEE】前后端综合项目-博客系统(下),JavaEE,java-ee,java

而对于详情页,则需要多一段逻辑:通过博客id,确定用户id

1.3.1 约定前后端交互接口

请求:GET

向谁请求:/user&blogId=xxx

响应:这篇博客作者的用户信息(json)

1.3.2 后端代码

【JavaEE】前后端综合项目-博客系统(下),JavaEE,java-ee,java

ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.setCharacterEncoding("utf8");
    String id = req.getParameter("blogId");
    if(id == null) {
        resp.setStatus(404);
        return;
    }
    BlogDao blogDao = new BlogDao();
    Blog blog = blogDao.selectOne(Integer.parseInt(id));
    if(blog == null) {
        resp.setStatus(404);
        return;
    }
    UserDao userDao = new UserDao();
    User user = userDao.selectUserById(blog.getUserId());
    if(user == null) {
        resp.setStatus(404);
        return;
    }
    user.setPassword("");//返回密码有点不安全~
    resp.setContentType("application/json; charset=utf8");
    String ret = objectMapper.writeValueAsString(user);
    resp.getWriter().write(ret);
}
  • 返回404代表不存在,跳转到列表页~
1.3.3 前端代码
jQuery.ajax({
    type:"get",
    url:"user" + location.search,
    success: function(body) {
        jQuery(".card h3").text(body.username);
        jQuery(".card img").attr("src", body.image);
        jQuery(".card a").attr("href", body.git);
    },
    error: function(body) {
        location.href = "blog_list.html";
        alert("error");
    }
});

为了有区分,我们在数据库里添加几个user

insert into user values(null, '小空多尼', '123456', '马铭胜帅照.png', 'https://gitee.com/bitpg/projects');
insert into user values(null, '小空你几哇', '123456', '微信图片_20230225230636.png', 'https://gitee.com/HGtz2222');
insert into user values(null, '小斯密码塞', '123456', 'JavaEE.png', 'https://gitee.com/gaobo1');

【JavaEE】前后端综合项目-博客系统(下),JavaEE,java-ee,java

1.4 退出登录功能

要求:

  1. 退出登录(注销登录信息)后,返回到登录页
  2. 并且登录页不会强制登录,并且直接访问其他页面会强制退出登录
1.4.1 前后端交互接口

请求:GET

向谁请求:/logout

响应:重定向到博客登录页

  • 最主要是在期间让session失效
  • 即打断映射关系

而请求只需要让a标签发出即可

1.4.2 后端代码
@WebServlet("/logout")
public class logoutServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession(false);
        if(session != null) {
            session.removeAttribute("user");
            //session.invalidate();也可以,但是这个是把整个session失效
        }
        resp.sendRedirect("blog_login.html");
    }
}
1.4.3 前端代码
  • 前端代码及其简单
    【JavaEE】前后端综合项目-博客系统(下),JavaEE,java-ee,java

【JavaEE】前后端综合项目-博客系统(下),JavaEE,java-ee,java

2. 博客编辑页

无非就是将所编辑的博客打包成blog存进数据库呗,其他都好办,除了博客的内容,是在md编辑器里的一个元素的内容,所以要通过一些特殊方法(官方给出的方法)

  1. 构造隐型文本框
  2. 内容同步到文本框
2.1 前后端交互接口

请求:POST

向谁请求:/blog

请求正文:application/x-www-from-urlencoded

  • ?title=xxx&content=xxxxx
  • 用户id,博客id,时间都可以在后端自己获取

响应:非空校验后重定向到主页,否则显示提交失败

2.2 后端代码

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.setCharacterEncoding("utf8");
    HttpSession session = req.getSession(false);
    String content = req.getParameter("content");
    String title = req.getParameter("title");
    if(session == null ||
       title == null || title.replaceAll(" ", "").equals("") ||
       content == null || content.replaceAll(" ", "").equals("")
      ) {
        resp.setContentType("text/html;charset=utf8");
        resp.getWriter().write("<h3>提交失败!</h3>");
        return;
    }
    User user = (User) session.getAttribute("user");
    Blog blog = new Blog();
    blog.setTitle(title);
    blog.setPostTime(new Timestamp(System.currentTimeMillis()));
    blog.setContent(content);
    blog.setUserId(user.getUserId());
    BlogDao blogDao = new BlogDao();
    blogDao.insert(blog);
    resp.sendRedirect("blog_list.html");
}

2.3 前端代码

【JavaEE】前后端综合项目-博客系统(下),JavaEE,java-ee,java

  • 隐型输入框

【JavaEE】前后端综合项目-博客系统(下),JavaEE,java-ee,java

  • 同步到输入框

补充,导航栏的头像我不更改,那是系统的创作者的头像/logo,所以不更改
【JavaEE】前后端综合项目-博客系统(下),JavaEE,java-ee,java


文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆

后续推出更多功能,敬请期待!

通过这个项目可以很好的提高我们对前后端交互的认知!

本文代码链接:BlogSystem · 游离态/马拉圈2023年7月 - 码云 - 开源中国 (gitee.com)文章来源地址https://www.toymoban.com/news/detail-562191.html


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

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

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

相关文章

  • 【Servlet综合项目练习】实现一个简单的博客系统~

    目录 🌟一、数据库设计部分 1、建表分析:系统中一共要实现几张表?  2、开始建表 🌟二、大概框架与实现功能 🌟 三、代码实现部分 🌈前言1:工具类的实现(utils包下) 1、数据库连接的工具类 2 、 用户信息判空的工具类 3、判断当前用户是否已经登录的工具类 🌈前

    2024年02月15日
    浏览(37)
  • Springboot+vue的时间管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

    Springboot+vue的时间管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 本文设计了一个基于Springboot+vue的前后端分离的时间管理系统,采用M(model)V(

    2024年02月07日
    浏览(45)
  • ssm+vue的论文管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

    ssm+vue的论文管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 采用M(model)V(view)C(controller)三层体系结构,通过 Spring + SpringMvc+ Mybatis+Vue+Maven 来实现。

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

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

    2024年02月13日
    浏览(72)
  • Springboot+vue的教学资料管理系统(有报告)。Javaee项目,springboot vue前后端分离项目

    Springboot+vue的教学资料管理系统(有报告)。Javaee项目,springboot vue前后端分离项目 本文设计了一个基于Springboot+vue的前后端分离的教学资料管理系统,采用M(model)V(view)C(controller)三层体系结构,通过Spring + SpringBoot + Mybatis+Vue+Maven来实现。MySQL数据库作为系统数据储存平

    2024年02月04日
    浏览(55)
  • Springboot+vue的开放性实验室管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

    ssm+vue的开放性实验室管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。 采用M(model)V(view)C(controller)三层体系结构,通过Spring + SpringMvc+ Mybatis+Vue+Maven来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。界面简洁,操作简单。

    2024年02月07日
    浏览(63)
  • 【JavaEE基础学习打卡03】Java EE 平台有哪些内容?

    📜 本系列教程适用于Java Web初学者、爱好者,小白白。我们的天赋并不高,可贵在努力,坚持不放弃。坚信量最终引发质变,厚积薄发。 🚀 文中白话居多,尽量以小白视角呈现,帮助大家快速入门。 🎅 我是 蜗牛老师 ,之前网名是 Ongoing蜗牛 ,人如其名,干啥都慢,所以

    2024年02月12日
    浏览(45)
  • 【JavaEE基础学习打卡02】是时候了解Java EE了!

    📜 本系列教程适用于 Java Web 初学者、爱好者,小白白。我们的天赋并不高,可贵在努力,坚持不放弃。坚信量最终引发质变,厚积薄发。 🚀 文中白话居多,尽量以小白视角呈现,帮助大家快速入门。 🎅 我是 蜗牛老师 ,之前网名是 Ongoing蜗牛 ,人如其名,干啥都慢,所

    2024年02月12日
    浏览(47)
  • 前端综合项目-个人博客网页设计

    个人博客前端部分设计 从零设计一个页面太难了,我们可以通过预预计的效果去写代码实现! 总不能没头没脑的边写边设计吧,总得有个参考 前端知识不做赘述了,大家可以去看看我之前写的前端博客 这只是我的设计,css更多定制内容,您可以灵活变通! 我的博客系统分

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

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

    2024年02月02日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包