用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】

目录

用户信息列表展示案例

1. 需求:

 1. 简单功能

        1. 列表查询        2. 登录        3. 添加        4. 删除        5. 修改

  2. 复杂功能

        1. 删除选中        2. 分页查询            * 好处:                1. 减轻服务器内存的开销                2. 提升用户体验        3. 复杂条件查询

2. 设计:

 1. 技术选型:

3. 开发:

        1. 环境搭建

                 1. 创建数据库环境                 2. 创建项目,导入需要的jar包

 细节:

                1.添加jar包要注意版本是否适配

                 2.配置文件要根据实际情况进行修改​编辑

         3.注意查询语句是否正确

       4、据要写在forEach内​编辑

       2. 编码

4. 测试

 进阶:

关于登录界面login.jsp

 添加联系人功能

 删除功能

 修改功能

复杂功能

删除选中

 分页查询

​编辑

复杂功能

复杂条件查询功能

  动态查询小技巧:


用户信息列表展示案例

1. 需求:

 1. 简单功能

        1. 列表查询
        2. 登录
        3. 添加
        4. 删除
        5. 修改


  2. 复杂功能

        1. 删除选中
        2. 分页查询
            * 好处:
                1. 减轻服务器内存的开销
                2. 提升用户体验
        3. 复杂条件查询


2. 设计:

 1. 技术选型:

Servlet+JSP+MySQL+JDBCTempleat+Duird+BeanUtils+tomcat

控制器 + 页面展示+ 操作数据库+ 自动封装 + 连接池提高连接效率+ 封装数据 + 部署到服务器上

  

    2. 数据库设计:
        create database test01; -- 创建数据库
        use test01;                -- 使用数据库
 CREATE TABLE user2(  -- 创建表
    id int PRIMARY KEY auto_increment,
    name VARCHAR(20) not null,
    gender VARCHAR(5), 
    age INT,
    address VARCHAR(32),
    qq VARCHAR(20),
    email VARCHAR(50)
);

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第1张图片

3. 开发:

        1. 环境搭建

                 1. 创建数据库环境
                 2. 创建项目,导入需要的jar包

 细节:

                1.添加jar包要注意版本是否适配

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第2张图片

 用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第3张图片

                 2.配置文件要根据实际情况进行修改用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第4张图片

         3.注意查询语句是否正确

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第5张图片

       4、据要写在forEach内用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第6张图片

       2. 编码

4. 测试

  在/test02/userListServlet下可以输出,但是list.jsp下没有打印出来

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第7张图片

 用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第8张图片

 试着打印UserListServlet,
response.getWriter();

输出无法识别中文,句首加入

//简单的形式,设置编码,是在获取流之前设置
        response.setContentType("text/html;charset=utf-8");
即可。

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第9张图片

 最后终于得出错误原因,不是代码错误也不是配置错愕,是进入的网址错误,得从index.jsp进入首页

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第10张图片

 成了!用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第11张图片

接着添加增删改操作

先在UserService接口添加对应接口用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第12张图片

添加数据,报错

org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [insert into user2 set name=?,gender=?,age=?,adress=?,qq=?,email=?]; nested exception is java.sql.SQLSyntaxErrorException: Unknown column 'adress' in 'field list'

 查了半天是拼写错误

一个好消息,一个坏消息

好消息:写进去了

坏消息:但没完全写进去

出现中文乱码且丢失

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第13张图片

//设置request编码
request.setCharacterEncoding("utf-8");

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第14张图片

会发现性别和籍贯因为是有默认选择的复选框,不是手动输入的数据,所以未被存储进去,需要在UserAddServlet里添加存储进去,这样选择框里的对象也能获取到

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第15张图片

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第16张图片

UserAddServlet代码:
package cn.web.servlet;

import cn.domain.User;
import cn.service.UserService;
import cn.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author 乱码酱
 * @date :2022-11-29 15:44
 * @program: HTMLStudy
 * @create:
 */
@WebServlet("/userAddServlet")
public class UserAddServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置request编码
        request.setCharacterEncoding("utf-8");

        //调用UserService完成添加
        UserService service = new UserServiceImpl();
        //获取参数
        String name = request.getParameter("name");
        String gender = request.getParameter("gender");
        int age = Integer.parseInt(request.getParameter("age"));
        String adress = request.getParameter("address");
        String qq = request.getParameter("qq");
        String email = request.getParameter("email");

        //添加到User里
        User user = new User();
        user.setName(name);
        user.setGender(gender);
        user.setAge(age);
        user.setAddress(adress);
        user.setQq(qq);
        user.setEmail(email);
//        调用UserService层
        User user1 = service.addUser(user);

        //        将list存入request域
        request.setAttribute("user1",user);


        //转发到
        request.getRequestDispatcher("/index.jsp").forward(request,response);
3.调转到重新查询的servlet
//        response.sendRedirect(request.getContextPath()+"/userListServlet");
  }

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

 进阶:

将已有用户信息列表改进为后面一种格式

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第17张图片

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第18张图片

 使用Bootstrap上的内联表单样式,但是出现了分层

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第19张图片

 解决方法:在div标签的style样式加一个float浮动即可

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第20张图片

 至于分页,在Bootstrap的中文档首页“组件”复制分页即可。

关于登录界面login.jsp

验证码执行一个refreshCode();方法

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第21张图片

 添加登录所需字段username和password

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第22张图片

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第23张图片

 可以在数据库查询是否添加成功

SELECT * FROM user2;

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第24张图片

 添加好内容用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第25张图片

 数据库添加字段,对应实体类User也要跟着修改

 先进入登录界面login.jsp,登录成功会提示用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第26张图片

 用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第27张图片

 添加联系人功能

  在list.jsp中添加联系人按钮路径跳转到add.jsp

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第28张图片

 add.jsp也要连接指定servlet

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第29张图片

 之前的addservlet没用util工具类,需要一个一个添加,

@WebServlet("/addUserServlet")
public class AddUserServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置request编码
        request.setCharacterEncoding("utf-8");

        //调用UserService完成添加
        UserService service = new UserServiceImpl();
        //获取参数
        String name = request.getParameter("name");
        String gender = request.getParameter("gender");
        int age = Integer.parseInt(request.getParameter("age"));
        String adress = request.getParameter("address");
        String qq = request.getParameter("qq");
        String email = request.getParameter("email");

        //添加到User里
        User user = new User();
        user.setName(name);
        user.setGender(gender);
        user.setAge(age);
        user.setAddress(adress);
        user.setQq(qq);
        user.setEmail(email);
//        调用UserService层
        User user1 = service.addUser(user);

        //        将list存入request域
        request.setAttribute("user1",user);
        

        //转发到
        request.getRequestDispatcher("/index.jsp").forward(request,response);
3.调转到重新查询的servlet
//        response.sendRedirect(request.getContextPath()+"/userListServlet");
  }

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

后来加入了工具类,效率提高

 //1.设置编码
        request.setCharacterEncoding("utf-8");
        //2.获取参数
        Map 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
//        没有共享数据使用重定向    加上虚拟路径request.getContextPath()
        response.sendRedirect(request.getContextPath()+"/userListServlet");
UserDaoImpl中的addUser方法也优化了
 @Override
    public User addUser(User user) {
        try {
            //第一版
//String sql = "insert into user2 set name = ?, gender = ?, age = ?, address = ?, qq= ?, email = ?";
              //第二版
            String sql ="insert into user2 values(null, ?, ?, ?, ?, ?, ?,null, null )";
            template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail());
        } catch (DataAccessException e) {
            e.printStackTrace();
        }
        return user;
    }

添加用户成功!用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第30张图片

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第31张图片

 删除功能

 在list.jsp删除按钮添加路径

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第32张图片

 编辑DelUserService

原版本:

//1.设置request编码
        request.setCharacterEncoding("utf-8");
        int id = Integer.parseInt(request.getParameter("id"));
        //2.调用service
        UserService service = new UserServiceImpl();
        service.deleteUser(id);
        //3.调转到重新查询的servlet
        response.sendRedirect(request.getContextPath()+"/userListServlet");
        3.转发到
        //        request.getRequestDispatcher("/index.jsp").forward(request,response);

现版本:

//        因为是根据id删除,不涉及汉字,可以不用设置编码
    // 1.获取id对象
        String id = request.getParameter("id");
// 2.调用service删除
        UserService service = new UserServiceImpl();
        service.deleteUser(id);
//3.跳转查询所有servle
        response.sendRedirect(request.getContextPath()+"/userListServlet");

测试:

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第33张图片

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第34张图片

 轻易就删除了记录,但是不排除误删的可能性,想加入一个确认删除的提示框

在list.jsp删除按钮添加一个方法,点击会有确认框

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第35张图片

放到上面去获取不到id,于是传参

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第36张图片

 测试一下:

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第37张图片

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第38张图片

 修改功能

 

 修改update.jsp指向路径并在标签添加value,编写对应service、dao层接口和实现类方法

 测试时出现404错误

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第39张图片

 原因是重新建了一个findUserServlet,需要重新启动服务器,启动即可成功访问

之前的修改性别和地址不知道默认值,所以要判断选择框里的性别和籍贯,需要在update.jsp开头加上标签引入

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

加入判断:

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第40张图片

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第41张图片

 在

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第45张图片

代码编写好 测试一下

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第46张图片

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第47张图片

 报了一个500的错

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第48张图片

用户信息列表实现增删改查案例的实现【问题及解决过程记录】&【综合案例】_第49张图片

 原来是没重启的锅,重启后恢复正常

但是新的问题出现了,无法修改内容,除去一部分原因是我在数据库写入数据,里面的地址不在