JavaEE-博客系统3(功能设计)

news2024/11/28 16:36:11

本部分内容为:实现登录功能;强制要求用户登录;实现显示用户信息;退出登录;发布博客




在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
该部分的后端代码如下:

   @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //1.从请求中获取用户名和密码
        //    给请求对象设置字符集, 保证说请求中的 username 或者 password 是中文, 也能正确处理.
        req.setCharacterEncoding("utf8");
        String username=req.getParameter("username");
        String password=req.getParameter("password");
        if(username==null || password==null || "".equals(username) || "".equals(password)){
            //这是用户名和密码有误
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("username or password is empty");
            return;
        }
        //2.从数据库的数据进行验证,看用户名和密码是否匹配
        //通过用户名查询信息
        UserDao userDao=new UserDao();
        User user=userDao.getUserByName(username);
        if(user==null){
            //当前提交的用户名密码错误
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("username or password is wrong");
            return;
        }
        if(!password.equals(user.getPassword())){
            //当前提交的用户名密码错误
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("username or password is wrong");
            return;
        }
        //3创建会话
        HttpSession session= req.getSession(true);
        // 把当前登录的用户信息保存到 session 中, 方便后续进行获取.
        session.setAttribute("user",user);
        //4跳转到博客列表页
        resp.sendRedirect("blog_list.html");

在这里插入图片描述

在这里插入图片描述




在这里插入图片描述在这里插入图片描述
该部分的后端代码如下:

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //根据上面,我们建立了会话为依据
        HttpSession session= req.getSession(false);
        if(session==null){
            //未登录,返回前端
            resp.setStatus(403);
            return;
        }
        //不仅仅要看session是否存在,还要看上述中存储的用户信息是否存在
        User user= (User) session.getAttribute("user");
        if(user==null){
            //未登录,返回前端
            resp.setStatus(403);
            return;
        }
        //表示已经登陆
        resp.setStatus(200);
    }



在这里插入图片描述

在这里插入图片描述在这里插入图片描述
该部分的后端代码如下:

private ObjectMapper objectMapper=new ObjectMapper();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //通过判断请求是否带有blogId这个参数,来判断是列表页发来的请求还是详情页发来的请求
        String blogId=req.getParameter("blogId");
        if(blogId==null){
            //表明是列表页
            //列表页可以从保存下来的session中拿到用户信息
            HttpSession session=req.getSession(false);
            //拿到的这个session可能为空
            if(session==null){
                //session为空,那么用户信息也必然为空,这里需要创建一个卡用户出来
                User user=new User();
                //Jackson ObjectMapper类(com.fasterxml.jackson.databind.ObjectMapper)解析JSON工具
                //
                //序列化:      Java对象生成Json
                //
                //反序列化:  Json解析为Java对象
                String respJson=objectMapper.writeValueAsString(user);
                resp.setContentType("application/json;charset=utf8");
                resp.getWriter().write(respJson);
                return;
            }
            User user= (User) session.getAttribute("user");
            if(user==null){
                user=new User();
                String respJson=objectMapper.writeValueAsString(user);
                resp.setContentType("application/json;charset=utf8");
                resp.getWriter().write(respJson);
                return;
            }
            String respJson=objectMapper.writeValueAsString(user);
            resp.setContentType("applicaion/json;charset=utf8");
            resp.getWriter().write(respJson);
        }else{
            //表明是详情页
            //需要查询数据库,通过blogId关联找到blog,再通过getuserid找到userid,通过userid找到user
            BlogDao blogDao=new BlogDao();
            Blog blog=blogDao.getBlog(Integer.parseInt(blogId));
            if(blog==null){
                User user=new User();
                String respJson=objectMapper.writeValueAsString(user);
                resp.setContentType("application/json;charset=utf8");
                resp.getWriter().write(respJson);
                return;
            }
            UserDao userDao=new UserDao();
            User user=userDao.getUserById(blog.getBlogId());
            if(user==null){
                user=new User();
                String respJson=objectMapper.writeValueAsString(user);
                resp.setContentType("application/json;charset=utf8");
                resp.getWriter().write(respJson);
                return;
            }
            String respJson=objectMapper.writeValueAsString(user);
            resp.setContentType("application/json;charset=utf8");
            resp.getWriter().write(respJson);
        }
    }

在这里插入图片描述




在这里插入图片描述在这里插入图片描述上述过程的后端代码如下:

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       HttpSession session=req.getSession(false);
       if(session==null){
           //当前状态未登录,不做处理,跳转到登录
           resp.sendRedirect("login.html");
           return;
       }
       //在登录成功之后,session中会有user这个属性,
        // 把他删除之后,状态就成了为登录
        session.removeAttribute("user");
       resp.sendRedirect("login.html");

在这里插入图片描述




在这里插入图片描述
在这里插入图片描述
上述过程的后端代码如下:

//1.获取登录的用户
        //虽然编写内容的时候,一定会有用户登录,但是为了防止其它情况,我们还是要做检查
        HttpSession session=req.getSession(false);
        if(session==null){
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("user don`t register,please register");
            return;
        }
        User user= (User) session.getAttribute("user");
        if(user==null){
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("user don`t register,please register");
            return;
        }
        //2.从请求中获取用户传递过来的信息
        req.setCharacterEncoding("utf8");
        String title=req.getParameter("title");
        String content=req.getParameter("content");
        if(title==null || content==null || "".equals(title) || "".equals(content)){
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("title or content is empty");
            return;
        }
        //3.构造对象,将其插入倒数据库中
        Blog blog=new Blog();
        blog.setTitle(title);
        blog.setContent(content);
        blog.setUserId(user.getUserId());
        //此处的时间是sql通过自带的now获取,不需要手动获取
        BlogDao blogDao=new BlogDao();
        blogDao.insert(blog);
        //4.跳转到列表页
        resp.sendRedirect("blog_list.html");

在这里插入图片描述




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

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

相关文章

微服务之初始微服务

文章目录 一、服务架构演变1.单体架构2.分布式架构 二、认识微服务三、总结四、微服务技术对比五、SpringCloud注意 一、服务架构演变 1.单体架构 单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。 优点: 架构简单部署成本…

【强化学习】17 ——DDPG(Deep Deterministic Policy Gradient)

文章目录 前言DDPG特点 随机策略与确定性策略DDPG:深度确定性策略梯度伪代码代码实践 前言 之前的章节介绍了基于策略梯度的算法 REINFORCE、Actor-Critic 以及两个改进算法——TRPO 和 PPO。这类算法有一个共同的特点:它们都是在线策略算法&#xff0c…

C++ map 的使用

下面的是关于 map 的介绍。来自 map - C Reference (cplusplus.com) 的翻译,您可以看也可以不看哈! map 是关联容器,它按照特定的次序(按照 key 来比较)存储由键值 key 和值 value组合而成的元素。在 map 中,键值 key 通常用于排序…

使用腾讯云轻量服务器安装AList

新人有免费两个月试用轻量服务器,使用云服务器商自带的webshell登录; 我这儿用docker安装Alist,因为服务器没自带docker,所以具体安装docker centos7.0最快速安装docker的方法 通过 Docker 部署 Alist 命令: docke…

多元共进|2023 Google 开发者大会现场全回顾

多元共进|2023 Google 开发者大会现场全回顾 作为 Google I/O Connect 环球之旅的收官之站 五湖四海的开发者在此相聚 共度无数个精彩瞬间 两天时光,现场有哪些闪耀时刻? 快来一起盘点! 持续关注大会官网 回看更多大会精彩…

JavaScript_Date对象_实例方法_set类

设置一年后的今天&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Document</…

win10 + cmake3.17 + vs2017编译osgearth2.7.0遇到的坑

坑1&#xff1a;debug模式下生成osgEarthAnnotation时 错误&#xff1a;xmemory0(881): error C2440: “初始化”: 无法从“std::pair<const _Kty,_Ty>”转换为 to _Objty 出错位置&#xff1a;src/osgEarthFeatures/FeatureSourceIndexNode.cpp 解决办法&#xff1a; …

S4.2.4.7 Start of Data Stream Ordered Set (SDS)

一 本章节主讲知识点 1.1 xxx 1.2 sss 1.3 ddd 二 本章节原文翻译 2.1 SDS 数据流开始有序集 SDS 代表传输的数据类型从有序集转为数据流。它会在 Configuration.Idle&#xff0c;Recovery.Idle 和 Tx 的 L0s.FTS 状态发送。Loopback 模式下&#xff0c;主机允许发送 SDS。…

【项目源码】反编译Java字节码生成源码

【项目源码】反编译Java字节码生成源码 文章目录 【项目源码】反编译Java字节码生成源码参考资料一、什么是反编译&#xff1f;二、反编译Java字节码文件1. &#xff08;不一定有效&#xff09; 使用IDEA提供的插件 - Java Bytecode Decomplier2. &#xff08;推荐&#xff09;…

网络性能瓶颈分析,让我来说给你听!

在性能测试中&#xff0c;谈到网络问题&#xff0c;其实&#xff0c;在没有特别说明的情况下&#xff0c;我们一般讲的都是 HTTP 协议下的网络瓶颈问题&#xff0c;那&#xff0c;对于这个问题&#xff0c;我们如何来分析呢&#xff1f;计算机中的网络&#xff0c;跟我们现实生…

ESP32S3入手体验测试

ESP32S3入手体验测试 &#x1f516;所入手的型号是YD-ESP32-S3 N16R8,该款和乐鑫官方推出的ESP32-S3-DevKitC-1配置差不多。 &#x1f388;乐鑫官方介绍&#xff1a;ESP32-S3-DevKitC-1 v1.1 &#x1f530;两者采用的模组&#xff1a;ESP32-S3-WROOM-1 和ESP32-S3-WROOM-1U模组…

再见了,提示~ 谷歌发布自适应提示方法,从此告别提示工程!

夕小瑶科技说 原创 作者 | 谢年年、ZenMoore 大模型虽好&#xff0c;但却存在着一个恼人的问题&#xff1a;大模型回答得好不好&#xff0c;取决于我们问题问得怎么样。一个好的、详细的问题往往可以产生惊人的效果... 所以... ChatGPT 问世之后&#xff0c;最火的书可能不是…

文心一言 VS 讯飞星火 VS chatgpt (128)-- 算法导论11.1 3题

三、用go语言&#xff0c;试说明如何实现一个直接寻址表&#xff0c;表中各元素的关键字不必都不相同&#xff0c;且各元素可以有卫星数据。所有三种字典操作(INSERT、DELETE和SEARCH)的运行时间应为O(1)(不要忘记 DELETE 要处理的是被删除对象的指针变量&#xff0c;而不是关键…

没想到这么齐全!这份 Python 实战干货yyds

今天我分享一些Python学习神器资料&#xff0c;有需要的小伙文末自行免费领取。 1.200Python练手案例&#xff1a; 2.Python全套视频教程等&#xff1a; 3.浙大Python学习套装&#xff1a; * 4.Python实战案例&#xff1a; 5.Pandas学习大礼包 6.学习手册大礼包 Python知识…

cocosCreator微信小游戏 之 登录流程(三)

creator版本&#xff1a; 3.8.0 语言&#xff1a; TypeScript 环境&#xff1a; Mac 流程 微信小游戏在微信平台中运行&#xff0c;第一步操作就是登录。在登录之后才能&#xff1a; 更方便的获取微信提供的用户身份标识更方便的验证数据传递的合法性 在微信平台中&#x…

如何在苹果Mac系统设置中查看Wi-Fi密码?

在 Mac 上查找保存的 Wi-Fi 密码的最简单方法之一是从系统设置内的高级 Wi-Fi 首选项页面。您可以通过下面的方式访问此页面来查找您保存的 Wi-Fi 密码。 1.在 Mac 上&#xff0c;选取「苹果菜单」选择「系统设置」。 2.从侧边栏中选择「Wi-Fi」&#xff0c;单击「高级」。 3.…

Git同时配置Gitee和GitHub

Git同时配置Gitee和GitHub 一、删除原先ssh密钥二、生成密钥 这里的同时配置是针对于之前配置过单个gitee或者github而言的&#xff0c;如果需要看git从安装开始的配置&#xff0c;则可以看这一篇文章 git安装配置教程 一、删除原先ssh密钥 在C盘下用户/用户名/.ssh文件下找到…

golang实现极简todolist

ToDoList 最近跟着qimi老师做了一个ToDoList&#xff0c;我做的GitHub地址贴在这里&#xff0c;但由于前端出了点问题&#xff0c;所以都是用postman进行测试 原项目地址 部分功能展示 删除代办 查找代办 下面给出思路 思路 其实这是一个很简单的增删改查的实现&#xff…

Linux命令--mkdir创建目录的方法

原文网址&#xff1a;Linux命令--mkdir创建目录的方法_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Linux创建目录命令--mkdir的用法。 格式 mkdir [选项] 目录… -m, –mode模式&#xff0c;设定权限<模式> (类似 chmod)&#xff0c;而不是 rwxrwxrwx 减 umask-p, --p…

【java学习—十三】处理流之二:转换流(2)

文章目录 1. 相关概念2. 转换输入流3. 转换输出流 1. 相关概念 转换流提供了在字节流和字符流之间的转换。 Java API 提供了两个转换流&#xff1a;     InputStreamReader 和 OutputStreamWriter     当字节流中的数据都是字符时&#xff0c;转成字符流操作更高效。…