JavaEE 项目:用户信息管理系统

这篇具有很好参考价值的文章主要介绍了JavaEE 项目:用户信息管理系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

项目介绍

数据库设计

各包结构设计与说明

功能实现

1. 登录功能

2. 分页查询、模糊查询

3. 增、删、改操作

总结

项目介绍

本项目主要实现了对用户信息的管理,能够在客户端很好的操作各个功能,并实时更新用户数据。采用 MySQL数据库 存储数据,JDBC 连接数据库,Servlet、JSP 等技术完成各个功能的具体实现。界面采用 Bootstrap框架 技术,实现了一个简单的界面效果。

数据库设计

为了方便起见,将管理员的用户名和密码写在了用户信息表中。(不合理的设计,当个反面教材)

图示:

JavaEE 项目:用户信息管理系统

各包结构设计与说明

JavaEE 项目:用户信息管理系统

userInfo_project:模块名

src / dao:操作数据库的接口(访问数据库层)

src / dao / impl:操作数据库接口的具体实现类

src / domain:实体类

src / service:一系列数据处理的接口(业务逻辑层)

src / service / impl:数据处理接口的具体实现类

src / util:连接数据库的工具类

src / web:存放各个servlet

web:前端展示界面(界面层)

功能实现

1. 登录功能

设计思路:管理员填写用户名和密码后,通过表单提交到 LoginServlet 进行数据验证操作。

LoginServlet:

//登录
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码
        request.setCharacterEncoding("utf-8");
        //获取用户输入的验证码
        String verifycode = request.getParameter("verifycode");
        //获取系统生成的验证码
        HttpSession session = request.getSession();
        String checkCode_server = (String) session.getAttribute("CHECKCODE_SERVER");
        //删除session,确保验证码的一次性
        session.removeAttribute("CHECKCODE_SERVER");
        //判断验证码:验证码不正确
        if (!checkCode_server.equalsIgnoreCase(verifycode)) {
            //提示信息
            request.setAttribute("login_msg", "验证码错误!");
            //跳转登录页面,转发
            request.getRequestDispatcher("/login.jsp").forward(request, response);
            return;
        }

        //获取所有参数的map集合
        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 service = new UserServiceImpl();
        User loginUser = service.login(user);
        //判断是否登录成功
        if (loginUser != null) {
            //登录成功,将用户存到session
            session.setAttribute("user", loginUser);
            //跳转到主页面,重定向
            response.sendRedirect(request.getContextPath() + "/index.jsp");
        } else {
            //登录失败,提示错误信息
            request.setAttribute("login_msg", "用户名或密码错误!");
            //跳转登录页面,转发
            request.getRequestDispatcher("/login.jsp").forward(request, response);
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

注意:数据的查询操作是通过调用封装在UserServiceImpl类中的login方法来实现的,而其中的login方法是根据封装在UserDaoImpl类中的findUserByUsernameAndPassword方法来实现的。

login:

    //验证登录信息
    @Override
    public User login(User user) {
        return dao.findUserByUsernameAndPassword(user.getUsername(), user.getPassword());
    }

findUserByUsernameAndPassword:

    //根据用户名和密码查询User对象
    @Override
    public User findUserByUsernameAndPassword(String username, String password) {
        try {
            String sql = "select * from user where username = ? and password = ?";
            User user = template.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), username, password);
            return user;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

实现效果:

JavaEE 项目:用户信息管理系统

2. 分页查询、模糊查询

设计思路:创建一个分页的实体类对象 PageBean,主页跳转到 FindUserByPageServlet 中进行查询。

PageBean属性:

    //总记录数
    private int totalCount;
    //总页码
    private int totalPage;
    //每页的数据
    private List<T> list;
    //当前页码
    private int currentPage;
    //每页显示的记录数
    private int rows;

FindUserByPageServlet:

//查询
@WebServlet("/findUserByPageServlet")
public class FindUserByPageServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置编码
        request.setCharacterEncoding("utf-8");
        //当前页码
        String currentPage = request.getParameter("currentPage");
        //每页显示条数
        String rows = request.getParameter("rows");
        //判断当前页码、每页显示的条数
        if (currentPage == null || "".equals(currentPage)) {
            currentPage = "1";
        }
        if (rows == null || "".equals(rows)) {
            rows = "5";
        }
        //获取条件查询参数
        Map<String, String[]> condition = request.getParameterMap();
        //调用service查询
        UserService service = new UserServiceImpl();
        PageBean<User> pb = service.findUserByPage(currentPage, rows, condition);

        //将PageBean存入request
        request.setAttribute("pb", pb);
        //将查询条件存入request
        request.setAttribute("condition", condition);
        //转发到list.jsp
        request.getRequestDispatcher("/list.jsp").forward(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

注意:数据的查询是通过调用封装在UserServiceImpl类中的findUserByPage方法实现的,然而具体的数据库操作是根据封装在UserDaoImpl类中的 findTotalCount 和 findByPage 方法 来实现的。

findTotalCount:

    //查询总记录条数
    @Override
    public int findTotalCount(Map<String, String[]> condition) {
        //定义模板初始化sql
        String sql = "select count(*) from user where 1 =1 ";
        StringBuilder sb = new StringBuilder(sql);
        //遍历map
        Set<String> keySet = condition.keySet();
        //定义参数集合
        List<Object> params = new ArrayList<>();
        for (String key : keySet) {
            //排除分页条件参数
            if ("currentPage".equals(key) || "rows".equals(key)) {
                continue;
            }
            //获取value
            String value = condition.get(key)[0];

            //判断value是否有值
            if (value != null && !"".equals(value)) {
                //有值
                sb.append(" and " + key + " like ? ");
                //?条件的值
                params.add("%" + value + "%");
            }
        }
        return template.queryForObject(sb.toString(), Integer.class, params.toArray());
    }

findByPage:

    //在数据库中查询数据,获取一个User的对象集合
    @Override
    public List<User> findByPage(int start, int rows, Map<String, String[]> condition) {
        String sql = "select * from user where 1 = 1 ";
        StringBuilder sb = new StringBuilder(sql);
        //遍历map
        Set<String> keySet = condition.keySet();
        //定义参数集合
        List<Object> params = new ArrayList<>();
        for (String key : keySet) {
            //排除分页条件参数
            if ("currentPage".equals(key) || "rows".equals(key)) {
                continue;
            }
            //获取value
            String value = condition.get(key)[0];
            //判断value是否有值
            if (value != null && !"".equals(value)) {
                //有值
                sb.append(" and " + key + " like ? ");
                //?条件的值
                params.add("%" + value + "%");
            }
        }
        if (start < 0)
            start = 0;
        //添加分页查询
        sb.append(" limit ?,? ");
        //添加分页查询参数值
        params.add(start);
        params.add(rows);

        return template.query(sb.toString(), new BeanPropertyRowMapper<>(User.class), params.toArray());
    }

findUserByPage:

    //处理查询
    @Override
    public PageBean<User> findUserByPage(String _currentPage, String _rows, Map<String, String[]> condition) {
        //类型转换
        int currentPage = Integer.parseInt(_currentPage);
        int rows = Integer.parseInt(_rows);
        //第一页时,不能点击上一页
        if (currentPage <= 0)
            currentPage = 1;

        //创建PageBean对象
        PageBean<User> pb = new PageBean<>();
        //调用dao查询总记录数
        int totalCount = dao.findTotalCount(condition);
        pb.setTotalCount(totalCount);
        
        //计算总页码
        int totalPage = (totalCount % rows) == 0 ? totalCount / rows : totalCount / rows + 1;
        pb.setTotalPage(totalPage);
        
        //最后一页时,不能点击下一页
        if (currentPage >= totalPage)
            currentPage = totalPage;

        //设置参数
        pb.setCurrentPage(currentPage);
        pb.setRows(rows);

        //调用dao查询list集合
        //计算开始记录索引
        int start = (currentPage - 1) * rows;
        List<User> list = dao.findByPage(start, rows, condition);
        pb.setList(list);

        return pb;
    }

实现效果:

JavaEE 项目:用户信息管理系统

3. 增、删、改操作

设计思路:管理员选择对应的功能操作后,JSP页面的数据就会提交到对应的 Servlet 中进行处理,通过调用业务逻辑层中的方法,业务逻辑层再调用数据库操作层中的方法,从而实现用户信息的增、删、改。

实现效果:

JavaEE 项目:用户信息管理系统

 JavaEE 项目:用户信息管理系统

总结

        本项目综合性很强,涉及到的知识点比较多,盲目的敲代码是不理智的,明确项目的设计思路十分重要。本次介绍只展示出了几个比较重要功能的部分代码,其他部分就不详细介绍了。博主认为最难的点就在于数据的交互前端到后端,后端到前端,前端到前端,后端到后端,使用的数据传递方式不尽相同,要明确是哪一种数据传递场景,这样就很好解决了。

源码

可在博主主页获取!文章来源地址https://www.toymoban.com/news/detail-474967.html


到了这里,关于JavaEE 项目:用户信息管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot+vue的时间管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

    Springboot+vue的时间管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 本文设计了一个基于Springboot+vue的前后端分离的时间管理系统,采用M(model)V(

    2024年02月07日
    浏览(45)
  • Springboot+vue的教学资料管理系统(有报告)。Javaee项目,springboot vue前后端分离项目

    Springboot+vue的教学资料管理系统(有报告)。Javaee项目,springboot vue前后端分离项目 本文设计了一个基于Springboot+vue的前后端分离的教学资料管理系统,采用M(model)V(view)C(controller)三层体系结构,通过Spring + SpringBoot + Mybatis+Vue+Maven来实现。MySQL数据库作为系统数据储存平

    2024年02月04日
    浏览(55)
  • 信息系统项目管理师-项目沟通管理

    1.信息系统项目管理师-项目整合管理 2.信息系统项目管理师-项目范围管理 3.信息系统项目管理师-项目进度管理 4.信息系统项目管理师-项目成本管理 5.信息系统项目管理师-项目质量管理 6.信息系统项目管理师-项目资源管理 7.信息系统项目管理师-项目沟通管理 8.信息系统项目

    2023年04月16日
    浏览(77)
  • 信息系统项目管理师:配置管理

    配置管理指的是在一个系统或软件中对配置项的管理,包括对配置项的定义、存储、跟踪和修改等一系列活动。配置项可以是硬件设备、软件组件、系统设置、网络配置等,配置管理旨在确保在不同时间点或环境下系统或软件的配置项的正确性和一致性。通过配置管理,可以

    2024年02月16日
    浏览(62)
  • Springboot+vue的开放性实验室管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

    ssm+vue的开放性实验室管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。 采用M(model)V(view)C(controller)三层体系结构,通过Spring + SpringMvc+ Mybatis+Vue+Maven来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。界面简洁,操作简单。

    2024年02月07日
    浏览(64)
  • JAVAWEB学生信息管理系统保姆级教程(增删改查+<普通用户和管理员>登录注册+Filter+mysql+批量删除信息+用户退出登录注销)eclipse版(升级版)

    该项目源码地址: 源码地址请点击这里哟!         AdminBean.java        对数据库里的用户名的表的数据进行封装。         StudentBean.java         对数据库里的学生信息的表的数据进行封装。         AdminDao.java         实现登录和注册的方法。         

    2024年02月08日
    浏览(64)
  • 【Java/SSM/LayUI】JavaEE课程设计(基于Layui+SSM的图书管理系统项目介绍及源码)

    注: 本文为JavaEE课程的课程设计,如需原文件及项目代码请后台联系作者或qq3416252112,也可在作者主页资源中下载,仅供学习交流使用! 一、项目介绍 ​ 结合本学期所学知识,以及以往积累的经验,我们通过Layui+SSM的方式完成了简化版的“图书管理系统”。本系统操作界面

    2024年02月05日
    浏览(49)
  • 【软考高级信息系统项目管理师--第八章:项目整合管理】

    🚀 作者 :“码上有前” 🚀 文章简介 :软考高级–信息系统项目管理师 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 1、资源分配; 2、平衡竞争性需求; 3、研究各种备选方法; 4、裁减过程以实现各种方法; 5、管理各个项目管理知识领域之间的依赖关系。 编写一份正式批准项

    2024年02月19日
    浏览(55)
  • 【软考高级信息系统项目管理师--第五章:信息系统工程下】

    🚀 作者 :“码上有前” 🚀 文章简介 :软考高级–信息系统项目管理师 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 1、概念模型:基本元素包含实体、属性、、键、关联; 2、辑模型:主要数据结构有层次结构、网状结构、关系型、面向对象模型。 3、物理模型: 1、需求分析

    2024年02月20日
    浏览(67)
  • Javaweb项目案例:一个简单的用户管理系统实现

    我们来设计一个简单的用户管理系统,具有查看用户,添加用户,删除用户,更新用户的所有功能,并能支持分页显示,以及通过模糊查询的 本项目采用Druid数据库连接池 注意:JDBC和DAO部分本文不予演示,请自行完成此部分代码的编写🐿️ 模板页面,showuser.html Sho

    2024年02月09日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包