第一天总结之后端登录功能的实现

news2025/1/15 21:06:00

第一天总结之后端登录功能的实现

一、 前端页面

在这里插入图片描述
从图片 很明显知道 两个intput输入框 一个输入username 一个输入password
在这里插入图片描述

   从前端的页面代码 可以找到form表单
根据form表单的action属性了解到 点击登录跳转到 controller 层的 LoginServlet 

二、controller 层

创建一个 LoginServlet 用于接收页面的请求

    获取前端页面  input输入框的 username   和 password   通过request.getParameter()方法获取
    然后 将获取的  username和password  传到 service  层  用来进行业务判段
    new 对象  调方法 获取返回值 true或false 
    判断 
         如果账号密码正确:
               获取session 对象:   通过request.getSession() 获取session对象
               然后将username 存放到 session域中  目的是为了 在主页面的 右上角显示  用户名
               重定向到主页面的 servlet       UserFuzzyServlet 
        如果账号密码错误:
              重定向到登录页面 重新登录

LoginServlet 代码如下:

package com.qfedu.controller;

import com.qfedu.service.AdminService;
import com.qfedu.service.impl.AdminServiceImpl;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

@WebServlet(name = "LoginServlet", value = "/LoginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置请求字符集  防止post请求 中文乱码
        request.setCharacterEncoding("utf-8");
        //获取前端input输入框的username和password
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        //获取service 对象  调用service方法
        AdminService adminService =new AdminServiceImpl();
        boolean login = adminService.login(username, password);
        if(login){
            //登录成功
            //设置session
            HttpSession session = request.getSession();
            //设置session的时间
            session.setMaxInactiveInterval(60*60);
            session.setAttribute("username",username);
            //设置默认属性
            session.setAttribute("userDelete",true);
            session.setAttribute("userResetPassword",true);
            session.setAttribute("userUpdate",true);
            //跳转到主页面
            //注意!!  如果直接重定向到页面   会将页面原本的数据覆盖  所以只能通过  重定向到指定servlet 然后由该servlet获取数据  带着指定数据 转发到页面
            response.sendRedirect("UserFuzzyServlet");
        }else{
            //登录失败  回到登录界面
           // request.getRequestDispatcher("/after/login.jsp").forward(request,response);
            response.sendRedirect(request.getContextPath()+"/after/login.jsp");
        }
    }

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

三、service层

在service文件夹下创建一个 接口类 AdminService

  对应登录的  业务逻辑       判断账号密码是否正确
  书写抽象方法      boolean login(String username,String password);
  参数为controller 层 的 servlet传过来的 username和password  
  返回值为boolean类型

AdminService代码如下:

package com.qfedu.dao;

import com.qfedu.entity.Admin;

import java.util.List;

public interface AdminDao {
    List<Admin> loginDao(String username);
}

在service文件夹下的impl文件夹下创建 AdminServiceImpl 类 作为接口类的实现类

  在其中实现 接口的方法    
       因为管理员只有一条数据 所以只需要通过 username 查询     
           将username 传递到dao层  进行数据库的操作
           因为目的是 通过username查询数据   所以数据库的返回值为  存放对象的List集合 
           获取dao层数据库的操作返回的 存放对象的List集合 
           判断集合是否为空  如果不为空 然后集合中对象的password是否等于传入的password    正确返回true  否则返回false

AdminServiceImpl代码如下:

package com.qfedu.dao.impl;

import com.qfedu.dao.AdminDao;
import com.qfedu.entity.Admin;
import com.qfedu.utils.BaseDaoUtil;

import java.util.List;

public class AdminDaoImpl extends BaseDaoUtil implements AdminDao {

    @Override
    public List<Admin> loginDao(String username) {
        String sql="select * from admin where username=? ";
        Object[] objs={username};
        return super.query(sql,objs,Admin.class);
    }
}

四、dao层

在dao文件夹下创建一个 接口类 AdminDao

  对应登录的  数据库操作       通过封装的 sql语句和 username 查询数据
  
  书写抽象方法     List<Admin> loginDao(String username);
  参数为dao 层 的 service传过来的   
  返回值为boolean类型

AdminService代码如下:

package com.qfedu.dao;

import com.qfedu.entity.Admin;

import java.util.List;

public interface AdminDao {
    List<Admin> loginDao(String username);
}

在dao文件夹下的impl文件夹下创建 AdminDaoImpl 类 作为接口类的实现类 并继承BaseDao类 从而直接使用其方法

  在其中实现 接口的方法       
           因为utils工具包中  的 工具类  BaseDaoUtil 中 查询数据的方法的参数为 sql语句
  Object[]  数组  和 实体类的class文件
  所以需要将username 存放到 Object【】  数组中
  书写sql语句 select * from admin where username=?    通过username查询出对应的数据
  然后调用封装好的BaseDaoUtil进行查询操作

AdminDaoImpl代码如下:

package com.qfedu.dao.impl;

import com.qfedu.dao.AdminDao;
import com.qfedu.entity.Admin;
import com.qfedu.utils.BaseDaoUtil;

import java.util.List;

public class AdminDaoImpl extends BaseDaoUtil implements AdminDao {

    @Override
    public List<Admin> loginDao(String username) {
        String sql="select * from admin where username=? ";
        Object[] objs={username};
        return super.query(sql,objs,Admin.class);
    }
}

五、entity 实体类

在entity下创建Admin 实体类

 属性要与表的数据字段一一对应 
 私有化属性 并添加get  set方法 
package com.qfedu.entity;

public class Admin {
    private Integer id;
    private String username;
    private String password;

    public Admin() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "Admin{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

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

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

相关文章

2023年跨境电商新趋势,新手小白还有出路吗?

跨境电商一直位于我国对外开放的最前沿&#xff0c;当下已经成为我国进出口贸易的关键组成部分之一&#xff0c;是外贸企业顺利开展进出口业务的重要保障&#xff0c;更是拥有庞大发展潜力以及活力的贸易新业态。在经济全球化趋势下&#xff0c;充分发挥出跨境电商的战略新通道…

Java 包的使用详解

文章目录1. 概念2. 导入包中的类2.1 使用类的全路径2.2 导入包2.3 静态导入包3. 自定义包4. 包的访问权限控制5. 常用的包Java编程基础教程系列1. 概念 在开发过程中&#xff0c;会定义很多的类&#xff0c;随着类的定义越来越多&#xff0c;难免会出现类名重复的情况&#xf…

mac 安装redis

文章目录mac 安装redis使用Homebrew安装Redis1.搜索redis版本2.使用Homebrew安装命令3.查看是否安装完成4.启动redis服务5.查看redis服务进程6.redis-cli连接redis服务7.检测 redis 服务是否启动8.修改密码mac 安装redis 使用Homebrew安装Redis 首先这里需要安装homebrew 1.搜…

【Kubernetes 企业项目实战】03、基于 Alertmanager 发送报警到多个接收方(上)

目录 一、配置 Alertmanager 发送报警到 qq 邮箱 1.1 设置 163 邮箱 1.2 创建 alertmanager 配置文件 1.3 创建 prometheus 告警规则配置文件 1.4 安装 prometheus 和 alertmanager 1.5 部署 alertmanager 的 service 1.6 浏览器访问 Prometheus 和 alertmanager 二、配…

ELK日志(2)

elasticsearch群集状态颜色&#xff1a;灰色&#xff1a;未连接绿色&#xff1a;数据完整态黄色&#xff1a;副本不完整红色&#xff1a;数据分片不完整紫色&#xff1a;数据分片复制过程群集主机角色&#xff1a;主节点master&#xff1a;负责管理调度工作节点&#xff1a; 负…

从IPv6的普及看中国未来网络的发展

最近看了一篇《邬贺铨&#xff1a;IPv6或是未来主流网络》的文章,谈到了未来网络的发展问题。IPv6也许是未来主流网络的发展方向。那么什么是IPv6呢,不妨来看下关于他的另一篇文章《邬贺铨&#xff1a;IPv6是IPv6规模部署第三阶段重要抓手》。 他谈到&#xff0c;IPv6是下一代互…

单绞机张力开环控制(绞臂行星差速机构算法)

PLC的开环和闭环张力控制算法,可以参看下面的文章链接: PLC张力控制(开环闭环算法分析)_plc张力控制程序_RXXW_Dor的博客-CSDN博客里工业控制张力控制无处不在,也衍生出很多张力控制专用控制器,磁粉制动器等,本篇博客主要讨论PLC的张力控制相关应用和算法,关于绕线机的…

动态内存管理(1)

TIPS 1. 2. malloc, free, calloc, realloc 这些的基本前提都是在内存堆区 内存堆区不能与内存栈区两者混淆乱套 动态内存管理存在的原因 1. 为什么要有动态内存管理&#xff1f;其实我们之前学过比如说对内存的管理&#xff0c;比方说我申请一块内存空间&#xff1a; 1.…

任意方向边界框——day64 读论文:基于自适应目标定位特征卷积神经网络的高分辨率遥感影像多面向目标检测

Multi-Oriented Object Detection in High-Resolution Remote Sensing Imagery Based on Convolutional Neural Networks with Adaptive Object Orientation Features 基于自适应目标定位特征卷积神经网络的高分辨率遥感影像多面向目标检测1. Introduction2. Materials and Met…

jQuery ajax中dataFilter的用法

参考资料 jquery的ajax的dataFilter参数的使用 ⏹用于处理 XMLHttpRequest 原始响应数据的函数 运行在success函数之前, 对Ajax请求返回的原始数据进行预处理 可以对返回的json数据中的null属性进行过滤可以对返回的json数据添加一些自定义的属性 如果不返回原始数据,返回其他…

零代码连接邮箱腾讯云企业网盘,附件管理超轻松

在日常工作中&#xff0c;想必大家每天都会收到各种各样的工作邮件&#xff0c;并且很多重要的文件材料也是通过邮件附件的形式来传输的&#xff0c;那么如何一站式管理这些文件&#xff0c;对于提高办公效率就至关重要了。关于邮件附件管理&#xff0c;相信大家也都碰到过这样…

全面了解文件上传漏洞, 通关upload-labs靶场

靶场简介 upload-labs是一个专门用于学习文件上传漏洞攻击和防御的靶场。它提供了一系列模拟文件上传漏洞的实验环境&#xff0c;用于帮助用户了解文件上传漏洞的原理和防御技术。 这个靶场包括了常见的文件上传漏洞类型&#xff0c;如文件名欺骗、文件类型欺骗、文件上传功能…

1582_C代码实现的快速、可移植MD5信息摘要算法

全部学习汇总&#xff1a; GreyZhang/c_units: A small piece of code which can be reuse anywhere, I call it a unit. This is a collection of unit in C language! Ok, yes, it would be my toolbox. (github.com) 工作之中&#xff0c;同事用到了MD5信息摘要算法&#x…

面试加分题--socket是否是并发安全的?

今天和大家聊一个有点儿东西的面试题&#xff1a;socket是否是并发安全的&#xff1f; 为了帮助大家理解&#xff0c;我们先假设一个场景。 就拿游戏架构来说&#xff0c;我们想象中的游戏架构是下面这样的。 想象中的游戏架构 也就是用户客户端直接连接游戏核心逻辑服务器&…

解决⾃动驾驶中计算机视觉的⽬标检测问题

来源&#xff1a;投稿 作者&#xff1a;cairuyi01 编辑&#xff1a;学姐 最近读了《Object detection with location-aware deformable convolution and backward attention filtering》&#xff0c;这是⼀篇2019年刊登在CVPR上的CV论⽂。与解决普适性的CV任务不同&#xff0c…

SpringMVC如何优化Ajax技术

SpringMVC如何优化Ajax技术&#xff1f; AJAX Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 AJAX 是一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。 Ajax 不是一种新的编程语言&#xff0c;而是一种用于创…

EIoU和Focal-EIoU Loss

1、论文 论文题目&#xff1a;《Focal and Efficient IOU Loss for Accurate Bounding Box Regression》 2、引言 CIoU Loss虽然考虑了边界框回归的重叠面积、中心点距离、高宽比。但是其公式中的v反映的是高宽的差异&#xff0c;而不是高宽分别与其置信度的真实差异。因此&…

蚂蚁智能内容合规审核产品探秘

随着互联网服务的不断深化&#xff0c;产品营销的形式从传统文本、长图文&#xff0c;增加到短视频、直播等新媒介形态&#xff0c;展现形式愈加丰富的同时&#xff0c;也为营销宣传内容合规审核带来了诸多难题。如何解决与日俱增的审核量与合规审核人员有限之间的矛盾&#xf…

【阶段三】Python机器学习31篇:机器学习项目实战:基于皮尔逊相关系数搭建电影智能推荐系统

本篇的思维导图: 项目背景 在当今这个大数据时代,智能推荐系统的应用越来越广泛,网上购物、在线观影、新闻推送的背后都有智能推荐系统算法的支持。人们经常会在视频平台上观看电影,有时明确想要观看某部电影,有时则仅仅是随机搜寻。如果视频平台能利用基于物品的…

DDOS攻击

把我掘金的文章同步一份过来 最近网上爆火的一款游戏 Goose Goose Duck (鹅鸭杀) 游戏官方在近日发布了一则公告&#xff0c;宣布由于服务器屡次遭受黑客攻击&#xff0c;该游戏服务器将暂时关服三天进行维护 遭到了DDOS攻击&#xff0c;背后原因&#xff0c;我们不做讨论&…