国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

網(wǎng)頁版Java(Spring/Spring Boot/Spring MVC)五子棋項目(二)前后端實現(xiàn)用戶的登錄和注冊功能【用戶模塊】

這篇具有很好參考價值的文章主要介紹了網(wǎng)頁版Java(Spring/Spring Boot/Spring MVC)五子棋項目(二)前后端實現(xiàn)用戶的登錄和注冊功能【用戶模塊】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在用戶模塊我們要清楚要完成的任務(wù)

一、MyBatis后端操作數(shù)據(jù)庫

1. 需要在數(shù)據(jù)庫創(chuàng)建用戶數(shù)據(jù)庫

1. 用戶id
2. 用戶名
3. 密碼
4. 天梯積分
5. 總場數(shù)
6. 獲勝場數(shù)
create database if not exists java_gobang;

use java_gobang;

drop table if exists user;
create table user (
    userId int primary key auto_increment,
    username varchar(50) unique,
    password varchar(50),
    score int,       -- 天梯積分
    totalCount int,  -- 比賽總場數(shù)
    winCount int     -- 獲勝場數(shù)
);

insert into user values(null, 'zhangsan', '123', 1000, 0, 0);
insert into user values(null, 'lisi', '123', 1000, 0, 0);
insert into user values(null, 'wangwu', '123', 1000, 0, 0);

2. 創(chuàng)建用戶類User

和數(shù)據(jù)庫的數(shù)據(jù)一一對應(yīng)
package com.example.java_gobang.model;

public class User {
    private int userId;
    private String username;
    private String password;
    private int score;
    private int totalCount;
    private int winCount;

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    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;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public int getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }

    public int getWinCount() {
        return winCount;
    }

    public void setWinCount(int winCount) {
        this.winCount = winCount;
    }
}

3. 用MyBatis操作數(shù)據(jù)庫

1. 連接數(shù)據(jù)庫(application.yml連接數(shù)據(jù)庫)

這個可以直接賦值代碼
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/java_gobang?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  mapper-locations: classpath:mapper/**Mapper.xml

logging:
  pattern:
    console: "[%-5level] - %msg%n"

2. 創(chuàng)建UserMapper的Java接口(interface UserMapper)

創(chuàng)建接口,在UserMapper.xml實現(xiàn)
在model中創(chuàng)建
需要實現(xiàn)@Mapper注釋
package com.example.java_gobang.model;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper {
    // 往數(shù)據(jù)庫里插入一個用戶. 用于注冊功能.
    void insert(User user);

    // 根據(jù)用戶名, 來查詢用戶的詳細(xì)信息. 用于登錄功能
    User selectByName(String username);

    // 總比賽場數(shù) + 1, 獲勝場數(shù) + 1, 天梯分?jǐn)?shù) + 30
    void userWin(int userId);

    // 總比賽場數(shù) + 1, 獲勝場數(shù) 不變, 天梯分?jǐn)?shù) - 30
    void userLose(int userId);
}

3. 創(chuàng)建UserMapper.xml 實現(xiàn)數(shù)據(jù)庫操作

實現(xiàn)具體數(shù)據(jù)庫操作
利用標(biāo)簽
mapper標(biāo)簽地址要對應(yīng)好
不同操作 標(biāo)簽不同
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.java_gobang.model.UserMapper">
    <insert id="insert">
        insert into user values(null, #{username}, #{password}, 1000, 0, 0);
    </insert>

    <select id="selectByName" resultType="com.example.java_gobang.model.User">
        select * from user where username = #{username};
    </select>
    
    <update id="userWin">
        update user set totalCount = totalCount + 1, winCount = winCount + 1, score = score + 30
        where userId = #{userId}
    </update>
    
    <update id="userLose">
        update user set totalCount = totalCount + 1, score = score - 30
        where userId = #{userId}
    </update>
</mapper>

二、約定前后端接口

1. 登錄接口

網(wǎng)頁版Java(Spring/Spring Boot/Spring MVC)五子棋項目(二)前后端實現(xiàn)用戶的登錄和注冊功能【用戶模塊】,項目,java,spring,spring boot

前端發(fā)送post請求,具體內(nèi)容是直接對應(yīng)的
    <script>
        let usernameInput = document.querySelector('#username');
        let passwordInput = document.querySelector('#password');
        let submitButton = document.querySelector('#submit');
        submitButton.onclick = function() {
            $.ajax({
                type: 'post',
                url: '/login',
                data: {
                    username: usernameInput.value,
                    password: passwordInput.value,
                },
                success: function(body) {
                    // 請求執(zhí)行成功之后的回調(diào)函數(shù)
                    // 判定當(dāng)前是否登錄成功~
                    // 如果登錄成功, 服務(wù)器會返回當(dāng)前的 User 對象. 
                    // 如果登錄失敗, 服務(wù)器會返回一個空的 User 對象. 
                    if (body && body.userId > 0) {
                        // 登錄成功
                        alert("登錄成功!");
                        // 重定向跳轉(zhuǎn)到 "游戲大廳頁面".
                        location.assign('/game_hall.html');
                    } else {
                        alert("登錄失敗!");
                    }
                },
                error: function() {
                    // 請求執(zhí)行失敗之后的回調(diào)函數(shù)
                    alert("登錄失敗!");
                }
            });
        }
    </script>

所以后端的參數(shù)也是對應(yīng)的,然后后端返回一個用戶類
1. 后端通過前端傳的用戶名,查詢數(shù)據(jù)庫
2. 如果數(shù)據(jù)庫為空,返回一個新的 用戶類
3. 否則,把Session置為true
4. 然后返回用戶類
@PostMapping("/login")
@ResponseBody
public Object login(String username, String password, HttpServletRequest req) {
    // 關(guān)鍵操作, 就是根據(jù) username 去數(shù)據(jù)庫中進行查詢.
    // 如果能找到匹配的用戶, 并且密碼也一致, 就認(rèn)為登錄成功
    User user = userMapper.selectByName(username);
    System.out.println("[login] username=" + username);
    if (user == null || !user.getPassword().equals(password)) {
        // 登錄失敗
        System.out.println("登錄失敗!");
        return new User();
    }
    HttpSession httpSession = req.getSession(true);
    httpSession.setAttribute("user", user);
    return user;
}

2. 注冊接口

網(wǎng)頁版Java(Spring/Spring Boot/Spring MVC)五子棋項目(二)前后端實現(xiàn)用戶的登錄和注冊功能【用戶模塊】,項目,java,spring,spring boot

前端POST請求,參數(shù)是一一對應(yīng)
    <script>
        let usernameInput = document.querySelector('#username');
        let passwordInput = document.querySelector('#password');
        let submitButton = document.querySelector('#submit');
        submitButton.onclick = function() {
            $.ajax({
                type: 'post',
                url: '/register',
                data: {
                    username: usernameInput.value,
                    password: passwordInput.value,
                },
                success: function(body) {
                    // 如果注冊成功, 就會返回一個新注冊好的用戶對象. 
                    if (body && body.username) {
                        // 注冊成功!
                        alert("注冊成功!")
                        location.assign('/login.html');
                    } else {
                        alert("注冊失敗!");
                    }
                }, 
                error: function() {
                    alert("注冊失敗!");
                }
            });
        }

    </script>
后端參數(shù)接受一個一一對應(yīng)
1. 創(chuàng)建一個User類
2. 調(diào)用userMapper插入
如果創(chuàng)建重復(fù) 則拋出異常 返回一個新的User
    @PostMapping("/register")
    @ResponseBody
    public Object register(String username, String password) {
        try {
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
            userMapper.insert(user);
            return user;
        } catch (org.springframework.dao.DuplicateKeyException e) {
            User user = new User();
            return user;
        }
    }

3. 從服務(wù)器獲取當(dāng)前登錄的信息

網(wǎng)頁版Java(Spring/Spring Boot/Spring MVC)五子棋項目(二)前后端實現(xiàn)用戶的登錄和注冊功能【用戶模塊】,項目,java,spring,spring boot文章來源地址http://www.zghlxwxcb.cn/news/detail-638259.html

前端GET請求
<script>
        $.ajax({
            type: 'get',
            url: '/userInfo',
            success: function(body) {
                let screenDiv = document.querySelector('#screen');
                screenDiv.innerHTML = '玩家: ' + body.username + " 分?jǐn)?shù): " + body.score 
                    + "<br> 比賽場次: " + body.totalCount + " 獲勝場數(shù): " + body.winCount
            },
            error: function() {
                alert("獲取用戶信息失敗!");
            }
        });
</script>
后端
1. 判斷用戶是否Session中
2. 查詢數(shù)據(jù)庫 返回對應(yīng)類
如果沒有在則返回一個新的user
@GetMapping("/userInfo")
@ResponseBody
public Object getUserInfo(HttpServletRequest req) {
    try {
        HttpSession httpSession = req.getSession(false);
        User user = (User) httpSession.getAttribute("user");
        // 拿著這個 user 對象, 去數(shù)據(jù)庫中找, 找到最新的數(shù)據(jù)
        User newUser = userMapper.selectByName(user.getUsername());
        return newUser;
    } catch (NullPointerException e) {
        return new User();
    }
}

4. UserAPI

package com.example.java_gobang.api;

import com.example.java_gobang.model.User;
import com.example.java_gobang.model.UserMapper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@RestController
public class UserAPI {

    @Resource
    private UserMapper userMapper;

    @PostMapping("/login")
    @ResponseBody
    public Object login(String username, String password, HttpServletRequest req) {
        // 關(guān)鍵操作, 就是根據(jù) username 去數(shù)據(jù)庫中進行查詢.
        // 如果能找到匹配的用戶, 并且密碼也一致, 就認(rèn)為登錄成功
        User user = userMapper.selectByName(username);
        System.out.println("[login] username=" + username);
        if (user == null || !user.getPassword().equals(password)) {
            // 登錄失敗
            System.out.println("登錄失敗!");
            return new User();
        }
        HttpSession httpSession = req.getSession(true);
        httpSession.setAttribute("user", user);
        return user;
    }

    @PostMapping("/register")
    @ResponseBody
    public Object register(String username, String password) {
        try {
            User user = new User();
            user.setUsername(username);
            user.setPassword(password);
            userMapper.insert(user);
            return user;
        } catch (org.springframework.dao.DuplicateKeyException e) {
            User user = new User();
            return user;
        }
    }

    @GetMapping("/userInfo")
    @ResponseBody
    public Object getUserInfo(HttpServletRequest req) {
        try {
            HttpSession httpSession = req.getSession(false);
            User user = (User) httpSession.getAttribute("user");
            // 拿著這個 user 對象, 去數(shù)據(jù)庫中找, 找到最新的數(shù)據(jù)
            User newUser = userMapper.selectByName(user.getUsername());
            return newUser;
        } catch (NullPointerException e) {
            return new User();
        }
    }
}

三、實現(xiàn)前端頁面

1. 登錄頁面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登錄</title>

    <link rel="stylesheet" href="css/common.css">
    <link rel="stylesheet" href="css/login.css">
</head>
<body>
    <div class="nav">
        五子棋對戰(zhàn)
    </div>
    <div class="login-container">
        <!-- 登錄界面的對話框 -->
        <div class="login-dialog">
            <!-- 提示信息 -->
            <h3>登錄</h3>
            <!-- 這個表示一行 -->
            <div class="row">
                <span>用戶名</span>
                <input type="text" id="username">
            </div>
            <!-- 這是另一行 -->
            <div class="row">
                <span>密碼</span>
                <input type="password" id="password">
            </div>
            <!-- 提交按鈕 -->
            <div class="row">
                <button id="submit">提交</button>
            </div>
        </div>

    </div>

    <script src="./js/jquery.min.js"></script>
    <script>
        let usernameInput = document.querySelector('#username');
        let passwordInput = document.querySelector('#password');
        let submitButton = document.querySelector('#submit');
        submitButton.onclick = function() {
            $.ajax({
                type: 'post',
                url: '/login',
                data: {
                    username: usernameInput.value,
                    password: passwordInput.value,
                },
                success: function(body) {
                    // 請求執(zhí)行成功之后的回調(diào)函數(shù)
                    // 判定當(dāng)前是否登錄成功~
                    // 如果登錄成功, 服務(wù)器會返回當(dāng)前的 User 對象. 
                    // 如果登錄失敗, 服務(wù)器會返回一個空的 User 對象. 
                    if (body && body.userId > 0) {
                        // 登錄成功
                        alert("登錄成功!");
                        // 重定向跳轉(zhuǎn)到 "游戲大廳頁面".
                        location.assign('/game_hall.html');
                    } else {
                        alert("登錄失敗!");
                    }
                },
                error: function() {
                    // 請求執(zhí)行失敗之后的回調(diào)函數(shù)
                    alert("登錄失敗!");
                }
            });
        }
    </script>
</body>
</html>

2. 注冊頁面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>注冊</title>
    <link rel="stylesheet" href="css/common.css">
    <link rel="stylesheet" href="css/login.css">
</head>
<body>
    <div class="nav">
        五子棋對戰(zhàn)
    </div>
    <div class="login-container">
        <!-- 登錄界面的對話框 -->
        <div class="login-dialog">
            <!-- 提示信息 -->
            <h3>注冊</h3>
            <!-- 這個表示一行 -->
            <div class="row">
                <span>用戶名</span>
                <input type="text" id="username">
            </div>
            <!-- 這是另一行 -->
            <div class="row">
                <span>密碼</span>
                <input type="password" id="password">
            </div>
            <!-- 提交按鈕 -->
            <div class="row">
                <button id="submit">提交</button>
            </div>
        </div>
    </div> 

    <script src="js/jquery.min.js"></script>
    <script>
        let usernameInput = document.querySelector('#username');
        let passwordInput = document.querySelector('#password');
        let submitButton = document.querySelector('#submit');
        submitButton.onclick = function() {
            $.ajax({
                type: 'post',
                url: '/register',
                data: {
                    username: usernameInput.value,
                    password: passwordInput.value,
                },
                success: function(body) {
                    // 如果注冊成功, 就會返回一個新注冊好的用戶對象. 
                    if (body && body.username) {
                        // 注冊成功!
                        alert("注冊成功!")
                        location.assign('/login.html');
                    } else {
                        alert("注冊失敗!");
                    }
                }, 
                error: function() {
                    alert("注冊失敗!");
                }
            });
        }

    </script>
</body>
</html>

到了這里,關(guān)于網(wǎng)頁版Java(Spring/Spring Boot/Spring MVC)五子棋項目(二)前后端實現(xiàn)用戶的登錄和注冊功能【用戶模塊】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • C++項目:在線五子棋對戰(zhàn)網(wǎng)頁版--匹配對戰(zhàn)模塊開發(fā)

    玩家匹配是根據(jù)自己的天梯分?jǐn)?shù)進行匹配的,而服務(wù)器中將玩家天梯分?jǐn)?shù)分為三個檔次: 1. 普通:天梯分?jǐn)?shù)小于2000分 2. 高手:天梯分?jǐn)?shù)介于2000~3000分之間 3. 大神:天梯分?jǐn)?shù)大于3000分 當(dāng)玩家進行對戰(zhàn)匹配時,服務(wù)器會根據(jù)檔次,將玩家送到不同檔次的匹配隊列當(dāng)中。共有

    2024年02月13日
    瀏覽(21)
  • 純java編寫的聯(lián)機五子棋項目(附帶開源鏈接)

    純java編寫的聯(lián)機五子棋項目(附帶開源鏈接)

    這是用java寫的一個聯(lián)機五子棋項目,該項目是我大二上期的時候?qū)懙模菚r候?qū)W完了java基礎(chǔ),想要把學(xué)的技術(shù)都綜合使用一下,于是就在國慶節(jié)花了3天還是幾天寫了這個項目。 這個項目分為服務(wù)端和客戶端,它們是基于Socket進行通信的,簡單編寫了一下java的gui界面。 主界

    2023年04月09日
    瀏覽(20)
  • 【項目設(shè)計】網(wǎng)絡(luò)對戰(zhàn)五子棋(上)

    【項目設(shè)計】網(wǎng)絡(luò)對戰(zhàn)五子棋(上)

    想回家過年… 1.1 http1.0/1.1和websocket協(xié)議 1. a. http協(xié)議在Linux的學(xué)習(xí)部分我們就已經(jīng)學(xué)習(xí)過了,當(dāng)時http和https是一塊學(xué)的,我們當(dāng)時其實已經(jīng)了解了http的大部分知識內(nèi)容,比如http請求和響應(yīng)的格式,各自的報頭字段都有哪些,cookie和session機制,http1.1的長連接策略keep-alive,還有

    2024年02月07日
    瀏覽(22)
  • 微信小程序項目實例——雙人五子棋

    微信小程序項目實例——雙人五子棋

    項目代碼見文字底部,點贊關(guān)注有驚喜 微信小程序項目實例——雙人五子棋 雙人五子棋是一款游戲小程序 兩位選手可以在15x15的棋盤上 進行五子棋競技 同時小程序設(shè)置了悔棋功能 點擊落子 判斷勝負(fù) 勝利效果 重新開始 悔棋 具體的介紹就到這里了 有興趣的同學(xué)可以繼續(xù)研

    2024年02月12日
    瀏覽(20)
  • C++項目:網(wǎng)絡(luò)版本在線五子棋對戰(zhàn)

    C++項目:網(wǎng)絡(luò)版本在線五子棋對戰(zhàn)

    目錄 1.項目介紹 2.開發(fā)環(huán)境 3.核心技術(shù) 4. 環(huán)境搭建 5.websocketpp 5.1原理解析 5.2報文格式? 5.3websocketpp常用接口介紹 5.4websocket服務(wù)器 6.JsonCpp使用 6.1Json數(shù)據(jù)格式 6.2JsonCpp介紹 7.MySQL API 7.1MySQL API介紹 7.2MySQL API使用 7.3實現(xiàn)增刪改查操作 8.項目結(jié)構(gòu)設(shè)計 8.1項目模塊劃分說明 8.2業(yè)務(wù)處

    2024年02月10日
    瀏覽(29)
  • Java課程設(shè)計-簡單五子棋

    Java課程設(shè)計-簡單五子棋

    五子棋介紹 ????五子棋是起源于中國古代的傳統(tǒng)黑白棋種之一。五子棋不僅能增強思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學(xué)的高深學(xué)問“陰陽易理”;它既有簡單易學(xué)的特性,為人民群眾所喜聞

    2024年02月03日
    瀏覽(19)
  • python項目分享 python五子棋小游戲

    python項目分享 python五子棋小游戲

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項目作品 python小游戲畢設(shè) 五子棋小游戲設(shè)計與實現(xiàn) (源碼) ?? 學(xué)長根據(jù)實現(xiàn)的難度和等級對項目進行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點:4分 項目獲取: htt

    2024年02月03日
    瀏覽(25)
  • Linux項目實戰(zhàn)——五子棋(單機人人對戰(zhàn)版)

    Linux項目實戰(zhàn)——五子棋(單機人人對戰(zhàn)版)

    Linux操作系統(tǒng)項目實戰(zhàn)——五子棋 GIF: 目錄 ? ? ? ? ???Linux操作系統(tǒng)項目——五子棋 一、問題導(dǎo)引: 二、實現(xiàn)要求: 三、五子棋原理: 1.落子數(shù)據(jù)信息保存載體: 2.落子思路: 3.判斷“五子連珠” 四、項目實現(xiàn)步驟: Ⅰ.創(chuàng)建目錄及文件: 1.在Linux環(huán)境下創(chuàng)建名為Gobang的文

    2024年02月03日
    瀏覽(26)
  • python項目分享 - python五子棋小游戲

    python項目分享 - python五子棋小游戲

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項目作品 python小游戲畢設(shè) 五子棋小游戲設(shè)計與實現(xiàn) (源碼) ?? 學(xué)長根據(jù)實現(xiàn)的難度和等級對項目進行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點:4分 項目獲?。?htt

    2024年02月03日
    瀏覽(27)
  • 用Java寫一個簡易五子棋游戲

    用Java寫一個簡易五子棋游戲

    ?一.?程序基本思路: 1.寫窗口、棋盤面板、控制面板; 2.繪制棋盤; 3.繪制棋子; 4.添加組件功能; 5.判斷輸贏; 6.悔棋; 7.復(fù)盤。 二.實際操作 1.創(chuàng)建窗口、添加面板 效果圖: ?2.繪制棋盤 ? 為了棋盤線在窗體刷新后仍能保存,我們直接重寫chesspanel的paint方法,將棋盤繪

    2024年02月06日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包