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

news2024/10/7 0:03:14

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表单

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

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

相关文章

零基础PHP入门(一)选择IDE和配置环境

配置环境 官网下载安装包&#xff0c;windows https://windows.php.net/download#php-8.3 我是下载的最新版&#xff0c;也可以切换其他版本 https://windows.php.net/downloads/releases/archives/ 下载好压缩文件后&#xff0c;双击解压到一个目录 D:\soft\php 复制ph…

指针变量加1为什么地址加了4?

#include <stdio.h> #include <stdlib.h> int main() {int a 1;int* ptr;ptr &a;printf("ptr is: %p\n", ptr);ptr;printf("ptr1 is: %p\n", ptr);return 0; }在上述代码中&#xff0c;首先定义了一个int类型的变量a&#xff0c;和一个i…

西门子CPU与汇川伺服通信与控制

西门子CPU与汇川620F伺服通信与控制 一、西门子CPU与汇川620F伺服通信与控制1、器件准备2、伺服软件设置3、PLC添加汇川伺服描述文件4、PLC编程调试5、总结 二、西门子s7-1500限位信号接到伺服的方法1、通过默认报文获取限位信号2、添加自定义报文获取限位信号3、总结 三、西门…

什么是DDoS流量清洗?

随着互联网的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;其中分布式拒绝服务&#xff08;DDoS&#xff09;攻击尤为引人关注。为了有效应对这一威胁&#xff0c;流量清洗服务应运而生&#xff0c;成为网络安全领域的一项重要技术。 流量清洗服务是一种专门针对DDoS…

Linux gurb2简介

文章目录 前言一、GRUB 2简介二、GRUB 2相关文件/文件夹2.1 /etc/default/grub文件2.2 /etc/grub.d/文件夹2.3 /boot/grub/grub.cfg文件 三、grubx64.efi参考资料 前言 简单来说&#xff0c;引导加载程序&#xff08;boot loader&#xff09;是计算机启动时运行的第一个软件程…

AtCoder ABC352 A-D题解

比赛链接:ABC352 Problem A: 签到题。 #include <bits/stdc.h> using namespace std; int main(){int N,X,Y,Z;cin>>N>>X>>Y>>Z;if((X<Z && Z<Y) || (Y<Z && Z<X))cout<<"YES"<<endl;else…

微服务雪崩问题、Sentinel(请求限流、线程隔离、服务熔断)、Seata分布式事务

文章目录 前言一、微服务保护二、Sentinel2.1 微服务整合2.2 簇点链路2.3 请求限流2.4 线程隔离2.5 服务熔断 三、分布式事务3.1 Seata3.1.1 Seata架构3.1.2 部署TC服务3.1.3 微服务集成Seata 3.2 XA模式3.3 AT模式 前言 微服务之间为什么会雪崩&#xff1f;怎么解决雪崩问题&…

使用 Supabase 的 Realtime + Storage 非常方便呢

文章目录 &#xff08;一&#xff09;Supabase&#xff08;二&#xff09;Realtime&#xff08;消息&#xff09;&#xff08;2.1&#xff09;Python 消息订阅&#xff08;2.2&#xff09;JavaScript 消息订阅 &#xff08;三&#xff09;Storage&#xff08;存储&#xff09;&…

如何撰写EI会议的投稿信?

撰写EI会议的投稿信&#xff08;Cover Letter&#xff09;是向会议组织者介绍你的论文和研究工作的一个重要环节。以下是撰写投稿信的一些关键步骤和建议&#xff1a; 投稿信的结构 信头 你的信息&#xff1a;包括姓名、职位、单位名称、通讯地址、电子邮件和电话号码。日期&am…

LeetCode198:打家劫舍

题目描述 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房屋存…

【论文笔记】Layer-Wise Weight Decay for Deep Neural Networks

Abstract 本文为了提高深度神经网络的训练效率&#xff0c;提出了逐层权重衰减(layer-wise weight decay)。 本文方法通过逐层设置权重衰减稀疏的不同值&#xff0c;使反向传播梯度的尺度与权重衰减的尺度之比在整个网络中保持恒定。这种设置可以避免过拟合或欠拟合&#xff0…

完全匹配企业需求的替代FTP升级软件怎么找

企业在处理数据传输时&#xff0c;效率和安全性是关键。尽管传统的FTP曾被广泛采用&#xff0c;但因其传输慢、安全性不足和难以管理等问题&#xff0c;已不再满足现代企业的需求。许多企业正在寻找能够满足其需求的FTP替代方案&#xff0c;但市场上选择众多&#xff0c;找到合…

设计模式使用(成本扣除)

前言 名词解释 基础名词 订单金额&#xff1a;用户下单时支付的金额&#xff0c;这个最好理解 产品分成&#xff1a;也就是跟其他人合做以后我方能分到的金额&#xff0c;举个例子&#xff0c;比如用户订单金额是 100 块&#xff0c;我方的分成是 80%&#xff0c;那么也就是…

双向链表C++,C#,Java版,这些程序大多已经过测试,一直在用。

先C版吧&#xff0c;我最先用的是C#,后来是Java&#xff0c;后来改用C版的&#xff0c;因为现在一直在用C&#xff0c;单链 表一直没写上去&#xff0c;因为我很少用&#xff0c;用的是双链表。 执行代码例子1&#xff1a; int main() { _DList<_string> s…

小恐龙跳一跳源码

小恐龙跳一跳源码是前两年就火爆过一次的小游戏源码&#xff0c;不知怎么了今年有火爆了&#xff0c;所以今天就吧这个源码分享出来了&#xff01;有喜欢的直接下载就行&#xff0c;可以本地单机直接点击index.html进行运行&#xff0c;又或者放在虚拟机或者服务器上与朋友进行…

基于RV1126的AI网络摄像机AHD、CVBS、HDMI接口的区别有哪些?支持8路AHD摄像头,支持AI实时分析

网络摄像机AHD、CVBS、HDMI接口的区别有哪些&#xff1f;应用场景有哪些&#xff1f; AHD、CVBS和HDMI是不同的视频传输接口&#xff0c;分别适用于不同的应用场景。下面是它们的主要应用场景&#xff1a; 1.AHD&#xff08;Analog High Definition&#xff09;&#xff1a;A…

Nextjs 动态路由获取参数

目录 一、创建page目录下的路由文件 二、通过useRouter来获取动态参数 先看官方文档&#xff1a;Routing: Dynamic Routes | Next.js 使用Nextjs13版本参考官方文档后实现仍有问题&#xff0c;网上的材料大多和官网一致&#xff0c;经过测试后&#xff0c;我找到了这个解决方…

【Linux】用户级缓冲区

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

【linux】详解linux权限

目录 用户 文件属性 更改文件权限 更改文件拥有者 更改文件所属组 用户的权限 文件掩码 粘滞位 总结 基本指令可参考&#xff1a; 【linux】详解linux基本指令-CSDN博客 【linux】详解linux基本指令-CSDN博客 用户 超级用户&#xff08;root&#xff09;&#xff…

【C++算法】BFS解决多源最短路问题相关经典算法题

1.01矩阵 既然本章是BFS解决多源最短路问题&#xff0c;也就是说有若干个起点&#xff0c;那我们就可以暴力一点&#xff0c;直接把多源最短路径问题转化成若干个单源最短路径问题&#xff0c;然后将每次的步数比较一下&#xff0c;取到最短的就是最短路径的结果&#xff0c;这…