综合练习笔记(用户管理系统)

1. 结合上次用户信息列表展示案例进行简单修改* 列表查询* 登录* 添加* 删除* 修改2. 增加更多复杂的功能* 删除选中* 分页查询* 复杂条件查询

简单修改

  • 列表查询

    • 列表查询是首次创建一个项目,(当然我们开始之前,前端人员已经准备了相应的静态页面),所以需要按照三层架构的方法创建相应的层,也即要创建相应的包,service包,dao包,web包;在service和dao层都是先创建响应的接口,然后再分别对接口做实现,所以分别创建impl包;web包中创建一个servlet包,放Servlet,而页面展示的文件则放在工程默认的web文件夹中。
    • 本次列表查询的流程图如下所示

      上次所作的案例已经基本实现,但是还需要对展示界面list.jsp略作修改
      修改后的list.jsp代码下所示
    <div class="container"><h3 style="text-align: center">用户信息列表</h3><div style="float: left; margin: 5px;"><form class="form-inline"><div class="form-group"><label for="exampleInputName2">姓名</label><input type="text" class="form-control" id="exampleInputName2"></div><div class="form-group"><label for="exampleInputName3">籍贯</label><input type="text" class="form-control" id="exampleInputName3"></div><div class="form-group"><label for="exampleInputEmail2">邮箱</label><input type="email" class="form-control" id="exampleInputEmail2"></div><button type="submit" class="btn btn-default">查询</button></form></div><div style="float: right; margin: 5px;" ><tr><td colspan="8" align="center"><a class="btn btn-primary" href="add.html">添加联系人</a></td></tr><tr><td colspan="8" align="center"><a class="btn btn-primary" href="add.html">删除选中</a></td></tr></div><table border="1" class="table table-bordered table-hover"><tr class="success"><th><input type="checkbox"></th><th>编号</th><th>姓名</th><th>性别</th><th>年龄</th><th>籍贯</th><th>QQ</th><th>邮箱</th><th>操作</th></tr><c:forEach items="${users}" var="user" varStatus="s"><tr><td><input type="checkbox"></td><td>${s.count}</td><td>${user.name}</td><td>${user.gender}</td><td>${user.age}</td><td>${user.address}</td><td>${user.qq}</td><td>${user.email}</td><td><a class="btn btn-default btn-sm" href="update.html">修改</a>&nbsp;<a class="btn btn-default btn-sm" href="">删除</a></td></tr></c:forEach></table><div><nav aria-label="Page navigation"><ul class="pagination"><li><a href="#" aria-label="Previous"><span aria-hidden="true">&laquo;</span></a></li><li><a href="#">1</a></li><li><a href="#">2</a></li><li><a href="#">3</a></li><li><a href="#">4</a></li><li><a href="#">5</a></li><li><a href="#" aria-label="Next"><span aria-hidden="true">&raquo;</span></a></li><span style="font-size: 25px; margin: 8px">共16条记录,共4页</span></ul></nav></div></div>
  • 登录

    • 首先将登录界面用login.jsp实现,并且加入验证码
    • 验证码用CheckCodeServlet来实现,将验证码以图片形式保存到response输出流中;将验证码内容以session形式存到服务器
    • 登录的实现流程如图所示
    • 其中登陆服务的代码LoginServlet的代码如下所示:
        // 1.设置请求编码格式request.setCharacterEncoding("utf-8");// 2.获取数据// 2.1获取输入的验证码String verifycode = request.getParameter("verifycode");System.out.println(verifycode);// 2.2获取用户信息Map<String, String[]> map = request.getParameterMap();// 4.验证码判断HttpSession session = request.getSession();String checkCode_session = (String)session.getAttribute("checkCode_session");System.out.println(checkCode_session);//获取完后移除session中存储的验证码,以保证验证码的唯一性session.removeAttribute("checkCode_session");if (checkCode_session != null && checkCode_session.equalsIgnoreCase(verifycode)){//验证码正确// 3.用BeanUtils工具包封装User对象User user = new User();try {BeanUtils.populate(user, map);System.out.println(user.getUsername()+"------"+user.getPassword());} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}// 5.登陆判断UserService service = new UserServiceImpl();User loginUser = service.login(user);if (loginUser != null){//登陆成功System.out.println("登陆成功");session.setAttribute("username", loginUser.getUsername());//跳转到index.jspresponse.sendRedirect(request.getContextPath()+"/index.jsp");}else{//登陆失败System.out.println("登陆失败");request.setAttribute("login_error", "用户名或密码错误!");//跳转登陆界面login.jsprequest.getRequestDispatcher("/login.jsp").forward(request, response);}}else {//验证码错误request.setAttribute("cc_error", "验证码错误!");//跳转登陆界面login.jsprequest.getRequestDispatcher("/login.jsp").forward(request, response);}
  • dao层登录方法如下所示:
    public User SelectUserByUsernameAndPassword(User user) {try {//查询数据库String sql = "select * from user where username  = ? and password = ?";User loginuser = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class),user.getUsername(), user.getPassword());return loginuser;} catch (DataAccessException e) {//            e.printStackTrace();return null;}}
  • 添加联系人

    • 要实现添加功能,则需要一个添加的页面add.jsp,用户在该页面输入信息,点击提交后将信息存到数据库,并在用户列表页面list.jsp进行展示
    • 项目基本的架构已经完成,所以只需要添加一个AddUserServlet,并在service层以及dao层添加响应的增加联系人方法即可
    • 添加联系人实现流程如图所示
    • 其中添加联系人服务AddUserServlet代码如下所示
        // 1.设置请求编码格式request.setCharacterEncoding("utf-8");// 2.接受数据Map<String, String[]> map = request.getParameterMap();// 3.封装为User对象User user = new User();try {BeanUtils.populate(user, map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}// 4.调用service层的添加方法UserService service = new UserServiceImpl();service.addUser(user);// 5.转发给UserListServletrequest.getRequestDispatcher("/userListServlet").forward(request, response);
  • dao层实现添加用户的代码如下所示
    public void add(User user) {String sql = "insert into user values(null, ?, ?, ?, ?, ?, ?, null, null)";template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail());}
  • 删除

    • 删除功能的实现需要web层增加一个Servlet,记为DelUserServlet,service层和dao层需要增加一个删除方法
    • 删除功能实现流程如图所示
    • 其中需要设置list.jsp中删除按钮,点击会一个提示框,确认才会删除
<a class="btn btn-default btn-sm" href="javascript:deleteUser(${user.id})">删除</a></td><script>function deleteUser(id){if (confirm("您确定要删除吗?")){location.href="${pageContext.request.contextPath}/delUserServlet?id=" + id;}}</script>
  • 其中web层DelUserServlet实现代码为
        //获取请求标识idString id = request.getParameter("id");//调用service层删除方法UserService service = new UserServiceImpl();service.delete(id);//重定向到UserListServletresponse.sendRedirect(request.getContextPath()+"/userListServlet");
  • dao层删除用户的实现代码为
    public void deleteUserById(int parseInt) {String sql = "delete from user where id = ?";template.update(sql, parseInt);}
  • 此处有一点需要注意,在list.jsp页面的请求中,id是String类型的,而在数据库中,id是int类型的,所以需要将id进行转换后才能才数据库中正确操作,转换方法也很简单,即
    int parseInt = Integer.parseInt(id);
  • 修改

    • 修改功能一般分为两步走;一个是回显用户数据,第二个是修改用户信息

      • 回显用户数据 : 在点击修改按钮时,需要跳转到一个修改的页面,此处记为update.jsp;在此页面中回显该用户的信息;

      • 修改用户信息 : 在修改页面update.jsp点击提交按钮后,需要将新的用户数据修改到数据库中,覆盖掉原来的用户信息;

      • 在这两步操作中,我们都需要一个标识来确定是哪个用户;在回显中,我们可以根据修改按钮的id来查找用户,类似于上面的删除操作;而在修改操作中,我们的请求是由提交按钮发出的,而在update.jsp表单中是不存在用户的id信息的,那如何定位修改哪位用户呢?

      • 一般我们会在update.jsp中设置一个隐藏域,用来存放用户的id,该数据不对用户显示

      • 第一步我们需要在web层建立一个FindUserServlet,在service层添加一个通过id查找用户的方法,在dao层实现该方法

        • web层主要任务:

          1. 获取请求标识id
          2. 调用service中查找用户方法
          3. 将查到的用户信息转发给update.jsp页面
          4. update.jsp页面将该信息进行显示
            • 对于页面的回显,一般的输入框可以直接进行设置value值即可
            • 但是对于单选框,下拉框,则比较麻烦,需要判断该值,然后选中对应的单选框或者下拉值;需要使用TJSTL标签来实现
      • 第二步我们需要在web层再建立一个UpdateUserServlet,在service层增加一个修改用户信息方法,在dao层实现该方法

        • web层主要任务:

          1. 获取update.jsp中的所有数据
          2. 封装为User对象
          3. 调用service层的更新用户信息方法
          4. 重定向用户信息展示界面,即重定向到UserListServlet即可
      • 修改用户信息的流程如图所示

      • 回显用户信息的主要代码

        • web层的FindUserServlet的主要代码如下所示
        //1.获取请求标识idString id = request.getParameter("id");//2.调用service中的查找方法UserService service = new UserServiceImpl();User  user = service.findUserById(id);//3.保存数据到request域,并转发到update.jsprequest.setAttribute("user", user);request.getRequestDispatcher("/update.jsp").forward(request, response);
  • dao层的通过id查找用户的方法如下所示
    public User findUserById(int parseInt) {String sql = "select * from user where id = ?";return template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), parseInt);}
  • update.jsp页面将信息回显的主要代码
    //主要是单选框和下拉菜单的回显//单选框<label>性别:</label><c:if test="${user.gender == '男'}"><input type="radio" name="gender" value="男" checked />男<input type="radio" name="gender" value="女"  />女</c:if><c:if test="${user.gender == '女'}"><input type="radio" name="gender" value="男"  />男<input type="radio" name="gender" value="女" checked />女</c:if>//下拉菜单<div><c:if test="${user.address == '广东'}"><%--@declare id="address"--%><label for="address">籍贯:</label><select name="address" class="form-control" ><option value="广东" selected >广东</option><option value="广西">广西</option><option value="湖南">湖南</option></select></c:if></div><div><c:if test="${user.address == '广西'}"><label for="address">籍贯:</label><select name="address" class="form-control" ><option value="广东"  >广东</option><option value="广西" selected >广西</option><option value="湖南">湖南</option></select></c:if></div><div><c:if test="${user.address == '湖南'}"><label for="address">籍贯:</label><select name="address" class="form-control" ><option value="广东"  >广东</option><option value="广西">广西</option><option value="湖南" selected >湖南</option></select></c:if></div>
  • 修改用户信息的主要代码

    • web层的UpdateUserServlet主要代码如下所示
        //1.设置请求编码request.setCharacterEncoding("utf-8");//2.获取数据Map<String, String[]> map = request.getParameterMap();获取标识id//String id = request.getParameter("id");//3.封装为User对象User user = new User();try {BeanUtils.populate(user, map);} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//System.out.println("隐藏域id="+id+";用户中获取的id="+user.getId());//4.调用更新方法UserService service = new UserServiceImpl();service.updateUser(user);//service.updateUserById(user, id);//5.重定向到userListServletresponse.sendRedirect(request.getContextPath() + "/userListServlet");
  • dao层的修改用户信息方法如下所示
    @Overridepublic void updateUserById(User user, int parseInt) {String sql = "update user set name = ?, gender = ?, age = ?, address = ?, qq = ?, email = ? where id = ?";template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail(), parseInt);}@Overridepublic void updateUser(User user) {String sql = "update user set name = ?, gender = ?, age = ?, address = ?, qq = ?, email = ? where id = ?";template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail(), user.getId());}
  • 注意

    • 通过BeanUtils工具封装的User对象中,已经将隐藏域中的id封装到了User中,所以可以不再单独获取隐藏域的id来判断

综合练习笔记1(用户管理系统)相关推荐

  1. 综合练习笔记2(用户管理系统)

    综合练习笔记(用户管理系统) 1. 结合上次用户信息列表展示案例进行简单修改* 列表查询* 登录* 添加* 删除* 修改2. 增加更多复杂的功能* 删除选中* 分页查询* 复杂条件查询 用户管理系统简 ...

  2. 菜鸟做设计必看!有关如何做设计的整体思路,以及能否综合的笔记

    对Verilog 初学者比较有用的整理(转自它处) 作者: Ian11122840 时间: 2010-9-27 09:04 标题: 菜鸟做设计必看!有关如何做设计的整体思路,以及能否综合的笔记 所谓综 ...

  3. DC综合——学习笔记

    DC综合--学习笔记 一.DC综合简介 1.1 什么是综合? 1.2 综合需要的文件 1.3 综合输出的文件 1.4 电路综合的要求 1.4.1 综合脚本的要求 1.4.2 综合结果的要求 二.DC综 ...

  4. 综合管廊运维管理系统

    城市地下综合管廊·························参考<城市地下综合管廊运维管理> 一.综合管廊及建设情况(什么是管廊) 1.综合管廊的组成 综合管廊的土建结构 管廊标准段 ...

  5. [黑马程序员C++笔记]P72-P83通讯录管理系统

    目录 系统需求 1.菜单功能 2.退出功能 3.添加联系人 (1)​​​​​​​设计联系人结构体 (2) 设计通讯录结构体 ​​​​​​​(3)main函数中创建通讯录 (4)封装添加联系人函数 (5 ...

  6. 读周傲英老师的论文:计算广告:以数据为核心的web综合应用笔记

    读周傲英老师的论文:计算广告:以数据为核心的web综合应用笔记 原文链接:http://cjc.ict.ac.cn/quanwenjiansuo/2011-10/zay.pdf 摘要 涉及学科:数据管 ...

  7. (附源码)ssm基于bs的健身房用户管理系统的设计与实现 毕业设计271611

    健身房用户管理系统的设计与实现 摘 要 大数据时代下,数据呈爆炸式地增长.为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势.在健身房管理的要 ...

  8. 全网最详细的JavaWeb用户管理系统(详细源码讲解)

    基于Java web的用户管理系统开发(可直接跳到实现步骤)(小白也行) 前言_下载资源说明 1.业务及其需求分析 1.实现以下功能 2.使用以下技术 2.简单成品展示 1.登录功能与简单界面 2.页 ...

  9. 汽车检测站计算机网络系统,汽车综合性能检测站计算机管理系统的功能实现格和应用分析...

    汽车综合性能检测站计算机管理系统,以<汽车检测站计算机控制系统技术规范>(JT/T478-2002)(以下简称规范)和强制性国标<营运车辆综合性能要求和检测方法>(GB1856 ...

最新文章

  1. Spring Boot 入门例子 Hello world - TerryHe 博客园
  2. Springboot : RequestContextHolder
  3. 真实感人故事_您的数据可以告诉您真实故事吗?
  4. MVVM Light Toolkit使用指南
  5. 我是如何自学 Python 的,分享一下经验
  6. mac下使用Charles抓chrome包
  7. GitHub上传文件不能超过100M的解决办法
  8. (转)shiro权限框架详解01-权限理论介绍
  9. 对象字段java_Java的类,对象以及字段和方法
  10. 如何使用powerdesigner导出sql脚本
  11. TF-tf.keras.layers.Attention-Attention机制
  12. android textview api,Android API中文文档TextView
  13. 【存档】使用OllyDbg+ResHack+LordPE来修改EXE文件
  14. sata接口 图解 定义_SATA数据和电源接口定义详解(多图).pdf
  15. ODOO 开源 ERP 和 CRM
  16. 问道手游服务器修改密码,问道手游去哪改密码 问道手游怎么更换修改密码手机号...
  17. win10 电脑蓝牙无法使用无法连接问题的一种神奇解决办法
  18. NAND Flash(spi nand flash和nand flash)和emmc以及ufs通过uboot烧写固件的一些差异
  19. 驱动开发:Win10枚举完整SSDT地址表
  20. win系统一键安装redmine+配置+插件安装配置教程【原创-亲测安装成功-一枚测试喵】

热门文章

  1. 吴恩达 卷积神经网络原理图
  2. 办公使用NAS服务器的作用,NAS存储服务器的作用有哪些?可以有哪些骚操作
  3. progress的使用
  4. Ubuntu18.04_NVIDA驱动460_Cuda11.2_CuDNN8
  5. 光耦继电器工作原理及优点概述
  6. gradle强制刷新依赖
  7. 护卫神mysql提权_护卫神主机大师被提权漏洞利用(可千万不能乱装护卫神主机管理一键安装的软件)...
  8. html5图片看不见,html5 绘制图片 drawImage
  9. Python字典的key都可以是什么
  10. maven插件_Apache Maven WAR Plugin_用overlays合并多个war