JavaEE实战案例总结

本次复习JavaEE基于servlet技术、jsp技术、JDBC技术,来实现一个用户登录以及用户信息的增删改查

  • 项目需求:实现用户登录,以及用户信息的增删改查
  • 项目配置:Java语言(Java1.8)、tomcat服务器(tomcat9.0.34)、Mysql数据库(MySQL8.0)、前端技术、JavaEE技术,IDEA开发工具,navicat数据库管理工具
  • 项目地址:https://gitee.com/jun-hong-wu/java--ee-simple-case
  • 项目截图:

     项目准备:

  • 创建数据库表
  • 搭建项目结构

 

项目实现过程:

  • 搭建好项目结构之后,通过根据数据库的表定义对应的实体文件,pojo包里面有个User类
  • 实现用户登录界面:
  1. -------(基本业务流程)----------获取用户登录界面用户输入的账号和密码,还有验证码,通过servlet配置调用业务层接口,业务层调用dao层,实现用户查询,之后将查询到的用户数据返回到业务层,业务层返回到表现层,将得到的用户存放到session当中,如果查询到用户,将页面跳转到主页,如果没有查询到用户,仍然返回到登录界面,并提示用户用户密码错误,让用户重新登录。
  2. -------(登录过程中的细节)--------

用户不登录不能访问项目中的其他界面:(使用过滤器,首先放行和登录有关的资源,避免产生死锁循环,之后通过判断session中是否有用户来判断用户是否登录,如果没有则跳转到登录界面,如果有则放行);

复制代码
    //   首先要对登录资源放行
        HttpServletRequest request=(HttpServletRequest) servletRequest;
        String uri = request.getRequestURI();
        if (uri.indexOf("login.jsp")!=-1||uri.indexOf("login.do")!=-1||uri.indexOf("validateCode.do")!=-1){
            filterChain.doFilter(servletRequest, servletResponse);
        }else {
        //    判断用户是否登录
            HttpSession session = request.getSession();
            Users user = (Users) session.getAttribute(Constants.USER_SESSION_KEY);
            if (user!=null){
                filterChain.doFilter(servletRequest, servletResponse);
            }else {
                request.setAttribute(Constants.REQUEST_MSG,"请先进行登录");
                request.getRequestDispatcher("login.jsp").forward(servletRequest, servletResponse);
            } 
        }
复制代码

 

一个用户只能在一个浏览器上登录,如果多处登录会把之前的挤掉:使用servletContext对象,当在一处登录的时候,将本次登录的session放到servletContext对象中,key为用户对应的id。例如:当用户在ie浏览器上进行登录的时候,首先根据用户id判断servletContext中有没有对应的session,如果有,将session销毁,将ie浏览器对应的session放到servletContext对象中,当另一处的用户访问资源的时候,会通过过滤器进行拦截,让用户进行登录;如果没有就将本次登录的session放到servlet中。

复制代码
 //   获取用户输入的账号和密码
        String username = req.getParameter("username");
        String userpwd = req.getParameter("userpwd");
        String code = req.getParameter("code");
        try{
            //   建立会话连接
            HttpSession session = req.getSession();
            String codetemp = (String) session.getAttribute(Constants.VALIDATE_CODE_MSG);
            if (codetemp.equals(code)){
                //   创建业务层对象
                UserLoginService userLoginService=new UserLoginServiceImpl();
                Users users = userLoginService.userLogin(username, userpwd);
                //   根据用户id将用户session放入到servletContext对象中
                ServletContext servletContext = this.getServletContext();
                //   避免硬编码,将用户信息放入到session中
                session.setAttribute(Constants.USER_SESSION_KEY,users);
                HttpSession temp = (HttpSession) servletContext.getAttribute(users.getUserid() + "");
                if (temp!=null){
                    servletContext.removeAttribute(users.getUserid() + "");
                    temp.invalidate();
                }
                servletContext.setAttribute(users.getUserid()+"",session);
                //    使用重定向跳转到主页
                resp.sendRedirect("main.jsp");
            }else {
                session.setAttribute(Constants.REQUEST_MSG,"验证码有误,请重新输入");
                req.getRequestDispatcher("login.jsp").forward(req,resp);
            }

        } catch (UserNotFoundException e){
            req.setAttribute("msg",e.getMessage());
        //    使用请求转发让用户重新登录
            req.getRequestDispatcher("login.jsp").forward(req,resp);
        }catch (Exception e){
            resp.sendRedirect("error.jsp");
        }
复制代码

 

用户权限控制;如果有邮箱,需要进行正则表达式的判断;注册的时候,用户通过短信获得验证码------这两个本项目中没有涉及,如果之后有项目涉及会进行补充。

  • 进入主页之后实现用户信息的查询和用户信息的添加

用户信息的增删改查:通过查看前端代码,编写每次需要操作数据库的接口,在servlet中调用接口,使用请求转发和重定向来进行页面跳转将数据展示到界面就可以

  • 最后实现 用户退出登录

销毁session连接,跳转到登录界面。


到此项目就结束了,本项目只是一个表的增删改查,不过都差不多,本次项目让我认识到,需要对JavaEE中的常用对象的理解,才可以更好的解决问题。之后会基于ssm框架以及spring boot框架对项目重新进行整理,不断对本项目进行完善,希望明天的自己会更加努力!!

posted @   (HelloWorld!)  阅读(1016)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示