使用jsp-servlet-service-dao四层结构完成用户信息的增删改查操作(2020.12.22)

2023-05-16

本章目录

    • 目录结构
    • 登录
    • 注册
    • 总结
    • 源码下载


需求:
使用Servlet和四层结构知识,改进只用JSP(不分层)完成用户信息的增删改查操作的信息管理系统,使其具有更好的软件结构,以及提升可读性和可扩展性。(jsp-servlet-service-dao)

在这里插入图片描述

目录结构

在这里插入图片描述
在这里插入图片描述

登录

(1)LoginServlet的doPost方法

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   System.out.println("login-post");
   //设置编码
   request.setCharacterEncoding("utf-8");
   Map<String, String[]> map = request.getParameterMap();
   //封装User对象
   User user = new User();
   try {
      BeanUtils.populate(user,map);
   } catch (IllegalAccessException e) {
      e.printStackTrace();
   } catch (InvocationTargetException e) {
      e.printStackTrace();
   }
   //调用Service查询
   userService userservice = new userServiceImpl();
   User loginUser=userservice.login(user);
   //判断是否登录成功
   HttpSession session = request.getSession();
   if(loginUser != null){
      session.setAttribute("user",loginUser);//登录成功 将用户存入session
      response.sendRedirect(request.getContextPath()+"/index.jsp");//跳转到首页
   }else{
      request.setAttribute("login_msg","用户名或密码错误!");//登录失败
      request.getRequestDispatcher("/login.jsp").forward(request,response);//跳转登录页面
   }
}

(2)Dao层用户登录校验

@Override
public User login(User u) {
   if (u.getUsername()==null||u.getUsername().equals("")||u.getPassword()==null||u.getPassword().equals("")){
      return null;
   }
   User user=new User();
   try {
      conn = JDBCUtils.getConnection();
      String sql="select * from user_list where user_name=? and user_password = ?";
      System.out.println("sql:"+sql);
      pst = conn.prepareStatement(sql);
      pst.setString(1,u.getUsername());
      pst.setString(2,u.getPassword());
      rs=pst.executeQuery();    //注意:执行的适合不需要传入sql语句
      if(rs.next()){    //存在一行数据,即账号密码正确
         user.setAge(rs.getInt("user_age"));
         user.setUsername(rs.getString("user_id"));
         user.setPassword(u.getPassword());
         user.setUserRole(rs.getString("user_role"));
         user.setUserId(u.getUsername());
         return user;
      }
   } catch (SQLException e) {
      e.printStackTrace();
   } finally {
      JDBCUtils.close(rs, pst, conn);    //释放连接
   }
   return null;
}

注册

(1)registServlet的doPost方法

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
   System.out.println("regist-post");
   //设置编码
   request.setCharacterEncoding("utf-8");
   Map<String, String[]> map = request.getParameterMap();
   //封装User对象
   User user = new User();
   try {
      BeanUtils.populate(user,map);
   } catch (IllegalAccessException e) {
      e.printStackTrace();
   } catch (InvocationTargetException e) {
      e.printStackTrace();
   }
   //单选框的值BeanUtils无法自己封装
   String userRole = request.getParameter("userRole");
   user.setUserRole(userRole);
   System.out.println(user);
   //调用Service查询
   userService userservice = new userServiceImpl();
   int result = userservice.insert(user);
   HttpSession session = request.getSession();
   if (result == 1){     //添加成功
      session.setAttribute("user",user);//注册成功 将用户存入session
      session.setAttribute("role",user.getUserRole());
      response.sendRedirect(request.getContextPath()+"/index.jsp");//跳转到首页
   }else{
      request.setAttribute("regist_msg","注册失败!");//登录失败
      request.getRequestDispatcher("/regist.jsp").forward(request,response);//跳转登录页面
   }
}

(2)注册功能的dao层代码

@Override
public int insert(User user) {
   if (user==null){
      return 0;
   }
   int result=-1;
   try {
      conn = JDBCUtils.getConnection();
      String sql="insert into user_list(user_id,user_age,user_name,user_password,user_role) values(?,?,?,?,?)";
      System.out.println("sql:"+sql);
      pst = conn.prepareStatement(sql);
      //动态添加数据
      pst.setString(1,user.getUserId());
      pst.setInt(2,user.getAge());
      pst.setString(3,user.getUsername());
      pst.setString(4,user.getPassword());
      pst.setString(5,user.getUserRole());
      result=pst.executeUpdate();    //注意:执行的适合不需要传入sql语句
   } catch (SQLException e) {
      e.printStackTrace();
   } finally {
      JDBCUtils.close(rs, pst, conn);    //释放连接
   }
   return result;
}

(3)进行删除时验证用户身份js方法

function del(user_id,user_role,userName){
    if (user_role.toString()=="用户"){
        alert("您没有权限删除其他人");
        return false;
    }
    if(confirm("确认删除"+userName+"吗?")){
        window.location.href= "delete.jsp?user_id="+user_id+"&user_name="+userName;
    }else{
        window.location.href="index.jsp";
    }
}

(4)删除用户的deleteServlet的doGet方法

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   System.out.println("delete-get");
   //设置编码
   request.setCharacterEncoding("utf-8");
   //获取删除的user_id
   String user_id = request.getParameter("user_id");
   userService service = new userServiceImpl();
   service.delete(user_id);
   //跳转到查询所有Servlet
   response.sendRedirect(request.getContextPath()+"/index.jsp");

(5)更新用户信息updateServlet的doPost方法

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
   System.out.println("update-post");
   //设置编码
   request.setCharacterEncoding("utf-8");
   Map<String, String[]> map = request.getParameterMap();
   //封装User对象
   User user = new User();
   try {
      BeanUtils.populate(user,map);
   } catch (IllegalAccessException e) {
      e.printStackTrace();
   } catch (InvocationTargetException e) {
      e.printStackTrace();
   }
   HttpSession session = request.getSession();
   //调用Service查询
   userService userservice = new userServiceImpl();
   int result=userservice.update(user);
   if (result == 1){     //添加成功
      response.sendRedirect(request.getContextPath()+"/index.jsp");//跳转到首页
   }else{
      //修改失败
   }
}

总结

分层编写代码。使用Dao进行与数据库的增删改查操作;Service层进行业务操作;Servlet进行处理请求。在jsp表单提交的时候调用Servlet处理请求。采用分层管理代码,将方法的定义和实现抽离。使用工具类读取配置文件的时候,要保证路径正确,不然会读取不到报错。在表单中使用post请求,则应该编写servlet中的doPost方法。采用分层方法管理代码,代码的管理起来更加方便了,可读性更高,修改更加简便

源码下载

点击下载源码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用jsp-servlet-service-dao四层结构完成用户信息的增删改查操作(2020.12.22) 的相关文章

  • python实现自动化鼠标点击

    python实现自动化鼠标点击 span class token keyword import span pyautogui span class token keyword import span time span class toke
  • opengles共享纹理

    OpenGL ES 3 0中引入的 外部纹理 xff08 External Textures xff09 扩展 xff0c 允许将OpenGL纹理对象绑定到由外部API创建的纹理对象 xff0c 例如相机采集到的图像 视频流或其他图像数据
  • https 证书工具 Letsencrypt 简单教程

    https取代http是大势所趋 xff0c https的好处本文不在赘述 xff0c 很多公司和机构都在推进这一进程 xff0c Apple公司甚至规定 xff0c iOS上的App应用必须使用https 因此 xff0c 正是受到App
  • Linux简单命令使用笔记

    之前一直用虚拟机 xff0c 其实购买一台阿里云服务器学习linxu更加的方便快捷 阿里云服务器购买 1 electerm连接登录linux SecureCRT和SFTP 最近linux连接工具electerm 上面是两款不同的连接linu
  • 软件工程的十大模型

    1 软件生命周期模型 软件生命周期由软件定义 软件开发与运维 xff08 也称软件维护 xff09 3个时期组成 xff0c 每个时期又进一步划分成若干个阶段 问题定义 xff1a 要解决的问题是什么 xff1f 通过对客户的访问调查 xf
  • WEEK6 限时测试A - 掌握魔法の东东 II

    A 掌握魔法 东东 II 题目描述 从瑞神家打牌回来后 xff0c 东东痛定思痛 xff0c 决定苦练牌技 xff0c 终成赌神 xff01 东东有 A B 张扑克牌 每张扑克牌有一个大小 整数 xff0c 记为a xff0c 范围区间是
  • WEEK13 作业 A - TT 的神秘任务1(必做)

    A TT 的神秘任务1 xff08 必做 xff09 题目描述 这一天 xff0c TT 遇到了一个神秘人 神秘人给了两个数字 xff0c 分别表示 n 和 k xff0c 并要求 TT 给出 k 个奇偶性相同的正整数 xff0c 使得其和
  • WEEK14 作业 C - Q老师的考验(必做)

    C Q老师的考验 xff08 必做 xff09 题目描述 Q老师 对数列有一种非同一般的热爱 xff0c 尤其是优美的斐波那契数列 这一天 xff0c Q老师 为了增强大家对于斐波那契数列的理解 xff0c 决定在斐波那契的基础上创建一个新
  • 程序设计与实践 模拟题四 201809-3 元素选择器

    201809 3 元素选择器 题目描述 题解 本题是一道思维难度不大的模拟题 实现过程和思想都比较简单 xff0c 具体实现比较难 xff0c 认真仔细即可 xff08 但是自己一开始写的代码只得了80分 xff0c 又比较了其他人的代码才
  • idea中添加maven远程仓库

    idea无法自动下载依赖的解决方法 xff1a 1 xff1a 选择自己的maven目录 配置文件setting xml和仓库repository xff0c 并勾选2个Override 2 点击Runner 在VM Options那一行添
  • 详解C++中的指针结构体数组以及指向结构体变量的指针

    这篇文章主要介绍了C 43 43 中的指针结构体数组以及指向结构体变量的指针的用法 是C 43 43 入门学习中的基础知识 需要的朋友可以参考下 C 43 43 结构体数组 一个结构体变量中可以存放一组数据 xff08 如一个学生的学号 姓
  • bad substitution

    初接触shell脚本 xff0c 在vim中写代码 xff0c 出现了好几次 Bad substitution 我的错误有两种 xff1a 开始的的指定脚本环境 应该是 bin bash 在编译运行时 也应该用 bash 的使用错误 xff
  • Re.从零开始--基于UbuntuServer 20.04-OpenStack平台搭建_

    基于UbuntuServer 20 04 OpenStack平台搭建 前言 xff1a 本文档基于ubuntu server20 04版本和OpenStack Victoria搭建openstack环境 部署最小化Ubuntu openst
  • win10系统vvv连接不上,提示:“在连接完成前,连接被远程计算机终止”的解决办法

    进入 控制面板 网络和共享中心 更改适配器设置 右键点 vvv连接 属性 安全 选择 允许使用这些协议 xff0c 以下选项全部打勾即可 未加密的密码 质询握手身份验证协议 Microsoft CHAP Version2
  • CSP 2021 S组游记

    这是异想之旅的一篇水文 xff0c 技术无关 占个坑 xff0c 晚上更新 说说初赛 xff1a 我的竞赛老师是很重视初赛的 xff0c 整个暑假一半的时间集训 xff0c 而一半的集训时间都是面对初赛 模拟题大家做的量不同 xff0c 但
  • linux命令解压压缩rar文件的详细步骤

    一 widonds下打包rar文件并上传 yum install lrzsz rz test rar 二 下载并安装rar软件 2 1 下载 mkdir p home oldboy tools cd home oldboy tools wg
  • 配置pvst详解

    配置 pvst 在学习pvst之前 xff0c 先要学习一下stp STP生成树 思科默认有stp配置 1 选择根网桥 xff08 root bridge xff09 xff08 这个是必须的配置 xff09 选择根网桥的依据是网桥ID x
  • (真)手把手教你配置Ubuntu大数据Hadoop环境

    目录 一 前期准备 VMware tools安装 基本配置 root配置 网络配置 软件源配置 二 创建hadoop用户和文件 用户创建 小插曲 三 FTP配置 四 配置java环境及安装eclipse 安装eclipse 安装java环境
  • Ubuntu安装配置hbase完美解决方案

    目录 一 解决版本号打印失败问题 二 配置伪分布式 三 运行简单的hbase shell命令 这篇文章需要配合前一篇文章一起食用更加美味 xff08 真 xff09 手把手教你配置Ubuntu大数据Hadoop环境 一 解决版本号打印失败问
  • Linux shell实现阶乘

    bin sh read p 34 请输入想计算的数字 34 num 首先定义一个num参数接受为命令行的第一个参数 expr num 43 1 amp gt dev null 利用expr计算时参数必须是整数的原则 xff0c 如果返回零则

随机推荐