前言:
当时要做一个管理系统,在做到实现登录功能的时候,由于我基础知识掌握的不够牢固,一直在原地打转,后来在公司前辈的指导下实现了该功能.运用到了SpringBoot,Ajax,html.JS,JQuery,等技术.
总流程:
1.前端页面login.html
1.1导入JQuery
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
<script src="https://apps.bdimg/libs/jquery/2.1.4/jquery.min.js">
//在这里导入jquery
</script>
</head>
<body>
</body>
</html>
因为我们在后面需要从前端获取到用户输入的数据并利用jquery获取input输入框中的值的方法将其
传递到后台.
1.2写一段input标签来获取用户输入的账号密码
账号:<input type="text" id="userAccount" name = "userAccount"> <br>
密码:<input type="password" id = "password" name = "password"> <br>
<button type="submit" id="button" style="margin-top:10px;" onclick="login()">提交</button>
这里的<button>中,有一个鼠标点击事件:οnclick="login()" 这个事件是指在点击该按钮时会执行这个login()方法,该方法的功能是登录(从上面两个input中获取数据并通过Ajax传递到后台做验证后再返回验证结果,并使Ajax根据不同的比对结果执行不同的操作:跳转页面/错误提示)
下面有具体的说明.
在此之前先来介绍一下,如何利用jquery获取input输入框中的值.
1.3如何利用jquery获取input输入框中的值:示例
如何用javascript获取input输入框中的值,js/jq通过name、id、class获取input输入框中的value
先准备一段 HTML
1
<input type=
"text"
id=
"CN_NAME"
name=
"CN_NAME"
class=
"CN_NAME"
>
jquery获取input文本框中的值
通过 name
var name = $('input[name="CN_NAME"]').val();
通过 id
var name = $('#CN_NAME').val();
通过 class
var name = $('.CN_NAME').val();
javascript获取input输入框中的值
通过 name
document.getElementsByName("CN_NAME")[0].value
通过 id
var name = document.getElementById("CN_NAME").value
通过 class
document.getElementsByClassName("CN_NAME")[0].value
ps:下面看下jQuery获取各种input输入框的值
1.获取一组radio单选框的值(name属性为一组的radio的name属性)
1
var
q1 = $(
"input[name=element_name]:checked"
).val();
2.获取select下拉框的值
var q2 = $("#element").val();
3.获取几个下拉框组合的值
1
var
q4 = (
"#element1"
).val() +(
"#element1"
).val() +(
"#element2"
).val() + $(
"#element3"
).val();
4.获取input输入框的值
var q5 = $("#element").val();
1.4利用jquery获取input输入框中的值:实例
在login.html文件的页面中:
<script>
// 通过JQuery 获取密码输入框里输入的密码的数据
function login() {
var userAccount = $('#userAccount').val();
var password = $('#password').val();
//var params = {"input_user_account":"input_password"}
var params = {
"userAccount": userAccount,
"password": password
};
//=======================================================================================
//发送前面获取的数值到后台
$.ajax({
type:"post",
ansyv:true,
data:params,
datatype:"json",
url:"http://localhost:9000/tre/User/login",
success:function(data){
if (data){
//alert('登录成功')
window.location.href ="https://www.baidu/";//成功就跳转,这里可以写你需要跳转的页面,本文以百度页面做示例
}else{
alert('帐号或密码错误');
}
},
error:function(){
alert("请求出错!");
}
})
}
</script>
这里将Jquery从前面的input标签里根据id=userAccount与id=password.分别获取用户输入到里面的账号与密码数据,并以JSON格式封装到Params中.
var userAccount = $('#userAccount').val();
var password = $('#password').val();
//var params = {"input_user_account":"input_password"}
var params = {
"userAccount": userAccount,
"password": password
};
在获取数据后,通过Ajax将获取的数据发送到后台
$.ajax({
type:"post",//请求方式为POST
ansyv:true,
data:params,//内容是上面获取的数据
datatype:"json",//格式为JSON格式
url:"http://localhost:9000/tre/User/login",//请求地址
//以下为获取到从后台返回的比对数据的结果后根据情况做出反应
success:function(data){
//成功获得比对结果(true/false)后执行success模块,再通过if判断分别对true/false做出不
同的反应(跳转页面/提示错误)
if (data){
//alert('登录成功')
window.location.href ="https://www.baidu/";//成功就跳转
}else{
alert('帐号或密码错误');
}
},
//没能从后台获取比对结果时执行error $.ajax({
type:"post",//请求方式为POST
ansyv:true,
data:params,//内容是上面获取的数据
datatype:"json",//格式为JSON格式
url:"http://localhost:9000/tre/User/login",//请求地址
//以下为获取到从后台返回的比对数据的结果后根据情况做出反应
success:function(data){
//成功获得比对结果(true/false)后执行success模块,再通过if判断分别对true/false做出
//不同的反应(跳转页面/提示错误)
if (data){
//alert('登录成功')
window.location.href ="https://www.baidu/";//成功就跳转
}else{
alert('帐号或密码错误');
}
},
//没能从后台获取比对结果时执行error,提示请求出错,这时你应该去DeBug以下数据传输流程,
//看看到底是哪里的数据没能正常传递.
error:function(){
alert("请求出错!");
}
})
整个login.html的全部代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
<script src="https://apps.bdimg/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body>
账号:<input type="text" id="userAccount" name = "userAccount"> <br>
密码:<input type="password" id = "password" name = "password"> <br>
<button type="submit" id="button" style="margin-top:10px;" onclick="login()">提交
</button>
<script>
// 通过JQuery 获取密码输入框里输入的密码的数据
function login() {
var userAccount = $('#userAccount').val();
var password = $('#password').val();
//var params = {"input_user_account":"input_password"}
var params = {
"userAccount": userAccount,
"password": password
};
//发送获取的数值到后台
$.ajax({
type:"post",
ansyv:true,
data:params,
datatype:"json",
url:"http://localhost:9000/tre/User/login",
success:function(data){//本来用的mag 现在用:data
if (data){
//alert('登录成功')
window.location.href ="http://127.0.0.1:5501/index.html";//成功就跳转https://www.baidu/
}else{
alert('帐号或密码错误');
}
},
error:function(){
alert("请求出错!");
}
})
}
</script>
</body>
</html>
这些就是前台login.html的全部代码了,量不是很多,但是设计的内容也不算少.可以多看看.
接下来咱们跟随数据从前台流向后台去.
2.后台页面
2.1 UserController.java
代码展示:
@Controller
//@RestController
@RequestMapping( "/User")
public class UserController {
@Autowired
private UserService userService;
//实现登录
@RequestMapping(value = "/login",method = RequestMethod.POST)
@ResponseBody
public boolean login(Integer userAccount, Integer password){
return userService.LoginIn(userAccount,password);
}
}
Controller接收从前端Ajax传递来的数据并存放到 login(Integer userAccount, Integer password)中,然后将其传递给服务层Service
2.2 UserService.java
代码展示:
@Service
public class UserService {
@Autowired
@Resource
private UserMapper userMapper;
//登录,验证密码是否正确
public boolean LoginIn(Integer userAccount, Integer password) {
User info = userMapper.getInfo(userAccount, password);
System.out.println("从数据库查到的密码为: "+info.getPassword());
if(info.getPassword().equals(password)){// 等同于if(info.getPassword() == password)
System.out.println("输入的密码与数据库中的一致");
return true;
}else {
System.out.println("输入的密码与数据库中的不同!");
return false;
}
}
}
Service接收到从Controller传递来的参数后将其放置在
LoginIn(Integer userAccount, Integer password)其中,然后传递到Mapper中,再通过Mapper的SQL语句对数据库进行根据账号userAccount查询出对应在数据库里的账号与密码.
2.3 UserMapper.java
代码展示:
@Mapper
public interface UserMapper {
//登录查询,可以实现登录功能
@Select("SELECT user_account,password FROM user WHERE user_account = #{userAccount}")
User getInfo(Integer userAccount, Integer password);
}
Mapper根据数据库中的"user_account"也就是账号,查询出与之对应的数据信息.并将其返回给Service
其实,从前端Ajax传递出数据给Controller,再传给Service,再到Mapper,最终从数据库抽出数据的过程就是一个根据id查询信息的过程,只不过这个查询过程的前半段的最开始的数据的来源是通过Ajax获取的用户输入,接下来又是一个小重点,现在我们的Service获取了Mapper辛辛苦苦从数据库中抽取来的数据,那我们要怎么处理它们呢? 做比较!
Service在获取到数据库存储的密码之后,需要做的事就是赶紧拿这个'真-密码'与前端传来的'密码'做比对,看看它们是否一致(这里我的账号密码都是Integer类型的,,如果是String类型的可以回顾一下下面的方法介绍)
String类型的比对方法:
//通过equals进行判断字符串是否不相等.
String中equals()方法覆盖了父类的Object方法,比较规则为:如果两个对象的类型一致,并且内容一致,则返回true,否则返回false.
例如:
String a = "abc";
String b = "abc";
if(a.equals(b)){ //通过equals比较a,b是否相等
//相等的情况System.out.println("a与b是相等的哦");}else{
//不相等的情况System.out.println("a与b是不等的哦");
}
那咱们继续进行"真密码"与"密码"之间的比对工作
代码为:
public boolean LoginIn(Integer userAccount, Integer password) {
User info = userMapper.getInfo(userAccount, password);
System.out.println("从数据库查到的密码为: "+info.getPassword());
//其中,info.getPassword()为Service从Mapper哪里得到的数据库内的密码
//password为从Controller那里传来的用户从前端输入的密码
if(info.getPassword().equals(password)){// 等同于if(info.getPassword() == password)
System.out.println("输入的密码与数据库中的一致");
return true;
}else {
System.out.println("输入的密码与数据库中的不同!");
return false;
}
}
现在我们假设用户输入的密码password与数据库内的密码info.getPassword()一致,则应该会提示"输入的密码与数据库中的一致"并返回true的结果
我们在Service验证密码为true的这个结果会传递给Controller,并被Ajax获取
$.ajax({
type:"post",//请求方式为POST
ansyv:true,
data:params,//内容是上面获取的数据
datatype:"json",//格式为JSON格式
url:"http://localhost:9000/tre/User/login",//请求地址
//以下为获取到从后台返回的比对数据的结果后根据情况做出反应
success:function(data){
//成功获得比对结果(true/false)后执行success模块,再通过if判断分别对true/false做出不
同的反应(跳转页面/提示错误)
if (data){
//alert('登录成功')
window.location.href ="https://www.baidu/";//成功就跳转
}else{
alert('帐号或密码错误');
}
},
//没能从后台获取比对结果时执行error $.ajax({
type:"post",//请求方式为POST
ansyv:true,
data:params,//内容是上面获取的数据
datatype:"json",//格式为JSON格式
url:"http://localhost:9000/tre/User/login",//请求地址
//以下为获取到从后台返回的比对数据的结果后根据情况做出反应
success:function(data){
//成功获得比对结果(true/false)后执行success模块,再通过if判断分别对true/false做出
//不同的反应(跳转页面/提示错误)
if (data){
//alert('登录成功')
window.location.href ="https://www.baidu/";//成功就跳转
}else{
alert('帐号或密码错误');
}
},
//没能从后台获取比对结果时执行error,提示请求出错,这时你应该去DeBug以下数据传输流程,
//看看到底是哪里的数据没能正常传递.
error:function(){
alert("请求出错!");
}
})
我们将比对的结果从后台又传回了Ajax,
Ajax收到了我们的反馈就会执行success(如果出现bug没能传回结果,将执行error)
因为我们的比对结果为true所以在success里的if判断中走true的模块,所以会执行 window.location.href ="https://www.baidu/"; 至此就完成了页面的跳转也就进入了百度的页面(示例),当然了,做自己的项目的话只需要把访问地址改成你的主页面index.html的地址,就会从login.html跳转到index.html的页面,也就完成了登录的功能.
总结:
1.过程:
整个过程是一个回环式的数据传输的过程,从用户输入数据点击登录开始,我们执行
1.用户输入数据并点击登录
2.jquery获取数据
3.以JSON格式封装
4.通过Ajax传递到后台的Controller
5.Controller传递给Service
6.Service传递给Mapper
7.Mapper根据账号去数据库抽取数据
8.Mapper将抽取的数据返回给Service
9.Service将数据库的数据与从Controller获得的前端数据做比对,返回一个布尔值(true/false)
10.Service将布尔值传递给Controller
11.Controller中的比对结果被Ajax获取
12.Ajax成功获取结果(走success并根据true/false执行不同的操作:跳转页面/提示错误),没有获取到结果(走error,提示连接错误)
13.跳转页面到index.html则成功实现了登录功能
2.重点:
1: 利用jquery获取input输入框中的值
2: 利用Ajax将数值传递到后台
3: Service既要传递从前台来的输入数据,又要返回作比较后的结果
3.难点:
1. 利用Ajax将数值传递到后台
2. Service既要传递从前台来的输入数据,又要返回作比较后的结果的功能的实现
3. 理解整个过程的信息传递流程
感谢您能看到这里,我只是一个刚刚开始编码的小白,如有不妥的地方希望您不吝赐教!谢谢~
更多推荐
利用Ajax传递数据实现在SpringBoot前后端分离项目中的登录功能
发布评论