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类
- 实现用户登录界面:
- -------(基本业务流程)----------获取用户登录界面用户输入的账号和密码,还有验证码,通过servlet配置调用业务层接口,业务层调用dao层,实现用户查询,之后将查询到的用户数据返回到业务层,业务层返回到表现层,将得到的用户存放到session当中,如果查询到用户,将页面跳转到主页,如果没有查询到用户,仍然返回到登录界面,并提示用户用户密码错误,让用户重新登录。
- -------(登录过程中的细节)--------
用户不登录不能访问项目中的其他界面:(使用过滤器,首先放行和登录有关的资源,避免产生死锁循环,之后通过判断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框架对项目重新进行整理,不断对本项目进行完善,希望明天的自己会更加努力!!
本文来自博客园,作者:(HelloWorld!),转载请注明原文链接:https://www.cnblogs.com/Simon-s/articles/15708983.html --有志者,事竟成
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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)