JavaEE:Spring Web简单小项目实践二(用户登录实现)

学习目的:

1、理解前后端交互过程

2、学习接口传参,数据返回以及页面展示

1、准备工作

创建SpringBoot项目,引入Spring Web依赖,添加前端页面到项目中。

前端代码:

login.html

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>登录页面</title>
</head>

<body>
<h1>用户登录</h1>
用户名:<input name="userName" type="text" id="userName"><br>
密码:<input name="password" type="password" id="password"><br>
<input type="button" value="登录" onclick="login()">

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script>
    function login() {

    }

</script>
</body>

</html>

index.html

html 复制代码
<!doctype html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>用户登录首页</title>
</head>

<body>
登录人: <span id="loginUser"></span>

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script>

</script>
</body>

</html>

2、约定前后端交互接口

需求分析:

对于后端来说,不涉及前端页面展示的设计,只需要实现两个功能:

登录页面:通过获取账号和密码,校验输入的账号密码是否正确,并反馈给前端

首页:告知前端当前登录用户。如果当前已有用户登录,则返回登录的账号,没有则返回空

1、校验接口

接口定义:

请求路径:/user/login

接口描述:校验账号密码是否正确

请求参数:

响应数据:

Content-Type:text/html

响应内容:true 账号密码验证成功 / false 账号密码验证失败

2、查询用户登录接口

接口定义:

请求路径:/user/getLoginUser

接口描述:查询当前登录的用户

请求参数:

响应数据:

Content-Type:text/html

响应内容:zhangsan

(返回当前登录的用户)

3、实现服务端代码

1、校验接口

写法一:

java 复制代码
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController()
@RequestMapping("/user")
public class LoginController {
    @RequestMapping(value = "/login")
    public Boolean login(String userName, String password, HttpSession session) {
        //账号或密码为空
        if(userName == null || password == null) {
            return false;
        }
        //校验账号密码是否正确
        //因为没有引进数据库,所以这边先采用硬编码把它写死
        if("zhangsan".equals(userName) && "123456".equals(password)) {
            //账号密码校验成功,存储到session中
            session.setAttribute("username", userName);
            return true;
        }
        return false;
    }
}

写法二:

java 复制代码
import jakarta.servlet.http.HttpSession;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController()
@RequestMapping("/user")
public class LoginController {
    @RequestMapping(value = "/login")
    public Boolean login(String userName, String password, HttpSession session) {
        //写法二:
        //校验账号密码是否为空
        if (!StringUtils.hasLength(userName) || !StringUtils.hasLength(password)) {
            return false;
        }
        
        //校验账户密码是否正确
        if (!"zhangsan".equals(userName) || !"123456".equals(password)) {
            return false;
        }
        session.setAttribute("userName", userName);
        return true;
    }
}

StringUtils.hasLength()Spring提供的一个工具方法,判断字符串是否有值

字符串为 null"" 时,返回false,其他情况返回true

2、查询用户登录接口

java 复制代码
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController()
@RequestMapping("/user")
public class LoginController {
       @RequestMapping("/getLoginUser")
        public String getLoginUser(HttpSession session) {
        //从session中获取用户登录信息
        String userName = (String) session.getAttribute("username");
        //如果用户已经登录,session不为空,则直接返回用户信息
        if (userName != null) {
            return userName;
        }
        return "";
    }
}

4、调整前端页面代码

1、调整登录页面login.html

对于前端而言,当点击登录按钮时,需要把用户登录的信息传递到后端进行校验,后端校验成功,则跳转到首页 index.html;后端校验失败,则弹出警告

html 复制代码
    <script>
        function login() {
            $.ajax({
                url: "/user/login",
                data: {
                    "userName": $("#userName").val(),
                    "password": $("password").val()
                },
                success: function (result) {
                    if (result) {
                        //返回结果为true 页面跳转
                        location.href = "index.html";
                    } else {
                        //返回结果为false 报警告
                        alert("账号或密码错误");
                    }
                }
            });
        }

    </script>

2、调整首页代码

调整首行代码只需显示当前登录用户即可,当前登录用户需要从后端获取,并显示到前端

html 复制代码
    <script>
        $.ajax({
            type: "get",
            url: "/user/getLoginUser",
            success: function (result) {
                $("#loginUser").text(result);
            }
        });
    </script>

5、运行测试

session存储在内存中,只要服务器没重启,即使多次刷新,仍可以显示登录人信息~

相关推荐
有时间要学习几秒前
Linux——应用层自定义协议与序列化
linux·服务器·网络
是梦终空3 分钟前
JAVA毕业设计176—基于Java+Springboot+vue3的交通旅游订票管理系统(源代码+数据库)
java·spring boot·vue·毕业设计·课程设计·源代码·交通订票
落落落sss13 分钟前
sharding-jdbc分库分表
android·java·开发语言·数据库·servlet·oracle
hardStudy_h14 分钟前
Linux——常用系统设置和快捷键操作指令
linux·运维·服务器
码爸17 分钟前
flink doris批量sink
java·前端·flink
我叫啥都行41 分钟前
计算机基础知识复习9.7
运维·服务器·网络·笔记·后端
Monodye1 小时前
【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)
java·网络·数据结构·算法·系统架构
一丝晨光1 小时前
逻辑运算符
java·c++·python·kotlin·c#·c·逻辑运算符
无名指的等待7121 小时前
SpringBoot中使用ElasticSearch
java·spring boot·后端
qq 1778036222 小时前
智能新时代,游戏盾守护顺畅体验
运维·服务器·网络·游戏·云计算·ddos·ip