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

文章详细描述了后端开发中如何实现登录功能,包括验证用户凭据、数据库查询、会话管理以及与JSON交互的过程。重点展示了如何通过HttpServletRequest和HttpServletResponse处理GET和POST请求,确保用户已登录并处理退出操作。
摘要由CSDN通过智能技术生成

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




在这里插入图片描述

在这里插入图片描述

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

   @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");

在这里插入图片描述




  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值