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

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




该部分的后端代码如下:

java 复制代码
   @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");



该部分的后端代码如下:

java 复制代码
@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);
    }



该部分的后端代码如下:

java 复制代码
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);
        }
    }



上述过程的后端代码如下:

java 复制代码
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");




上述过程的后端代码如下:

java 复制代码
//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");



相关推荐
茶杯梦轩2 天前
从零起步学习RabbitMQ || 第二章:RabbitMQ 深入理解概念 Producer、Consumer、Exchange、Queue 与企业实战案例
服务器·后端·消息队列
阿白的白日梦4 天前
winget基础管理---更新/修改源为国内源
windows
YuMiao4 天前
gstatic连接问题导致Google Gemini / Studio页面乱码或图标缺失问题
服务器·网络协议
Sinclair7 天前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
Rockbean8 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
埃博拉酱8 天前
VS Code Remote SSH 连接 Windows 服务器卡在"下载 VS Code 服务器":prcdn DNS 解析失败的诊断与 BITS 断点续传
windows·ssh·visual studio code
茶杯梦轩8 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试
唐宋元明清21889 天前
.NET 本地Db数据库-技术方案选型
windows·c#
海天鹰9 天前
【免费】PHP主机=域名+解析+主机
服务器
加号39 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql