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

news2025/1/10 22:50:50

黑马JavaWeb案例整理记录

文章目录

  • 案例源码:
  • 一、需求
  • 二、设计
    • 1、技术选型
    • 2、数据库设计
  • 三、开发步骤
  • 四、详细过程
    • 1、创建web项目,部署tomcat,导入jar包
    • 2、编写首页index.jsp
    • 3、编写servlet、servie、daomain、dao
  • 五、案例升级实现
    • 1、实现内容
    • 2、list.jsp新增设计
    • 3、实现登录功能
      • login.jsp设计
      • LoginServlet编写
      • UserDaoImpl语句
    • 4、实现添加功能
      • add.jsp编写
      • AddUserServlet编写
      • userDaoImpl语句
    • 5、实现删除功能
      • list.jsp修改
      • DelUserServlet
      • userDaoImpl增加语句
    • 6、修改功能实现
      • list.jsp增加修改发送路径
      • FindUserServlet编写
      • update.jsp编写
      • UpdateUserServlet编写
      • UserServiceImpl实现方法
      • UserDaoImpl实现方法
    • 7、删除选中功能
      • list.jsp编写
      • DelSelectServlet编写
      • UserServiceImpl编写
      • UserDaoImpl编写
    • 8、实现全选,全不选和提示是否删除框
      • list.jsp编写实现
    • 9、分页查询功能(分页展示数据)
      • 改index.jsp路径
    • 10、多条件组合查询
  • 未完待续........

案例源码:

一、需求

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

二、设计

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、多条件组合查询

在这里插入图片描述

未完待续…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

成长任务|花式show爱心代码

❤️立即投稿❤️ &#x1f4cc;活动规则 最近#李峋同款爱心代码#词条上了热搜&#xff0c;作为程序员的你&#xff0c;可不能错过这个给意中人大展身手的时机 ❤️ 使用代码画一颗#爱心#&#xff0c;将你的代码文件通过本页面投稿&#xff0c;审核通过即可参与活动 ❤️ 可使…

速锐得猎奇与猜想:数字化工业互联网能否真的走进未来

前年的8月份&#xff0c;我们独立设计一款燃气报警器&#xff0c;包括设计产品图纸&#xff0c;嵌入式软件、LED显示、核心代码、CAN网络及485架构、云端SAAS框图&#xff0c;应用场景等&#xff0c;在去年的5月份直接进入到了量产&#xff0c;第一批数量是2000套&#xff0c;升…

详细介绍NLP文本摘要

文章目录文本生成文本摘要抽取式文本摘要抽取式文本摘要方法案例分析优点缺点生成式文本摘要指针生成网络文本摘要预训练模型与生成式摘要优点缺点TextRank文本摘要BertSum模型文本摘要文本生成 文本生成&#xff08;Text Generation&#xff09;&#xff1a;接收各种形式的文…

IT行业几大方向(外行人之误解)

有很多同学一说自己是搞计算机的&#xff0c;搞软件的&#xff0c;做IT的&#xff0c;是个程序员。外行人&#xff0c;就往往很惊奇&#xff0c;说我电脑卡怎么处理&#xff0c;怎么盗别人QQ密码&#xff0c;把谁谁网站黑了&#xff0c;甚至我的网络很慢可以帮我提速一下吗等等…

如何设计es的索引库结构

1、确定索引库的名称 建议和使用的数据库的表名相对应 比如&#xff1a;数据库的表名为 那么索引库的名称可以为&#xff1a;item 2、确定索引库需要的字段 1.根据前端界面来判断需要什么字段 例如&#xff1a; 上边这个界面需要的就是&#xff1a; 分类&#xff0c;品牌&…

使用ZPL控制Zebra打印机

ZPL简介: Zebra编程语言 (ZPL)是所有 ZPL 兼容打印机使用的命令语言。可用于绘制文本、形状、条形码和图像等元素&#xff0c;组合这些元素。打印机使用它作为指令来创建打印在标签上的图像。 想要打印一个标签&#xff0c;您可能需要告诉打印机&#xff1a; 产品名称是什么…

Python学习基础笔记三十四——爬虫小例子

一个爬虫小例子&#xff1a; import requestsimport re import jsondef getPage(url):responserequests.get(url)return response.textdef parsePage(s):comre.compile(<div class"item">.*?<div class"pic">.*?<em .*?>(?P<id&…

Nginx的access.log日志分析工具-goaccess

一、安装goaccess wget http://tar.goaccess.io/goaccess-1.3.tar.gz --no-check-certificate #下载tar包 tar -xzvf goaccess-1.3.tar.gz #解压tar包 cd goaccess-1.3/ #进入目录 ./configure --enable-utf8 --enable-geoiplegacy --prefix/opt/goaccess #检测环境&…

宝塔严重未知安全性漏洞(宝塔面板或Nginx异常)

问题简述 论坛上的帖子 https://www.bt.cn/bbs/thread-105054-1-1.html https://www.bt.cn/bbs/thread-105085-1-1.html https://hostloc.com/thread-1111691-1-1.html 数据库莫名被删 https://www.bt.cn/bbs/thread-105067-1-1.html 以下内容来自群友消息&#xff1a; 速报:宝…

大学生餐饮主题网页制作 美食网页设计模板 学生静态网页作业成品 dreamweaver美食甜品蛋糕HTML网站制作

&#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计&#x1f469;‍&#x1f393;,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等&#xff0c;用的最多的还是DW&#xff0c;当然不同软件写出的…

以太网 网线分类

1. 双绞线分类 一类线&#xff1a;主要用于传输语音&#xff08;一类标准主要用于八十年代初之前的电话线缆&#xff09;&#xff0c;不同于数据传输。 二类线&#xff1a;传输频率为1MHZ&#xff0c;用于语音传输和最高传输速率4Mbps的数据传输&#xff0c;常见于使用4MBPS规范…

【Android gradle】自定义一个android gradle插件,并发布到私有Artifactory仓库

1. 前言 最近工作部分内容涉及到gradle 插件的编写&#xff0c;在粗浅了解和编码之余来简单梳理下编写一个gradle 插件的相关用法。这里编写的插件还是发布到在前面两篇博客中的Artifactory仓库中。一共分为如下几步&#xff1a; 配置定义gradle插件、上传到 Artifactory仓库…

基于单片机的加热炉炉温控制系统设计

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1课题背景及意义 1 1.2发展现状 2 1.3研究主要内容 3 第2章 加热炉炉温控制系统总体方案设计 4 2.1总体方案的确定 4 2.2加热炉炉温控制系统组成 5 第3章 加热炉炉温控制系统技术和算法介绍 6 3.1 AT89C51简介 6 3.1.1单片机的引脚介…

Crossover2023mac苹果电脑系统上运行Windows程序虚拟机工具模拟器

CrossOver是一款可以让Mac和Linux系统中正常运行Windows软件的应用程序。它不像虚拟机一样需要安装Windows系统之后才可以安装Windows的应用程序&#xff0c;这一方式给大多数用户带来了方便。通过CrossOver实现跨平台的文件复制粘贴&#xff0c;使Mac/Linux系统与Windows应用良…

海康视频回放,rtsp视频接口转换成.m3u8格式文件

通过海康接口返回的rtsp视频接口&#xff0c;转换成.m3u8格式文件&#xff0c;逻辑如下 1、采用ffmpeg实时转化rtsp链接视频&#xff0c;转化为m3u8&#xff0c;存放服务器固定地址 2、采用nginx代理视频成.m3u8视频 3、采用tokenredis方式处理视频播放和删除过程&#xff0…

太好玩了,我用 Python 做了一个 ChatGPT 机器人

大家好&#xff0c;我是早起。 毫无疑问&#xff0c;ChatGPT 已经是当下编程圈最火的话题之一&#xff0c;它不仅能够回答各类问题&#xff0c;甚至还能执行代码&#xff01; 或者是变成一只猫 因为它实在是太好玩&#xff0c;我使用Python将ChatGPT改造&#xff0c;可以实现在…

亚马逊黑五哑火,中国跨境电商高歌猛进!

黑五作为一个类似于中国双11的全球性购物狂欢节&#xff0c;在11月的最后一周拉开帷幕&#xff0c;据有关业内人士称&#xff0c;作为拥有众多全球站的亚马逊电子商务平台在此次黑色星期五的促销狂欢节中表现似乎稍显停滞&#xff0c;其作为电商领域的龙头企业&#xff0c;没能…

数据结构基础--图

一、图的基本概念 1.图的定义 图是由顶点集合V和边集合E组成的&#xff0c;记为G(G,V)。图可以只有点没有边&#xff0c;但不能只有边没有点。边&#xff1a;用&#xff08;x&#xff0c;y&#xff09;表示为xy之间的一条无向边&#xff1b;用<x,y>表示xy之间的一条有向…

大数据开发适合哪类人群?

有不少应届大学毕业生和0基础人群选择学大数据&#xff0c;但是要选择零基础的大数据培训班&#xff0c;从Java基础开始学习&#xff0c;由浅入深掌握离线数据分析、实时数据分析和内存数据计算等重要内容。 应届大学生缺乏工作经验和技能&#xff0c;对未来没有明确的规划&am…

VTK- PointLocator

欢迎大家加入VTK社区雪易VTK社区-CSDN社区云 小结&#xff1a;本博文主要针对VTK中的PointLocator的分类及各接口的用途进行讲解&#xff0c;PointLocator主要用途为点的位置计算&#xff0c;希望能为各位小伙伴有所帮助。 vtk中关于Locator的关系图 目录 vtkLocator vtkAbs…