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

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. Servlet线程安全
  2. excel平均值公式_投资组合Normal VaR的具体计算方法(Excel版)
  3. 細微之處看看mysql與sql server的一些差別
  4. 马云终于露面了!发表千字演讲
  5. Android 开发 带图像的Toast提示
  6. k8s创建pod加入容器_K8S容器编排之POD健康检测(2)
  7. 高级php程序员,php高级程序员该学什么
  8. 在MFC对话框中显示html网页
  9. 用VBA实现OUTLOOK接收新邮件后的自动转发
  10. 中科院分区发布2021年期刊重大调整(生信期刊调整为生物学大类)
  11. C语言编程题目(精心准备,特别适合C语言小白)
  12. FLASH动画之制作动画
  13. 如鹏网.Net基础2 第六章:MYSQL
  14. JVM垃圾收集器分类
  15. 欢迎加入可一科技,见证区块链技术的力量
  16. otdr全部曲线图带解说_【赛事主播】你最期望哪个电竞选手组合来解说比赛?...
  17. 2022.4月份科研记录【日记】
  18. 趁阳光正好,趁微风不噪。趁花儿还未开到荼蘼。
  19. MAC下downie下载网页视频报错“转换错误”解决方案
  20. 各种浏览器在线翻译,无需插件

热门文章

  1. 断更1周,因特殊情况,预计断更1周左右
  2. 小程序页面跳转然后刷新
  3. LZ4 和 LZMA 压缩算法针对不同格式的压缩比数据测试
  4. 基于链表的票务管理系统
  5. 掌控移动入口:互联网手机的伪命题?
  6. Github每日精选(第57期):用于绘制手绘图的虚拟白板excalidraw
  7. Linux项目组编程规范
  8. ESP-Prog 下载与调试板介绍
  9. 基于毫米波感知的手势识别
  10. linux虚拟光驱路径,Linux操作系统下虚拟光驱(iso)的挂载