前端代码
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<form action="http://localhost:8080/a/calc" >
数字1:<input type="number" name="num1" >
数字2:<input type="number" name="num2" >
<input type="submit" value="计算数字之和">
form>
body>
html>
form表单 action 提交到 calc的接口下,进行处理
通过 进行传参,name作为key值,后端根据name进行接收参数
@RequestMapping("/calc")
@ResponseBody
public String getResult(Integer num1,Integer num2){
return "两数之和为:"
+(num1+num2)+""
;
}
最终效果
点击计算按钮,form表单将输入的值作为参数进行传参
这里参时不涉及到数据库的操作,只要输入的用户账号以及密码为 admin即可显示登陆成功,进入一个主页“hello word”
/static/login.html , 显示登录页并发送ajax请求,传递输入的 username、password
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">
<img src="image/logo2.jpg" alt="">
<span class="title">我的系统span>
<span class="spacer">span>
<a href="index.html">主页a>
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 submit-row">
<button id="submit" onclick="myfunc()">提 交button>
div>
div>
div>
body>
<script>
function myfunc(){
//1.拿到输入的用户名和密码控件
var username=jQuery("#username");
var password=jQuery("#password");
//2.进行非空校验
if(username.val()===""){
alert("请先输入用户名!");
username.focus(); // 光标归位
return;
}
if(password.val()===""){
alert("请输入密码!");
password.focus();
return;
}
//3.发起ajax请求,与后端进行交互
$.ajax({
url : '/a/login',
method : 'GET',
data : {"username": username.val(), "password": password.val()},
success : function (data) {
if (data == null) {
alert("访问接口失败!")
}
if (data.succ === -1) {
alert(data.msg);
}
if (data.succ === 1) {
alert("登陆成功!");
location.href = 'http://localhost:8080/a/index';
}
}
}
)
}
script>
<script src="js/jquery.min.js">script>
html>
登陆成功显示的主页 index.html,只是作为一个展示页,要通过/index接口才能重定向到这个页面,重定向之前要获取session查看是否登陆
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>这是首页title>
head>
<body>
<h1> Hello Spring MVC!h1>
body>
html>
/login 登陆处理的接口,返回 status (响应状态码)、succ(登陆状态码)、msg(响应的信息),同时对username、password进行校验以及匹配,如果匹配成功 设置session
@GetMapping("/login")
@ResponseBody
public Object getLogin(HttpServletRequest request,String username,String password){
System.out.println("进入接口!");
HttpSession session = request.getSession(true);
String msg="";
int status=200; // 响应码 如果为200说明访问后端接口成功
int succ=-1; // 登陆状态码 ,如果为-1说明登陆失败
HashMap<String ,Object> map = new HashMap<>();
if(username!=null && password!=null && username.equals("admin") && password.equals("admin")){
System.out.println("执行了用户名密码匹配的判断!");
succ=1;
msg="登陆成功!";
User user = new User();
user.setUsername(username);
user.setPassword(password);
session.setAttribute("user",user);
}else{
msg="用户名或者密码错误";
}
map.put("status",status);
map.put("succ",succ);
map.put("msg",msg);
return map;
}
如果登陆正常,前端接收到data.success==1,那么跳转到 /index 接口,判断session是否存在,如果存在那么重定向到 首页、如果不存在 重定向到 login 登录页
@RequestMapping("/index")
public String index(@SessionAttribute(value = "user",required=false) User user){
if(user==null){
// 说明未登录状态
return "redirect:/static/login.html";
}else{
return "redirect:/static/index.html";
}
}
效果演示:
进入登陆界面
前端的非空提示:未输入用户名
未输入密码
用户名和密码都输入了,匹配是否成功
匹配成功,进入/index,经过session校验后进入 首页
如果没有登陆,获取不到session,直接点击主页,是会重定向到 登陆界面的。