全网最详细的JavaWeb用户管理系统(详细源码讲解)(小白也行)

Posted 奇妙代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全网最详细的JavaWeb用户管理系统(详细源码讲解)(小白也行)相关的知识,希望对你有一定的参考价值。

基于Java web的用户管理系统开发(可直接跳到实现步骤)(小白也行)

1、业务及其需求分析

1、实现以下功能

1、用户的查询功能
2、用户的添加功能
2、用户的登录功能
3、用户的删除功能
4、用户的修改功能
5、用户的批量删除功能

2、使用以下技术

JSP+Servlet(request、response、session)+javaBean+druid连接池技术+JdbcTemplate+mysql+MVC开发模式(开发工具为IDEA)

2、简单成品展示

1、登录功能与简单界面


2、页面查询功能

3、添加功能

4、单个用户删除功能

5、用户修改功能

6、选中批量删除功能

3、实现步骤及其方法(重点必看)(一步一步对应实现)*****

1、用户查询功能


代码结构:

1、封装User 类
package com.entity;

public class User {
    private int id;
    private String name;
    private String gender;
    private int age;
    private String address;
    private String qq;
    private String email;
setter and getter方法
toString方法
}
2、改造的index.jsp并去到servlet中
 <a
 href="${pageContext.request.contextPath}/userListServlet" style="text-decoration:none;font-size:33px">查询所有用户信息
    </a>
3、创建userListServlet(什么都不干)和UserService 接口
public interface UserService {
    /**
     * 查询所有用户信息
     */
    public List<User> findAll();
}
4、service中创建子包impl定义接口实现 类 (UserServiceImpl)
public class UserServiceImpl implements UserService {
    public List<User> findAll(){
        //调用dao完成查询
        return ;
    }
}
5、dao中创建 接口 UserDao
/**
 * 用户操作的dao
 */
public interface UserDao {
    public List<User> findAll();
}
6、dao中的子包impl中创建定义接口实现的 类 (UserDaoImpl)
public class UserDaoImpl implements UserDao {
    private JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDataSource());
    @Override
    public List<User> findAll() {
       //使用jdbc操作数据库
        //1、定义sql
        String sql="select*from user";
        List<User> users = template.query(sql, new BeanPropertyRowMapper<User>(User.class));
        return users;
    }
}
7、UserServiceImpl中创建new实现类
public class UserServiceImpl implements UserService {
    private UserDao dao=new UserDaoImpl();
    @Override
    public List<User> findAll(){
        //调用dao完成查询
        return dao.findAll();
    }

}
8、再来userListServlet中
doPost中:
    
    //1、调用UserService完成查询
        UserService service=new UserServiceImpl();
        List<User> users = service.findAll();
        //2、将list存入request中
        request.setAttribute("users",users);
        //3、转发到list.jsp
       request.getRequestDispatcher("/list.jsp").forward(request,response);
9、jsp的list.jsp显示页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<body>
<div class="container">
    <h3 style="text-align: center">用户信息列表</h3>
    <form id="form" action="" method="post">
        <table align="center" cellpadding="2px" cellspacing="2px" border="1">
            <tr>
                <td><input type="checkbox"></td>
                <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="#">修改</a>&nbsp;<a
                            class="btn btn-default btn-sm" href="#">删除</a></td>
                </tr>
            </c:forEach>

        </table>
    </form>
</div>
</body>

2、登录功能及其验证码的加载及其切换

1、加载验证码,超链接形式点击切换
//在session中存入当前的code码,便于验证
        request.getSession().setAttribute("checkCode",code);

加载好验证码后实现切换:

<script type="text/javascript">
   //切换验证码
        function refreshCode(){//超链接的方法
            //1.获取验证码图片对象
            var img = document.getElementById("checkCode");
            //2.设置其src属性,加时间戳
 img.src = "${pageContext.request.contextPath}/checkCodeServlet?time="+new Date().getTime();
        }
    </script>


<a href="javascript:refreshCode();">
  <img src="${pageContext.request.contextPath}/checkCodeServlet" title="看不清点击刷新" id="checkCode"/></a>
2、创建LoginServlet
逻辑:
//1.设置编码
request.setCharacterEncoding("utf-8");
//2.获取数据  
//3.验证码校验
//4.封装User对象
//5.调用Service查询
//6、判断是否登录成功

doPost中的代码:

//1.设置编码
        request.setCharacterEncoding("utf-8");
        //2.获取数据
        //2.1获取用户填写验证码
        String verifycode = request.getParameter("verifycode");//jsp中验证码的name
        //3、验证码的校验
        HttpSession session = request.getSession();
        String code = (String)session.getAttribute("checkCode");//CheckCodeServlet中的值
        session.removeAttribute("checkCode");//确保验证码一次性

        if (!code.equalsIgnoreCase(verifycode)){
            //验证码不正确
            //提示信息
            request.setAttribute("login_msg","验证码错误!");
            request.getRequestDispatcher("/login.jsp").forward(request,response);
            return;
        }

        Map<String, String[]> map = request.getParameterMap();


        //4、封装User对象
        User user=new User();
        try {
            BeanUtils.populate(user,map);//JavaBean
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

        //5、调用service查询
        UserServiceImpl service = new UserServiceImpl();
        User loginUser=service.login(user);

      //编写到这里后报错,原因service中没有这个方法,接下来到service中创建方法

        //6、判断是否登录成功
        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);
         } 
3、来到service下的UserService中创建接口
public interface UserService {
    /**
     * 登录方法
     */
 User login(User user);
}
4、、来到service下impl中的UserServiceImpl中实现类
public class UserServiceImpl implements UserService {
    private UserDao dao=new UserDaoImpl();

   public User login(User user) {
        return dao.findUserByUsernameAndPassword(user.getUsername(),user.getPassword());
    }
    //现在应该返回null(要在dao中的接口中创建接口才行),这里省略,一步到位了
}
5、dao中的UserDao中创建接口
/**
 * 用户操作的dao
 */
public interface UserDao {
    User findUserByUsernameAndPassword(String username, String password);
}
6、dao中impl中实现类方法(操作数据库库的sql)
public class UserDaoImpl implements UserDao {
    private JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDataSource());
    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>(User.class), username, password);
            return user;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
//如果不try catch用户名或密码错误会报500的错误

再次回来LoginServlet中编写

3、用户添加功能

逻辑图

1、修改按钮跳转页面
<a class="btn btn-primary" href="${pageContext.request.contextPath}/add.jsp">添加联系人</a>
2、添加表单提交的action
<form action="${pageContext.request.contextPath}/addUserServlet" method="post">
3、创建AddUserServlet
doPost中:
//1、设置编码
    request.setCharacterEncoding("utf-8");
     //2、获取参数
     Map<String, String[]> map = request.getParameterMap();
    //3、封装对象
    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、跳转到userListServlet
   response.sendRedirect(request.getContextPath()+"/userListServlet");
4、在service下的UserService中创建接口
public interface UserService {
    /**
     *保存User方法
     */
    void addUser(User user);
}
5、在service下impl包的UserServiceImpl中实现类
public class UserServiceImpl implements UserService {
    private UserDao dao=new UserDaoImpl();
    @Override
    public void addUser(User user) {
        dao.add(user);
    }
}
6、dao下的UserDao中创建接口
public interface UserDao {
    void add(User user);
}
7、dao下impl包的UserDaoImpl实现类
public class UserDaoImpl implements UserDao {
    private JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDataSource());
    
    @Override
    public void add(User user) {
        //1、定义sql
        String sql="insert into user values(null,?,?,?,?,?,?,null,null)";
        //2、执行sql
  template.update(sql,user.getName(),user.getGender(),user.getAge(),user.getAddress(),user.getQq(),user.getEmail());

    }
}

3、删除功能

1、修改访问路径(根据id删除数据)
<a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/delUserServlet?id=${user.id}">删除</a>
2、创建DelUserServlet
doPost:
//1、获取id
        String id=request.getParameter("id");
        //2、调用service删除
        UserService service=new UserServiceImpl();
        service.deleteUser(id);
        //跳转到查询所有的UserListServlet
        response.sendRedirect(request.getContextPath()+"/userListServlet");
3、在service下的UserService中创建接口
public interface UserService {
    /**
     * 根据id删除
     */
    void deleteUser(String id);
}
4、在service下impl包的UserServiceImpl中实现类
public class UserServiceImpl implements UserService {
    private UserDao dao=new UserDaoImpl();
    @Override
    public void deleteUser(String id) {
        dao.delete(Integer.parseInt(id));//转为数字类型
    }
}
5、dao下的UserDao中创建接口
public interface UserDao {
    void delete(int i);
}
6、dao下impl包的UserDaoImpl实现类
public class UserDaoImpl implements UserDao {
    private JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDataSource());
    
    @Override
    public void delete(int id) {
        //1、定义sql
        String sql="delete from user where id=?";
        template.update(sql,id);
    }
}
7、增强用户体验感(删除是给出提示框)
<script>
        function deleteUser(id) {
            //用户安全提示
            if (confirm("您确定删除吗?")){
                location.href="${pageContext.request.contextPath}/delUserServlet?id="+id;
            }
        }
    </script>

以上是关于全网最详细的JavaWeb用户管理系统(详细源码讲解)(小白也行)的主要内容,如果未能解决你的问题,请参考以下文章

全网最详细的AbstractQueuedSynchronizer(AQS)源码剖析资源的获取和释放

Mybaits 源码解析 ----- 全网最详细,没有之一:一级缓存和二级缓存源码分析

可能是全网最详细的 Spark Sql Aggregate 源码剖析

Windows如何配置和迁移深度学习环境,以及使用Pycharm调试源码?(全网最详细)

Spring Boot 2从入门到入坟 | 请求参数处理篇:全网最硬核的请求映射原理的源码分析

简单Java类 全网最详细讲解 !!!