mvc三层架构(用户信息管理系统)

2023-11-14

mvc三层架构(实战项目 用户信息管理系统)

一、三层架构

  1. View 层:用于接收用户提交请求的代码。
  2. Service 层:系统的业务逻辑主要在这里完成。
  3. Dao 层:直接操作数据库的代码。

二、三层架构图

三、用户信息管理系统
利用MVC三层架构设计思想完成的一个用户信息管理系统,主要是让大家熟悉MVC三层架构。
1.项目功能

  1. 用户登录
  2. 用户注册
  3. 查看个人信息
  4. 修改个人信息
  5. 查看所有用户信息
  6. 退出
    2.数据库设计
  7. 创建数据库
    create database test;
    -创建表
    在这里插入图片描述
    3.打开IDEA创建项目
    在这里插入图片描述
    登入注册其他的jsp部分我就不展示,最主要是让大家了解三层架构的逻辑思维,怎么样的一个流程。
  8. 建包
    在这里插入图片描述

1 在pojo包中创建一个实体类User

package cn.pojo;

public class User {
   private int uid;
   private String uname;
   private String pwd;
   private String sex;
   private int age;
   private String birth;

   public User() {
       super();
   }

   public User(int uid, String uname, String pwd, String sex, int age, String birth) {
       super();
       this.uid = uid;
       this.uname = uname;
       this.pwd = pwd;
       this.sex = sex;
       this.age = age;
       this.birth = birth;
   }

   public int getUid() {
       return uid;
   }

   public void setUid(int uid) {
       this.uid = uid;
   }

   public String getUname() {
       return uname;
   }

   public void setUname(String uname) {
       this.uname = uname;
   }

   public String getPwd() {
       return pwd;
   }

   public void setPwd(String pwd) {
       this.pwd = pwd;
   }

   public String getSex() {
       return sex;
   }

   public void setSex(String sex) {
       this.sex = sex;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

   public String getBirth() {
       return birth;
   }

   public void setBirth(String birth) {
       this.birth = birth;
   }
}
  1. 创建servlet包,新建userServlet类

Servlet层

package cn.servlet;

import cn.pojo.User;
import cn.service.UserService;
import cn.service.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;

public class userServlet extends HttpServlet {
    //获取service层对象
    UserService us = new UserServiceImpl();

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //获取操做符
        String oper = req.getParameter("oper");
        if ("login".equals(oper)) {
            //调用登录处理方法
            checkUserLogin(req, resp);
        } else if ("out".equals(oper)) {
            //调用退出功能
            userOut(req, resp);
        } else if ("pwd".equals(oper)) {
            //调用密码修改功能
            userChangePwd(req, resp);
        } else if ("show".equals(oper)) {
            //调用显示所有用户功能
            userShow(req, resp);
        } else if("reg".equals(oper)){
            //调用注册功能
            userReg(req,resp);
        }else{
            return;
        }
    }
    //注册用户功能
    private void userReg(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //获取请求信息
        String uname=req.getParameter("uname");
        String pwd=req.getParameter("pwd");
        String sex=req.getParameter("sex");
        int age=req.getParameter("age")!=""?Integer.parseInt(req.getParameter("age")):0;
        String birth=req.getParameter("birth");
        /*//转日期格式
        String[] bs=null;
        if(birth!=""){
            bs=birth.split("/");
            birth=bs[0]+"-"+bs[1]+"-"+bs[2];//拼接
        }*/
        System.out.println(uname+":"+pwd+":"+sex+":"+age+":"+birth);
        User u=new User(0,uname,pwd,sex,age,birth);//封装数据
        //处理请求信息
        //调用业务层处理
        int index=us.userRegService(u);
        //响应处理结果
        if(index>0){
            //获取session
            HttpSession hs=req.getSession();
            hs.setAttribute("reg", "true");
            //重定向
            resp.sendRedirect("login.jsp");
        }
    }

    //显示所有用户信息
    private void userShow(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理请求
        //调用service
        List<User> lu=us.userShowService();
        //判断
        if(lu!=null){
            //将查询的用户数据存储到request对象
            req.setAttribute("lu",lu);
            //请求转发
            req.getRequestDispatcher("user/showUser.jsp").forward(req, resp);
            return;
        }
    }
    //登录处理
    private void checkUserLogin(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
        //获取请求信息
        String uname=req.getParameter("uname");
        String pwd=req.getParameter("pwd");
        //处理请求信息
        //校验
        User u=us.checkUserLoginService(uname,pwd);
        //System.out.println(u.getUid()+" "+u.getUname()+" "+u.getPwd()+" "+u.getSex()+" "+u.getAge()+" "+u.getBirth());
        //响应处理结果
        if(u!=null){
            //获取session对象
            HttpSession hs=req.getSession();
            //将用户数据存储到session中
            hs.setAttribute("user",u);
            //重定向
            resp.sendRedirect("main.jsp");
            return;
        }else {
            //添加标识符到request中
            req.setAttribute("flag",false);
            //请求转发
            req.getRequestDispatcher("login.jsp").forward(req, resp);
            return;
        }
    }
    //用户退出
    private void userOut(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //获取session对象
        HttpSession hs=req.getSession();
        //强制销毁session
        hs.invalidate();
        //重定向到登录页面
        resp.sendRedirect("login.jsp");
    }
    //用户修改密码
    private void userChangePwd(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        //获取数据
        String newPwd=req.getParameter("newPwd");
        //从session中获取用户信息
        User u=(User)req.getSession().getAttribute("user");
        int uid=u.getUid();
        //处理请求
        //调用service处理
        int index=us.userChangePwdService(newPwd,uid);
        if(index>0){
            //获取session对象
            HttpSession hs=req.getSession();
            hs.setAttribute("pwd","true");
            //重定向到登录页面
            resp.sendRedirect("login.jsp");
        }
    }

}
  1. 创建service包,新建UserService接口类,UserServiceImpl实现接口类

Service层

package cn.service;

import cn.pojo.User;

import java.util.List;

public interface UserService {
    User checkUserLoginService(String uname,String pwd);//校验用户登录

    int userChangePwdService(String newPwd, int uid);//修改用户密码

    List<User> userShowService();//获取所有用户信息

    int userRegService(User u);//用户注册
}
package cn.service;

import cn.dao.UserDao;
import cn.dao.UserDaoImpl;
import cn.pojo.User;

import java.util.List;

public class UserServiceImpl implements UserService{
    //声明Dao层对象
    UserDao ud=new UserDaoImpl();
    @Override
    public User checkUserLoginService(String uname, String pwd) {//用户登录
        return ud.checkUserLoginDao(uname,pwd);
    }
    //修改密码
    @Override
    public int userChangePwdService(String newPwd, int uid) {
        return ud.userChangePwdDao(newPwd,uid);
    }
    //获取所有用户信息
    @Override
    public List<User> userShowService() {
        return ud.userShowDao();
    }
    //用户注册
    @Override
    public int userRegService(User u) {
        return ud.userRegDao(u);
    }
}
  1. 创建dao包,新建UserDao接口类,UserDaoImpl实现接口类

Dao层

package cn.dao;

import cn.pojo.User;

import java.util.List;

public interface UserDao {
    User checkUserLoginDao(String uname,String pwd);//根据用户名和密码查询用户信息

    int userChangePwdDao(String newPwd, int uid);//修改密码

    List<User> userShowDao();//查看所有用户


    int userRegDao(User u);//用户注册
}
package cn.dao;

import cn.pojo.User;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class UserDaoImpl implements UserDao{
    @Override//用户注册
    public int userRegDao(User u) {
        //声明jdbc对象
        Connection conn=null;
        PreparedStatement ps=null;
        //声明变量
        int index=-1;
        try {
            //加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //获取链接
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","2001223");
            //创建sql语句
            String sql="insert into t_user value(default,?,?,?,?,?)";
            //创建sql命令对象
            ps=conn.prepareStatement(sql);
            //给占位符赋值
            ps.setString(1,u.getUname());
            ps.setString(2,u.getPwd());
            ps.setString(3,u.getSex());
            ps.setInt(4,u.getAge());
            ps.setString(5,u.getBirth());
            //执行sql
            index=ps.executeUpdate();
        }catch (Exception e){
            e.getStackTrace();
        }finally {
            //关闭资源
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        //返回结果
        return index;
    }

    @Override
    //获取所有用户信息
    public List<User> userShowDao() {
        //声明jdbc对象
        Connection conn=null;
        PreparedStatement ps=null;
        ResultSet rs=null;
        //声明变量
        List<User> lu=null;
        try {
            //加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //获取链接
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","2001223");
            //创建sql语句
            String sql="select * from t_user";
            //创建sql命令对象
            ps=conn.prepareStatement(sql);
            //执行sql
            rs=ps.executeQuery();
            //给集合赋值
            lu=new ArrayList<User>();
            //遍历结果集
            while (rs.next()){
                //给变量赋值
                User u=new User();
                u.setUid(rs.getInt("uid"));
                u.setUname(rs.getString("uname"));
                u.setPwd(rs.getString("pwd"));
                u.setSex(rs.getString("sex"));
                u.setAge(rs.getInt("age"));
                u.setBirth(rs.getString("birth"));
                //将对象存储到集合中
                lu.add(u);
            }
        }catch (Exception e){
            e.getStackTrace();
        }finally {
            //关闭资源
            try {
                assert rs != null;
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return lu;
    }

    @Override
    //根据用户id修改用户密码
    public int userChangePwdDao(String newPwd, int uid) {
        //声明jdbc对象
        Connection conn=null;
        PreparedStatement ps=null;
        //创建变量
        int index=-1;
        try {
            //加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //获取链接
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","2001223");
            //创建sql语句
            String sql="update t_user set pwd=? where uid=?";
            //创建sql命令对象
            ps=conn.prepareStatement(sql);
            //给占位符赋值
            ps.setString(1,newPwd);
            ps.setInt(2,uid);
            //执行sql
            index=ps.executeUpdate();
        }catch (Exception e) {
            e.getStackTrace();
        }finally {
            //关闭资源
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        //返回结果
        return index;
    }

    @Override
    public User checkUserLoginDao(String uname, String pwd){//根据用户名和密码查询用户信息
        //声明jdbc对象
        Connection conn=null;
        PreparedStatement ps=null;
        ResultSet rs=null;
        //声明变量
        User u=null;
        try {
            //加载驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //获取链接
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","2001223");
            //创建sql语句
            String sql="select * from t_user where uname=? and pwd=?";
            //创建sql命令对象
            ps=conn.prepareStatement(sql);
            //给占位符赋值
            ps.setString(1,uname);
            ps.setString(2,pwd);
            //执行sql
            rs=ps.executeQuery();
            //遍历结果集
            while (rs.next()){
                u=new User();
                u.setUid(rs.getInt("uid"));
                u.setUname(rs.getString("uname"));
                u.setPwd(rs.getString("pwd"));
                u.setSex(rs.getString("sex"));
                u.setAge(rs.getInt("age"));
                u.setBirth(rs.getString("birth"));
            }
        }catch (Exception e){
            e.getStackTrace();
        }finally {
            //关闭资源
            try {
                assert rs != null;
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
            //返回结果
            return u;
    }
}

主要功能实现代码,仅供学习者参考

最后就是一些效果图
登录
注册
查看个人信息
修改信息
查看所有用户信息
用户退出

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

mvc三层架构(用户信息管理系统) 的相关文章

随机推荐

  • Java手写数组和案例拓展

    Java手写数组和案例拓展 1 Mermanid代码绘制的思维导图解释实现思路原理 mermaid svg HoH3kyfEhPDhcUh4 font family trebuchet ms verdana arial sans serif
  • js发布——订阅模式的通用实现及取消订阅

    h1 发布 订阅模式的通用实现 h1 p javaScript作为一门解释执行的语言 给对象添加动态职责是理所当然的 所以我们将发布 订阅的功能提取出来 放在一个单独的对象内 p
  • Javascript创建对象的几种方式及优劣

    1 字面量方式 var obj name tom age 20 career network getName function return this name alert obj getName 这种方式适合创建单个对象 2 创建Obje
  • HttpCanary使用指南——各种神奇的插件

    HttpCanary更多资料 点我 作为目前Android平台最强大的抓包工具 HttpCanary从设计之初就规划了插件功能 2 6 0版本之前称为 模组 基于NetBare框架的虚拟网关 拦截器设计 HttpCanary可以实现非常多的
  • 2020春秋招聘图像处理 人工智能方向 各大厂面试常见题整理一(附答案)(阿里腾讯华为字节)

    因为本人近期也要紧临毕业 面临招聘面试 所以整体别人公开的面经 做一个整理 并且加上自己认为的答案 欢迎各位读者对答案进行指正和交流 深度残差的作用 直观上 深度加深 出现梯度消失和梯度爆炸的问题 在论文中 出现了一个奇怪的现象 就是56层
  • Hive命令的使用

    命令行界面 Command Line Interface CLI 是Hive交互最常见也是最方便的方式 在命令行界面可以执行Hive支持的觉大多数功能 如查询 创建等 hive e 有时 并不需要一直打开命令行界面 也就是说执行完查询后立刻
  • Vue-ref用法

    用ref操作模版中的dom元素 1 在模版中 声明ref名称 div ref引用Dom节点 div 2 用法 change this refs chagneBack style color red 用ref操作组件 1 在组件引用中声明re
  • Redis 汇总

    Redis 0 声明 1 概述 1 1 Redis是什么 1 2 Redis优缺点 1 3 为什么要用 Redis 为什么要用缓存 1 4 Redis为什么这么快 2 常用数据结构 2 1 String 应用场景 2 2 List 应用场景
  • Jetpack Compose多平台用于Android和IOS

    JetBrains和外部开源贡献者已经努力工作了几年时间来开发Compose Multiplatform 并最近发布了适用于iOS的Alpha版本 自然地 我们对其功能进行了测试 并决定通过使用该框架在iOS上运行我们的Dribbble复制
  • Matlab中求数据概率分布的方法

    一 问题描述 对已有的一些列数据进行分析 想得到该数据的分布和统计特性 如概率密度函数 概率分布 累计概率密度等等 例如 已有一段时间的声音测量数据 求该数据的分布特性 并给出噪声的95 置信区间统计参数以表征该声音监测数据的总体水平 二
  • HTTP响应的结构是怎么样的?

    HTTP响应由三部分组成 状态行 响应头 响应正文 状态行 包括协议版本的Version 状态码 Status Code 回应短语 响应头 包括搭建服务器的软件 发送响应的时间 回应数据的格式等信息 响应正文 就是响应的具体数据 HTTP请
  • PROJ.4学习——初识PROJ

    PROJ 4介绍 初始认识 前言 PROJ是一个通用的坐标转换软件 它将地理空间坐标从一个坐标系转换为另一个坐标系 这包括地图投影和大地坐标变换 PROJ包含命令行应用程序 可以方便地从文本文件或直接从用户输入转换坐标 除了命令行实用程序之
  • eclipse安装教程(2021最新版)超级易懂到吐血

    第一步 下载JDK 下载地址 http www oracle com technetwork java javase downloads index html 第二步 根据自己电脑的系统 选择相应的版本x64代表64位 x86代表32位 点
  • 螺杆真空泵安装流程图_螺杆式真空泵基本知识送给刚入行的新朋友

    螺杆式真空泵是容积式真空泵中的新兴成员 出现于上世纪90年代前后 发展较晚 但作为一种理想干泵 螺杆式真空泵在面世后获得了快速发展 现在就跟小编去了解一下它的基本知识吧 一 螺杆式真空泵特点 螺杆式真空泵脱胎于螺杆式压缩机与螺杆液体输送泵
  • 精英反向与二次插值改进的黏菌算法-附代码

    精英反向与二次插值改进的黏菌算法 文章目录 精英反向与二次插值改进的黏菌算法 1 黏菌算法 2 改进黏菌算法 2 1 精英反向学习机制 2 2 二次插值方法 3 实验结果 4 参考文献 5 Matlab代码 6 python代码 摘要 针对
  • 关于集合Collection

    集合框架 概念 1 Collection是所有集合的顶级接口 2 集合和数组一样 可以保存一组元素 并且提供了操作元素的相关方法 使用更方便 3 Collection 下面有多种实现类 因此我们有更多的数据结构可以选择 Collection
  • 蓝桥杯2020年第十一届省赛真题-子串分值

    题目 题目链接 题解 思维 考虑每个字符对最终答案的贡献 每个字符的贡献为其左侧连续与之不相同的字符个数 1乘以其右侧与之不相同的字符个数 1 样例 ababc 第一个字符a的贡献 0 1 1 1 2 a ab 第二个字符b的贡献 1 1
  • Java使用poi-tl1.9.1生成Word文档的几个小技巧

    目录 前言 一 poi tl简介 1 什么是poi tl 2 常见的word生成对比 3 poi tl功能点 二 poi tl文档生成 1 模板准备 2 目标参数填充 3 生成效果 三 可能会遇到的问题 1 混合图表生成报错 2 图表参数设
  • Linux /etc/resolv.conf DNS服务器IP地址修改被覆盖问题

    为了临时修改DNS服务器IP地址 可能会选择手动修改 etc resolv conf 文件 而在重启Network Manager服务后 sudo systemctl restart NetworkManager resolv conf 文
  • mvc三层架构(用户信息管理系统)

    mvc三层架构 实战项目 用户信息管理系统 一 三层架构 View 层 用于接收用户提交请求的代码 Service 层 系统的业务逻辑主要在这里完成 Dao 层 直接操作数据库的代码 二 三层架构图 三 用户信息管理系统 利用MVC三层架构