1. 创建SpringBoot工程

2. SpringMVC
后端Servlet中处理客户端请求的核心单元
2.1方法参数列表
基本类型
----参数列表名字和表单名字相同
对象类
package com.iweb.sprintbootmybatis.bean;
import lombok.Data;
//date获取类的数据
@Data
public class User {
private String username;
private String uid;
private String password;
private Cat cat;
}
controller部分内容
@RequestMapping("/login1")
public void login1(String username,String password){
System.out.println(username + ":" + password);
}
----参数列表名字和表单名字不同
对象类
package com.iweb.sprintbootmybatis.bean;
import lombok.Data;
//date获取类的数据
@Data
public class User {
private String username;
private String uid;
private String password;
private Cat cat;
}
controller部分内容
//null和""
@RequestMapping("/login1")
public void login1(@RequestParam("username") String username1, String password){
System.out.println(username1 + ":" + password);
}
对象类型
controller部分内容
@RequestMapping("/login")
@ResponseBody
public String login(User user){
user = userService.login(user);
if(user == null){
return "登录失败";
}else{
return "登录成功";
}
}
web页面
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>系统登录</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "Microsoft YaHei", sans-serif;
}
body {
/* 渐变背景 */
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
/* 登录卡片 */
.login-box {
background: #fff;
width: 380px;
padding: 40px 35px;
border-radius: 16px;
box-shadow: 0 10px 35px rgba(0, 0, 0, 0.2);
}
.title {
text-align: center;
font-size: 26px;
color: #333;
margin-bottom: 35px;
font-weight: 600;
}
/* 输入框容器 */
.input-item {
margin-bottom: 22px;
}
.input-item input {
width: 100%;
height: 48px;
padding: 0 15px;
border: 1px solid #ddd;
border-radius: 8px;
font-size: 16px;
transition: 0.3s;
outline: none;
}
/* 聚焦效果 */
.input-item input:focus {
border-color: #667eea;
box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.2);
}
/* 登录按钮 */
.login-btn {
width: 100%;
height: 48px;
border: none;
border-radius: 8px;
background: linear-gradient(135deg, #667eea, #764ba2);
color: white;
font-size: 17px;
cursor: pointer;
transition: opacity 0.3s;
}
.login-btn:hover {
opacity: 0.9;
}
/* 底部文字 */
.tip {
margin-top: 20px;
text-align: center;
color: #888;
font-size: 14px;
}
.tip a {
color: #667eea;
text-decoration: none;
}
/* 移动端适配 */
@media (max-width: 420px) {
.login-box {
width: 92%;
padding: 30px 20px;
}
}
</style>
</head>
<body>
<form action="http://localhost:8080/user/login" method="post">
<div class="login-box">
<h2 class="title">JavaWeb 后台登录</h2>
<div class="input-item">
<input type="text" name="username" id="username" placeholder="请输入用户名">
</div>
<div class="input-item">
<input type="password" name="password" id="password" placeholder="请输入密码">
</div>
<div class="input-item">
小猫种类:<input type="text" name="cat.kind" placeholder="请输入种类"><br />
小猫价格:<input type="text" name="cat.price" placeholder="请输入价格">
</div>
<button class="login-btn" type="submit" id="loginBtn">登 录</button>
<div class="tip">
没有账号?<a href="/day03/register.html">立即注册</a>
</div>
</div>
</form>
</body>
</html>
3.Ajax
发送异步请求的技术
传统请求,从后端返回页面后会刷新整个页面,导致选先填写的数据丢失了
原理图

前端web文件
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>系统登录</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: "Microsoft YaHei", sans-serif;
}
body {
/* 渐变背景 */
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
/* 登录卡片 */
.login-box {
background: #fff;
width: 380px;
padding: 40px 35px;
border-radius: 16px;
box-shadow: 0 10px 35px rgba(0, 0, 0, 0.2);
}
.title {
text-align: center;
font-size: 26px;
color: #333;
margin-bottom: 35px;
font-weight: 600;
}
/* 输入框容器 */
.input-item {
margin-bottom: 22px;
}
.input-item input {
width: 100%;
height: 48px;
padding: 0 15px;
border: 1px solid #ddd;
border-radius: 8px;
font-size: 16px;
transition: 0.3s;
outline: none;
}
/* 聚焦效果 */
.input-item input:focus {
border-color: #667eea;
box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.2);
}
/* 登录按钮 */
.login-btn {
width: 100%;
height: 48px;
border: none;
border-radius: 8px;
background: linear-gradient(135deg, #667eea, #764ba2);
color: white;
font-size: 17px;
cursor: pointer;
transition: opacity 0.3s;
}
.login-btn:hover {
opacity: 0.9;
}
/* 底部文字 */
.tip {
margin-top: 20px;
text-align: center;
color: #888;
font-size: 14px;
}
.tip a {
color: #667eea;
text-decoration: none;
}
/* 移动端适配 */
@media (max-width: 420px) {
.login-box {
width: 92%;
padding: 30px 20px;
}
}
</style>
</head>
<body>
<div class="login-box">
<h2 class="title">JavaWeb 后台登录</h2>
<div class="input-item">
<input type="text" name="username" id="username" placeholder="请输入用户名">
</div>
<div class="input-item">
<input type="password" name="password" id="password" placeholder="请输入密码">
</div>
<button class="login-btn" type="submit" id="loginBtn">登 录</button>
<div class="tip">
没有账号?<a href="/day03/register.html">立即注册</a>
</div>
</div>
</body>
</html>
<script>
let btn = document.querySelector('#loginBtn');
let username = document.querySelector('#username');
let password = document.querySelector('#password');
btn.onclick = function(){
// 1. 创建请求对象
const xhr = new XMLHttpRequest();
// 2. 打开连接,请求方式、地址、true=异步
xhr.open('POST', 'http://localhost:8080/user/ajaxLogin', true);
// 3. 设置请求头(POST表单必须配置)
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
//4、发送数据
const data = "username="+username.value+"&password="+password.value+"";
xhr.send(data);
xhr.onreadystatechange = function(){
//200代表客户端和服务器端通信成功,并且客户端正确接收服务器返回给客户端的数据
if(xhr.status == 200 && xhr.readyState == 4){
alert(xhr.responseText);
password.value = '';
}
}
}
</script>
后端controller文件
package com.iweb.sprintbootmybatis.controller;
import com.iweb.sprintbootmybatis.bean.User;
import com.iweb.sprintbootmybatis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@CrossOrigin//专门处理客户端请求和给客户端响应结果
public class UserController {
@Autowired
private UserService userService;//这个代码相当于之前写的多态(UserService userService=new UserServiceimpl)
//一个方法对应一个请求
//@RequestMapping处理登录请求且括号里的内容不能重复,web想要请求路径,都以斜杠开头
@RequestMapping("/ajaxlogin")
@ResponseBody
public String ajaxlogin(User user){
user=userService.login(user);
if(user==null){
return "密码输入错误";
}
return "登陆成功";
}
}
4.Json
4.1前端->后端
前端页面代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./jquery-1.8.3.min.js"></script>
</head>
<body>
</body>
</html>
<script >
//axios
js对象-->字符串,js=>java 客户端->服务器端
let user={uid:2,username:'王五',password:'admin'};
let userJson=JSON.stringify(user);
$.ajax({
url:'http://localhost:8080/user/json',
type:'post',
data:userJson,
contentType: 'application/json;charset=utf-8',
});
</script>
后端代码(controller)
@RequestMapping("/json")
public void json(@RequestBody User user){
System.out.println(user);
}
4.2后端->前端
前端页面代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="./jquery-1.8.3.min.js"></script>
</head>
<body>
</body>
</html>
<script >
//axios
//java=>js 服务器端->客户端
let user={uid:2,username:'王五',password:'admin'};
let userJson=JSON.stringify(user);
$.ajax({
url:'http://localhost:8080/user/json',
type:'post',
data:userJson,
contentType: 'application/json;charset=utf-8',
dataType:'json',
success:function(tUser){
alert(tUser.uid);
alert(tUser.username);
alert(tUser.password);
}
});
</script>
后端代码
@RequestMapping("/json")
@ResponseBody //后端传入前端时需要加这个注解
public User json(@RequestBody User user){
return user;
}