项目9-网页聊天室2(登录)

0.前端知识储备 

Ajax请求中的async:false/true的作用 - front-gl - 博客园 (cnblogs.com)

01.前端页面展示 

02.后端代码

2.1 CONTROLLER

@RequestMapping("/login")
    public Result login(String username, String password, HttpSession httpSession){
        User user= userMapper.selectByUsername(username);
        if(!StringUtils.hasLength(username)||!StringUtils.hasLength(password)){
            return Result.fail(Constant.PASSWORD_OR_NULL,"密码或账号为空");
        }else if(user==null){
            return Result.fail(Constant.MESSAGE_NULL,"用户信息为空");
        }else if(!bCryptPasswordEncoder.matches(password,user.getPassword())){
            return Result.fail(Constant.PASSWORD_WRONG,"账号或密码错误");
        }
        user.setPassword("");
        httpSession.setAttribute(Constant.USERINFO_SESSION_KEY,user);
        return Result.success(user);
    }

2.2 后端测试

成功!!!

03.前端代码

3.1 login.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>登录界面</title>
    <link rel="stylesheet" href="css/common.css">
    <link rel="stylesheet" href="css/login.css">
  </head>
  <body>
    <!-- 导航栏 -->
    <div class="nav">
        网页聊天
    </div>
    <div class="container">
      <h1>用户登录</h1>
      <form>
        <br>
        <label for="username">用户名</label><br>
        <input type="text" name="username" id="username" class="input"><br>
        <label for="pwd">密码</label><br>
        <input type="password" name="" id="password" class="input">
        <button type="submit" class="submit" id="submit" onclick="login()">开始登录</button>
        <br>
        <a href="client.html" class="left">返回首页</a>
        <a href="register.html" class="right">注册账号</a>
      </form>
    </div>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <script type="text/javascript" src="js/login.js"></script>
  </body>
</html>

3.2 login.js

function login(){
    $.ajax({
        type: "get",
        url: "/user/login",
        contentType: "application/json",
        dataType: "json",
        async: false,
        cache: false,// 使用同步操作
        timeout: 50000, //超时时间:50秒
        data: {
            "username": $("#username").val(),
            "password": $("#password").val()
        },
            
        success: function(result){
            if(result!=null&&result.status==200){
                alert("登陆成功!开始进行聊天吧")
                location.href="client.html"
            }else if(result!=null&&result.status==-12){
                alert("密码或账号为空")
            }else if(result!=null&&result.status==-14){
                alert("用户信息为空,请进行注册哦")
            }else if(result!=null&&result.status==-16){
                alert("账号或密码错误")
            }else{
                alert("出现内部错误,请联系管理员!")
            }
        },
        error: function () {
            alert("接口错误");       // 返回失败
        }

    });

    
}

3.3 login.css

body{
    background: url("../img/coolgirl.jpg");
    background-size:100% 100%;
    background-attachment: fixed;
}
h1{
    color: #FFF;
    text-align: center;
}
.container{
    margin: 100px auto;
    width: 30%;
}
form{
    background: #FFF;
    height: 300px;
    width: 100%;
    border-radius: 10px;
    position: relative;
}
label{
    color: #000;
    font-weight: bold;
    font-size: 20px;
    margin-left: 40px;
}
input{
    text-align: left;
    margin: 10px;
}
.input{
    width: 80%;
    height: 35px;
    margin-left: 40px;
}
.checkbox{
    margin-left: 30px;
}
a{
    text-decoration: none;
    font-weight: bold;
}
.submit{
    display: inline-block;
    margin-top: 0;
    margin-left:160px;
    background: black;
    border: none;
    color: #FFF;
    height: 35px;
    width: 100px;
    text-align: center;
    font-weight: bold;
    border-radius: 5px;
}
.submit:active {
    background-color: #666;
}
.left{
    margin: 20px;
}
.right{
    position: absolute;
    right: 20px;
}

3.4 前端测试

但是有一个问题,无法实现跳转

最后发现是由于前端界面写的form表单导致的

我们在写前端时,尽量避免运用form表单

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

macOS Monterey 12.7.5 (21H1222) Boot ISO 原版可引导镜像下载

macOS Monterey 12.7.5 (21H1222) Boot ISO 原版可引导镜像下载 5 月 13 日凌晨&#xff0c;macOS Sonoma 14.5 发布&#xff0c;同时带来了 macOS Ventru 13.6.7 和 macOS Monterey 12.7.5 安全更新。 本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#x…

windows上pycharm调试streamlit应用

windows上pycharm调试streamlit应用 开发环境: PyCharm 2023.3.5 (Professional Edition) windows10 conda(python3.11.7) streamlit1.33.0 创建应用 app.py import streamlit as stst.header("hello") st.write("this is a streamlit demo")启动应…

使用Python探究OpenAI API

谁没听说过OpenAI?这家人工智能研究实验室因其著名的产品ChatGPT而改变了世界。它改变了AI实施领域&#xff0c;许多公司现在急于成为下一大热点。 尽管竞争激烈&#xff0c;OpenAI仍然是任何生成式AI业务需求的首选公司&#xff0c;因为它拥有最好的模型和持续的支持。该公司…

【Jmeter】使用Jmeter进行接口测试、跨线程组获取参数

Jmeter接口测试 Jmeter设置成中文实操练习-跨线程组提取参数&#xff0c;使用值HTTP请求默认值&HTTP信息头管理器 相信打算从事测试工程师的同学们&#xff0c;肯定对Jmeter是耳熟能详的。使用Jmeter可以进行接口测试、性能测试、压力测试等等&#xff1b;这个章节介绍如何…

【机器学习论文阅读笔记】Robust Recovery of Subspace Structures by Low-Rank Representation

前言 终于要轮到自己汇报了好崩溃。。盯着论文准备开始做汇报ppt感觉一头乱麻&#xff0c;决定还是写博客理清思路再说吧 参考资料&#xff1a; 论文原文&#xff1a;arxiv.org/pdf/1010.2955 RPCA参考文章&#xff1a;RPCA - 知乎 (zhihu.com) 谱聚类参考文章&#xff1a…

Ubuntu 安装 LibreOffice

1. 删除预安装的LibreOffice Ubuntu 和其他的 Linux 发行版带有预安装的 LibreOffice。这可能不是最新的&#xff0c;这是因为发行版有特定的发行周期。在进行新安装之前&#xff0c;你可以通过以下命令删除 Ubuntu 及其衍生发行版中的的旧版本。 sudo apt remove –purge li…

Java进阶学习笔记2——static修饰成员变量

static&#xff1a; 叫静态&#xff0c;可以修饰成员变量、成员方法。 成员变量按照有无static修饰&#xff0c;分为两种&#xff1a; 类变量&#xff1a;有static修饰&#xff0c;属于类&#xff0c;在计算机中只有一份&#xff0c;会被类的全部对象共享。静态成员变量。 实…

FL Studio2025新功能大揭秘,你准备好了吗?

FL Studio&#xff0c;常被音乐制作者亲切地称为“水果”编曲软件&#xff0c;是比利时的Image-Line公司研发的一款完整的软件音乐生产环境或数字音频工作站&#xff08;DAW&#xff09;。自从1997年推出以来&#xff0c;它已经成为全世界众多电子音乐制作者和DJ的首选工具&…

信息学奥赛初赛天天练-10-组合数学-排列组合-一次彻底搞懂分组分配问题

更多资源请关注纽扣编程微信公众号 平均分组 是指将所有的元素分成所有组元素个数相等或部分组元素个数相等&#xff0c;即m个不同的元素平均分成n个组&#xff0c;有多少种分组方法 由于是平均分组&#xff0c;分组选择元素时会出现重复&#xff0c;因此结果需要除以A(n,n…

C++的数据结构(十八):并查集

并查集&#xff08;Union-Find&#xff09;是一种用于处理一些不交集&#xff08;Disjoint Sets&#xff09;问题的数据结构。它主要支持两种操作&#xff1a;合并集合&#xff08;Union&#xff09;和查找元素所属集合&#xff08;Find&#xff09;。在解决诸如连通性问题、网…

【Linux】POSIX线程库——线程控制

目录 1.线程创建方法 例&#xff1a;多线程创建 2.线程终止 2.1 return nulptr; 2.2 pthread_exit(nullptr); 3. 线程等待 3.1 等待原因 3.2 等待方法 线程终止的返回值问题 4.线程取消 5. 线程分离 5.1 分离原因 5.2 分离方法 6.封装线程 用的接口是POSIX线程库…

读人工智能时代与人类未来笔记13_网络57

1. jun背控制 1.1. 威慑的目的是通过威胁发动盒站来防止盒站 1.2. jun背控制的目的是通过限制甚至废除57&#xff08;或57类别&#xff09;本身来防止盒站真 1.2.1. 与盒不扩散相配合&#xff0c;以一整套详尽的条约、技术保障措施、监管和其他控制机制为支撑&#xff0c;所…

如何生成Github Badge徽章图标

如何生成徽章Badge 什么是徽章(Badge)生成小徽章shields网站开源项目的徽章lib版本徽章代码测试覆盖度开源协议Github workflow的徽章 开源代码实践效果py-enumjs-enumerate 什么是徽章(Badge) 在开源项目的README中&#xff0c;经常会见到一些徽章(Badge)小图标&#xff0c;如…

ViLT学习

多模态里程碑式的文章&#xff0c;总结了四种多模态方法&#xff0c;根据文字和图像特征特征抽取方式不通。 文章的贡献主要是速度提高了&#xff0c;使用了数据增强&#xff0c;文本的mask 学习自b站朱老师的论文讲解

无线领夹麦克风哪个品牌好?无线麦克风品牌排行榜前十名推荐

​在当今的数字化浪潮中&#xff0c;个人声音的传播和记录变得尤为重要。无论是会议中心、教室讲台还是户外探险&#xff0c;无线领夹麦克风以其卓越的便携性和连接稳定性&#xff0c;成为了人们沟通和表达的首选工具。面对市场上琳琅满目的无线麦克风选择&#xff0c;为了帮助…

小程序多端框架目前所遇问题记录

一、wx.openLocation兼容 1、申请腾讯地图key 2、配置LBS SDK&#xff0c;选择SDK最新版本 3、调用接口&#xff0c;name和address必须输入&#xff0c;不然要报错 uni.openLocation({latitude: Number(this.info.latitude),longitude: Number(this.info.longitude),name:this…

全域外卖是谁创办的公司?

全域外卖是谁创办的公司&#xff1f;这个问题是抽象的。正确的问法应该是全域外卖是谁研发的系统。 在了解全域外卖系统前&#xff0c;我们首先要了解什么是全域外卖&#xff0c;什么是全域团购。全域指的是多平台。当然这个平台是越多越好。实际上也可以理解为聚合外卖、聚合…

Java 解决 古典问题

1 问题 编写一个Java程序&#xff0c;解决以下问题&#xff1a; 2 方法 再导入java.util包下的Scanner类&#xff0c;构建Scanner对象&#xff0c;以便输入。通过对问题的分析&#xff0c;我们可以得到&#xff0c;当位数为1时&#xff0c;其返回值为1&#xff1b;当位数为2时&…

电影推荐|基于SSM+vue的电影推荐系统的设计与实现(源码+数据库+文档)

电影推荐系统 目录 基于SSM&#xff0b;vue的电影推荐系统的设计与实现 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#…

Flutter设计模式全面解析:单例模式

谈到设计模式这个“古老”的话题&#xff0c;大家先别急着划走哈&#xff0c;虽然对它再熟悉不过&#xff0c;几乎是最初开始学习编程到现在伴随着我们整个编程生涯&#xff0c;最早 Java、C 语言实现的各种设计模式到现在还会经常有所接触&#xff0c;面试中也是必问的环节&am…