博客系统(六) - 实现显示用户信息与注销功能

目录

显示用户信息

1.约定前后端交互接口

2.修改前端代码

3.实现后端代码

注销

1.确定前后端交互接口

2.实现后端代码

3.修改前端代码


显示用户信息

如果是此时登录的列表页,此处显示的是登录用户的信息。
如果此时登录的是详情页,此处显示的是该文章的作者信息。

1.约定前后端交互接口

列表页

详情页

2.修改前端代码

列表页

 //获取当前登录的用户信息,显示在左侧
        function getUserInfo(){
            $.ajax({
                type:'get',
                url:'userInfo',
                success:function(user){
                    //把拿到的响应数据,取出其中的username,设置到页面的h3标签中
                    let h3=document.querySelector('.card h3');
                    h3.innerHTML=user.username;
                }
            })
        }
        //调用函数
        getUserInfo();

详情页

function getAuthorInfo() {
            $.ajax({
                type: 'get',
                url: 'getAuthorInfo' + location.search,
                //location 对象代表了当前窗口的URL ,search获取或设置URL的查询字符串部分
                
                success: function(user) {
                    // 把拿到的 user 对象, 取出其中的 username, 设置到页面上. 
                    let h3 = document.querySelector('.card h3');
                    h3.innerHTML = user.username;
                }
            });
        }

        getAuthorInfo();

3.实现后端代码

列表页

@WebServlet("/userInfo")
public class UserInfoServlet extends HttpServlet {
    private ObjectMapper objectMapper=new ObjectMapper();
    //从会话中拿到用户信息返回即可
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session=req.getSession(false);
        if(session==null){
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("当前用户未登录");
            return;
        }
        User user= (User) session.getAttribute("user");
        if(user==null){
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("当前用户未登录");
            return;
        }
        //此时把user对象转成json,并返回给浏览器
        resp.setContentType("application/json;charset=utf8");
        //user中的密码属性不应该被返回
        user.setPassword("");
        String respJson=objectMapper.writeValueAsString(user);
        resp.getWriter().write(respJson);
    }
}

详情页

//在博客详情左边显示该博客的作者信息
@WebServlet("/getAuthorInfo")
public class AuthorInfoServlet extends HttpServlet {
    private ObjectMapper objectMapper=new ObjectMapper();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.先拿到请求中的blogId
        String blogId=req.getParameter("blogId");
        if(blogId==null){
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("请求中缺少blogId");
            return;
        }


        //2.在blog表中查询到Blog对象
        BlogDao blogDao = new BlogDao();
        Blog blog = blogDao.getBlog(Integer.parseInt(blogId));
        if (blog == null) {
            resp.setContentType("text/html; charset=utf8");
            resp.getWriter().write("blogId 没有找到!");
            return;
        }

        if(blog==null){
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("blogId没有找到a");
            return;
        }
        //3.根据Blog对象中的userId,从user表中查到对应作者
        UserDao userDao=new UserDao();
        User user= null;
        user = userDao.getUserById(blog.getUserId());
        if(user==null){
            resp.setContentType("text/html;charset=utf8");
            resp.getWriter().write("userId没有找到");
            return;
        }
        //4.把这个user对象返回到浏览器这边
        user.setPassword("");
        String respJson=objectMapper.writeValueAsString(user);
        resp.setContentType("application/json;charset=utf8");
        resp.getWriter().write(respJson);
    }
}

注销

要想实现注销功能。需要判定当前的 登录状态;这里一共有两种方式:

①看看是否能查到 http session 对象

②看看 session 对象里有没有 user。

鉴于以上两种方式都可以实现注销功能,因此要么把 HttpSession 删掉;要么把 User 删掉,
满足以上一种情况即可。

getSession 有创建/获取会话的方法,但是没有删除会话的方法,因此想要删除会话会比较麻烦。
更好的办法就是 删除 user 对象,直接使用 removeAttribute 即可删除。

1.确定前后端交互接口

2.实现后端代码

新建一个 LogoutServlet 类。

@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) {
            resp.setContentType("text/html; charset=utf8");
            resp.getWriter().write("当前您尚未登录");
            return;
        }
        // 再把会话中的 user 的属性给删除掉
        session.removeAttribute("user");
        // 跳转到博客登录页
        resp.sendRedirect("login.html");
    }
}

3.修改前端代码

在之前写好的前端代码中的 a 标签里加上一个 logout 路径。

<a href="logout">注销</a>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值