用户信息列表实现增删改查案例的实现【问题及解决过程记录】【综合案例】
创始人
2024-03-16 03:53:28
0

目录

用户信息列表展示案例

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)
);

3. 开发:

        1. 环境搭建

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

 细节:

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

 

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

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

       4、据要写在forEach内

       2. 编码

4. 测试

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

 

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

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

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

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

 成了!

接着添加增删改操作

先在UserService接口添加对应接口

添加数据,报错

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'

 查了半天是拼写错误

一个好消息,一个坏消息

好消息:写进去了

坏消息:但没完全写进去

出现中文乱码且丢失

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

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

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);}
}

 进阶:

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

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

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

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

关于登录界面login.jsp

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

 添加登录所需字段username和password

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

SELECT * FROM user2;

 添加好内容

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

 先进入登录界面login.jsp,登录成功会提示

 

 添加联系人功能

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

 add.jsp也要连接指定servlet

 之前的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方法也优化了
 @Overridepublic 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;}

添加用户成功!

 删除功能

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

 编辑DelUserService

原版本:

//1.设置request编码request.setCharacterEncoding("utf-8");int id = Integer.parseInt(request.getParameter("id"));//2.调用serviceUserService service = new UserServiceImpl();service.deleteUser(id);//3.调转到重新查询的servletresponse.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.跳转查询所有servleresponse.sendRedirect(request.getContextPath()+"/userListServlet");

测试:

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

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

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

 测试一下:

 修改功能

 

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

 测试时出现404错误

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

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

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

加入判断:

 在

代码编写好 测试一下

 报了一个500的错

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

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