JavaWeb用户信息查看的登录、增删改查案例

黑马JavaWeb案例整理记录

案例源码:

一、需求

实现页面跳转和用户信息的增删改查操作

二、设计

1、技术选型

Servlet+JSP+MySQL+JDBCTempleat+Duird+BeanUtilS+tomcat+BootStrap

2、数据库设计

SQL语句

create database heima; -- 创建数据库
			use heima; 			   -- 使用数据库
			create table day17_user(   -- 创建表
				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. 环境搭建
		1. 创建数据库环境
		2. 创建项目,导入需要的jar包

2. 编码


3. 测试
4. 部署运维

本笔记(不包含测试和运维)

四、详细过程

在这里插入图片描述

1、创建web项目,部署tomcat,导入jar包

jar包下载地址(里边有很多调出合适的)
链接:https://pan.baidu.com/s/1V0X99u6U1zoDyFy2xm9Cyg
提取码:h8sz
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、编写首页index.jsp

3、编写servlet、servie、daomain、dao

导入druid.properties,导入JDBCUtils类。源码都在源码链接中

五、案例升级实现

1、实现内容

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

2、list.jsp新增设计

按钮位置
输入框
分页条
复选框

3、实现登录功能

login.jsp设计

用到了checkCodeServlet,在我的其他博客写了,链接??
login.jsp点击切换验证码实现,如下图
在这里插入图片描述

LoginServlet编写

@WebServlet(value = "/loginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置编码
        request.setCharacterEncoding("utf-8");
        //2.获取数据
        //2.1获取用户填写验证码
        String verifycode = request.getParameter("verifycode");
        //3.验证码校验
        HttpSession session = request.getSession();
        String checkcode_server = (String) session.getAttribute("CHECKCODE_SERVER");
        session.removeAttribute("CHECKCODE_SERVER");

        //忽略大小写判断相等
        if (!checkcode_server.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);
        }catch (IllegalAccessException e){
            e.printStackTrace();
        }catch (InvocationTargetException e){
            e.printStackTrace();
        }

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

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

        }
    }
}

UserDaoImpl语句

/**
     * 登录账号
     * @param username
     * @param password
     * @return
     */
    @Override
    public User findUserByUsernameAndPassword(String username, String password) {

        try {
            String sql = "select * from day17_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;
        }
    }

4、实现添加功能

在这里插入图片描述

add.jsp编写

源码在顶部链接
注意事项:提交路径
在这里插入图片描述

AddUserServlet编写

@WebServlet(value = "/addUserServlet")
public class AddUserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //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");
    }
}

userDaoImpl语句

/**
     * 添加user
     * @param user
     */
    @Override
    public void add(User user) {
        String sql = "insert into day17_user values(null,?,?,?,?,?,?,null,null)";
//        template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail());
        template.update(sql, user.getName(), user.getGender(), user.getAge(), user.getAddress(), user.getQq(), user.getEmail());
    }

5、实现删除功能

在这里插入图片描述

list.jsp修改

在这里插入图片描述

DelUserServlet

@WebServlet("/delUserServlet")
public class DelUserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取id
        String id =request.getParameter("id");
        //2.调用service删除
        UserService service = new UserServiceImpl();
        service.deleteUser(id);
        //3.跳转到查询所有Servlet
        response.sendRedirect(request.getContextPath()+"/userListServlet");

    }
}

userDaoImpl增加语句

/**
     * 根据id删除
     * @param id
     */
    @Override
    public void delete(int id) {
        String sql = "delete from day17_user where id = ?";
        template.update(sql,id);
    }

6、修改功能实现

在这里插入图片描述
注意:隐藏域提交id。下面内容会提到

list.jsp增加修改发送路径

在这里插入图片描述

<a class="btn btn-default btn-sm" href="${pageContext.request.contextPath}/findUserServlet?id=${user.id}">修改</a>

FindUserServlet编写

@WebServlet(value = "/findUserServlet")
public class FindUserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取id
        String id = request.getParameter("id");
        //2.调用Service查询
        UserService service = new UserServiceImpl();
        User user = service.findUserBuId(id);
        //3.将user存入request
        request.setAttribute("user",user);
        //4.转发到update.jsp
        request.getRequestDispatcher("/update.jsp").forward(request,response);
    }
}

在这里插入图片描述

update.jsp编写

id提交隐藏域如下
在这里插入图片描述
以下注意地点举例,具体请查看开篇源码链接。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

UpdateUserServlet编写

@WebServlet(value = "/updateUserServlet")
public class UpdateUserServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.设置编码
        request.setCharacterEncoding("utf-8");
        //2.获取map
        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.updateUser(user);
        //5.跳转到查询所有Servlet
        response.sendRedirect(request.getContextPath()+"/userListServlet");
    }
}

UserServiceImpl实现方法

在这里插入图片描述

UserDaoImpl实现方法

在这里插入图片描述

7、删除选中功能

在这里插入图片描述

list.jsp编写

在这里插入图片描述
在这里插入图片描述

DelSelectServlet编写

@WebServlet(value = "/delSelectServlet")
public class DelSelectServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取所有id
        String[] ids = request.getParameterValues("uid");
        //
        UserService service = new UserServiceImpl();
        service.delSelectUser(ids);
        //
        response.sendRedirect(request.getContextPath()+"/userListServlet");
    }
}

UserServiceImpl编写

 @Override
    public void delSelectUser(String[] ids) {
        //判断有东西才删除,否则会空指针异常
        if (ids != null && ids.length>0){
            //1.遍历数组
            for (String id : ids){
                //2.2.调用dao删除
                dao.delete(Integer.parseInt(id));
            }
        }

    }

UserDaoImpl编写

还是用之前写的,不过就是上一步的service将选中的id列表挨个遍历传进来,挨个删除,还是用以前的方法

/**
     * 根据id删除
     * @param id
     */
    @Override
    public void delete(int id) {
        String sql = "delete from day17_user where id = ?";
        template.update(sql,id);
    }

8、实现全选,全不选和提示是否删除框

list.jsp编写实现

在这里插入图片描述
有选中条目才提交删除
在这里插入图片描述
同样Service中也要判断一下提交的里边有无内容,不判断的话有时候会空指针异常
在这里插入图片描述

9、分页查询功能(分页展示数据)

在这里插入图片描述
在这里插入图片描述

改index.jsp路径

在这里插入图片描述

10、多条件组合查询

在这里插入图片描述

未完待续…

进行深入分析,从而揭示该时期的建筑文化和社会背景。 三、建筑史的社会学研究的案例分析 建筑史的社会学研究可以应用于不同的建好的,针对你的问题,我可以给你一些参考的代码和数据库设计。 首先,我们需要建筑类型和历史时期。下面以中国传统建筑和现代城市建筑为例,进行案例立以下表格: 1.用户表格(user): - id:主键,自增长 - username:用户名 -分析。 1. 中国传统建筑 中国传统建筑是中华文化的重要组成部分 password:密码 - type:用户类型,0为学生,1为辅导员 2.班级表格(class),它反映了中国古代社会、文化和历史的发展和演变。在建筑史的社: - id:主键,自增长 - name:班级名称 3.学生表格(student): - id会学研究中,可以通过对中国传统建筑的研究,揭示中国古代社会、文化和:主键,自增长 - name:姓名 - class_id:班级id,外键关联班级表格历史的发展和演变规律。比如,在研究明清时期的宫殿建筑时,可以通过的id 4.班级学生表格(class_student): - id:主键,自增长 - class_id:对宫殿建筑的结构、布局和装饰的分析,来了解明清时期宫廷文化班级id, 外键关联班级表格的id - student_id:学生id, 外键关联学生和宗教信仰对于建筑的影响,从而揭示宫殿建筑与社会之间的相互表格的id 5.班务表格(duty): - id:主键,自增长 - title:标题关系。 2. 现代城市建筑 现代城市建筑是现代社会的重要组成部 - content:内容 - create_time:创建时间 - create_user_id:创建人id,外键关联用户表格分,它反映了现代社会、文化和经济的发展和演变。在建筑史的社的id 6.班务学生表格(duty_student): - id:主键,自增长 - duty_id会学研究中,可以通过对现代城市建筑的研究,揭示现代社会、文化和:班务id,外键关联班务表格的id - student_id:学生id,外键关联学经济的发展和演变规律。比如,在研究现代城市建筑时,可以通过对不同生表格的id - status:状态,0为未完成,1为已完成 接下来,我们可以实现城市的建筑风格和技术的比较,来了解不同城市的文化和经济特点一些增删改查的功能。 1.辅导员功能:班务的增删改查 a.新增班务,从而揭示现代城市建筑与社会之间的相互关系。 四、建筑史的社 ```java public boolean addDuty(Duty duty) { String sql = "insert into duty(title, content, create_time,会学研究的未来展望 建筑史的社会学研究是一门新兴的学科,它 create_user_id) values(?,?,?,?)"; Object[] params = {duty.getTitle(), duty.getContent(), duty.getCreateTime(), duty.get不仅具有重要的理论和学术意义,更具有重要的现实意义。未来,CreateUserId()}; return DBUtil.executeUpdate(sql, params); } ``` b.删除班务 ```java public boolean deleteDuty建筑史的社会学研究应该在以下几个方面深入探究: 1. 建筑与社会(int id) { String sql = "delete from duty where id=?"; Object[] params = {id}; return DBUtil.executeUpdate(sql的关系 建筑与社会之间的相互关系是建筑史的社会学研究的核心, params); } ``` c.修改班务 ```java public boolean updateDuty(Duty duty) { String sql =问题。未来,建筑史的社会学研究应该更加深入地探究建筑与社会之 "update duty set title=?, content=? where id=?"; Object[] params = {duty.getTitle(), duty.getContent(), duty.getId()}; return DBUtil.executeUpdate(sql, params); } ``` d.查询班务列表 ```java public List<Duty> queryDutyList间的相互关系,从而揭示建筑的发展和演变规律。 2. 建筑与文化() { String sql = "select * from duty"; return DBUtil.executeQuery(Duty.class, sql, null); } ``` 2的关系 建筑是文化的重要组成部分,它反映了人类文化的多样性和变化。未来,建筑史的社会学研究应该更加深入地探究建筑与文.学生功能:班务的查看和完成状态修改 a.查看班务列表 ```java public List<D化之间的关系,从而加强文化交流和多元融合。 3. 建筑与环境的uty> queryDutyListByStudentId(int studentId) { String sql = "select d.* from duty d join duty_student ds关系 建筑与环境之间的关系是建筑史的社会学研究的一个重要方面 on d.id=ds.duty_id where ds.student_id=?"; Object[] params = {studentId}; return DBUtil.executeQuery(Duty.class, sql, params); } ``` b.修改班务完成状态 ```java public boolean updateDutyStatus(int dutyId。未来,建筑史的社会学研究应该更加深入地探究建筑与环境之间的关系,从而推动建筑可持续发展和生态文明建设。 综上所述,建, int studentId, int status) { String sql = "update duty_student set status=? where duty_id=? and student_id=?"; Object[] params = {status, dutyId, studentId}; return DBUtil.executeUpdate(sql, params); } ``` 以上是一些筑史的社会学研究是多学科交叉的新兴学科,它对于我们深入了解社会、文考代码,还需要根据具体情况进行调整和完善。同时,需要在jsp页面中实现对应的表单和数据展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值