spring框架模拟用户登录练习

spring框架流程

创建maven java项目

先导入spring依赖

<!-- 添加Spring框架的核心依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.4.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
    <dependency>
      <groupId>javax.annotation</groupId>
      <artifactId>javax.annotation-api</artifactId>
      <version>1.3.2</version>
    </dependency>

将jdk版本改成计算机使用版本,通常使用的是11

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
  </properties>

将buil标签中的自带插件删除

<build>
    删除
  </build>

在main目录下新建一个资源resources目录来放置配置文件,然后新建一个spring.xml文件 并开启扫描

<!--开启扫描-->
    <context:component-scan base-package="com.yjxxt"></context:component-scan>

项目的组成

在java文件下按下图新建包,此项目模拟的是用户登录操作

在这里插入图片描述

User是普通的javabean,属性有uname,password等,dao层是查询用户记录,service是业务逻辑处理,controller是控制层,接收请求。

package com.yjxxt.bean;

public class User {
    private String username;
    private String password;

    public User() {
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    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 "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

dao层处理

先处理dao层,因为是通过配置文件扫描所以类开头需要加注解@Repository

package com.yjxxt.dao;

import com.yjxxt.bean.User;
import org.springframework.stereotype.Repository;

@Repository
public class UserDao {
    //设置用户名和密码来模拟数据库信息 因为是固定不变 所以用final修饰为常量
    private final String USERNAME="admin";
    private final String PASSWORD="admin";
    //定义一个查询的方法 返回一个User对象 接收controller传来的用户输入的用户名
    public User selectUserByName(String uname){
        //先创建一个User对象 为null
        User user =null;
        //判断  如果用户名不一样则返回null  未查询到该用户名
        if (!USERNAME.equals(uname)){
            return null;
        }
        //程序到这里说明能查询到用户名 则将user创建并将存储的用户名和密码赋值给该对象,然后返回
        user=new User();
        user.setUsername(USERNAME);
        user.setPassword(PASSWORD);
        return user;
    }

}

service层的处理

先创建一个vo包,然后定义一个MessageModeljavabean来记录逻辑处理后的信息,该JavaBean可以定义2个属性,一个是返回结果状态,一个是返回信息。

package com.yjxxt.vo;

public class MessageModel {
    //返回状态 1 是成功 0是失败  默认状态是1
    private Integer resultCode=1;
    //该属性记录逻辑处理后的信息 默认值是成功
    private String resultMsg="操作成功";

    public MessageModel() {
    }

    public MessageModel(Integer resultCode, String resultMsg) {
        this.resultCode = resultCode;
        this.resultMsg = resultMsg;
    }

    public Integer getResultCode() {
        return resultCode;
    }

    public void setResultCode(Integer resultCode) {
        this.resultCode = resultCode;
    }

    public String getResultMsg() {
        return resultMsg;
    }

    public void setResultMsg(String resultMsg) {
        this.resultMsg = resultMsg;
    }

    @Override
    public String toString() {
        return "MessageModel{" +
                "resultCode=" + resultCode +
                ", resultMsg='" + resultMsg + '\'' +
                '}';
    }
}

service对用户的数据进行逻辑处理

package com.yjxxt.service;

import com.yjxxt.bean.User;
import com.yjxxt.dao.UserDao;
import com.yjxxt.vo.MessageModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    //定义一个UserDao类型的属性 然后通过spring框架的注解Autowired 实现自动装配
    @Autowired
    private UserDao userDao;
    //先创建一个MessageModel来接收逻辑处理后的信息
    //定义一个方法来处理用户名 密码等信息 并将结果存入MessageModel返回
    //需要传入用户输入的2个参数 用户名和密码
    public MessageModel userLoginCheck(String uname,String pwd){
        //先创建对象
        MessageModel mm = new MessageModel();
        //逻辑判断
        //先判断用户名是否为空
        if (uname==null || "".equals(uname)){
            mm.setResultCode(0);
            mm.setResultMsg("用户名不能为空");
            //返回mm
            return mm;
        }
        //再判断密码是否为空
        if (pwd==null || "".equals(pwd)){
            mm.setResultCode(0);
            mm.setResultMsg("密码不能为空");
            return mm;
        }
        //判断用户名是否正确
        //通过dao层来查询该用户信息 存入一个中间变量
        User temp = userDao.selectUserByName(uname);
        //判断temp是否为null 如果是 则说明该用户数据库未存储过
        if (temp==null){
            mm.setResultCode(0);
            mm.setResultMsg("用户不存在");
            return mm;
        }
        //判断密码是否正确
        //通过中间变量temp来获取从数据库中该用户名查询到的密码与本次用户输入的密码对比
        if (!temp.getPassword().equals(pwd)){
            mm.setResultCode(0);
            mm.setResultMsg("密码不正确!");
            return mm;
        }
        //用户名密码都正确,返回结果
        return mm;
    }
}

controller层

该层主要接收用户传入的数据,并传输给service逻辑层,然后等待逻辑层的 结果返回,然后再返回给用户

package com.yjxxt.controller;

import com.yjxxt.service.UserService;
import com.yjxxt.vo.MessageModel;
import org.springframework.stereotype.Controller;

//自动扫描 通过注解  可以定义名称
@Controller("uc")
public class UserController {
    //定义逻辑层对象  并实现自动装配
     @Autowired
    private UserService userService;
    //定义方法获取到逻辑层处理后的数据 将用户传入的用户名和密码作为参数传入
    public MessageModel sayLogin(String uname,String pwd){
        MessageModel messageModel = userService.userLoginCheck(uname, pwd);
        return messageModel;
    }
}

通过jutil进行测试

在这里插入图片描述

定义一个测试类来进行测试

package com.yjxxt.test;

import com.yjxxt.controller.UserController;
import com.yjxxt.vo.MessageModel;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestLogin {
    //定义一个方法来测试  需要加注解@Test
    @Test
    public void test01(){
        //先获取spring容器上下文
        ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml")
        //通过getbean获取控制层的对象,        
        UserController uc = app.getBean("uc", UserController.class);
        //调用控制层中的方法,并将测试的用户名和密码作为实参传入
        MessageModel messageModel = uc.sayLogin("admin", "admin");
        //将结果打印
        System.out.println(messageModel);
    }
}

在这里插入图片描述

 @Test
    public void test02(){
        //先获取spring容器上下文
        ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");
        //通过getbean获取控制层的对象,
        UserController uc = app.getBean("uc", UserController.class);
        //调用控制层中的方法,并将测试的用户名和密码作为实参传入
        MessageModel messageModel = uc.sayLogin("admin", "");
        //将结果打印
        System.out.println(messageModel);
    }

在这里插入图片描述

@Test
    public void test03(){
        //先获取spring容器上下文
        ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");
        //通过getbean获取控制层的对象,
        UserController uc = app.getBean("uc", UserController.class);
        //调用控制层中的方法,并将测试的用户名和密码作为实参传入
        MessageModel messageModel = uc.sayLogin("", "admin");
        //将结果打印
        System.out.println(messageModel);
    }

在这里插入图片描述

@Test
    public void test04(){
        //先获取spring容器上下文
        ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");
        //通过getbean获取控制层的对象,
        UserController uc = app.getBean("uc", UserController.class);
        //调用控制层中的方法,并将测试的用户名和密码作为实参传入
        MessageModel messageModel = uc.sayLogin("admin", "admin2");
        //将结果打印
        System.out.println(messageModel);
    }

在这里插入图片描述

@Test
    public void test05(){
        //先获取spring容器上下文
        ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");
        //通过getbean获取控制层的对象,
        UserController uc = app.getBean("uc", UserController.class);
        //调用控制层中的方法,并将测试的用户名和密码作为实参传入
        MessageModel messageModel = uc.sayLogin("admin1", "admin");
        //将结果打印
        System.out.println(messageModel);
    }

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值