1、搭建后端完成结构
1.1 后端结构说明
1.1.1 后端作用
- 接收前端发来的数据(接收)SpringMVC Controller
- 按照用户的需求处理数据(处理)Spring Service
- 将处理后的结果,按照特定的要求返回给用户(返回)SpringMVC Controller
1.1.2 项目结构
1.1.3 后端测试要求
要求:接收URL请求地址,之后JSON数据返回.
URL: http://localhost:8090/getAll
要求利用MP的方式查询数据库.
1.1.4 编辑UserController
//标识Controller类 交给Spring容器管理/返回JSON数据
@RestController
public class UserController
{
@Autowired
private UserService userService;
/**
* 需求: 查询全部用户信息
* URL: /getAll
* 返回值: List<User>
*/
@RequestMapping("/getAll")
public List<User> getAll()
{
return userService.getAll();
}
}
1.1.6 页面展现效果
2、前后端业务调用
2.1 前后端调用流程
构建前端网页
2.2.1 使用Hbuilder X 管理项目
2.2.2 编辑前端页面
需求: 前端准备一个表格,之后在表格中展现后端查询的所有数据.
知识点:
- HTML/CSS
- JQuery知识点
- Ajax $.ajax({…})
- 了解JS的处理基本用法. VUE
HTML页面:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>用户列表demo</title>
</head>
<body>
<table border="1px" cellpadding="0px" cellspacing="0px" align="center" width="80%">
<tr>
<td colspan="4" align="center"><h1>用户列表</h1></td>
</tr>
<tr align="center">
<td>编号</td>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
</tr>
<tr align="center">
<td>100</td>
<td>李憨憨</td>
<td>22</td>
<td>女</td>
</tr>
<h1>作用:获取后端数据 之后也页面展现</h1>
</table>
</body>
</html>
2.3 关于JSON结构
2.3.1 什么事JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。它是基于 JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集。 JSON采用完全独立于程序语言的文本格式,但是也使用了类C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
2.4 JSON格式
2.4.1 Object格式
例子:
{ "id": 100, "name":"李憨憨", "age":22}
2.4.2 Array格式
举例:
[100, "终结者", "苹果"]
2.4.3 嵌套结构
[
{
"id":100,
"name":"宝马"
},
{
"id":200,
"name":"奔驰",
"Color":[
"红色",
"蓝色",
"粉红色"
],
"配置":[
{
"name":"木质轮胎",
"level":"贵族豪华版"
},
{
"name":"泡沫轮胎",
"level":"贵族至尊版"
}
]
}
]
2.5 关于Ajax
2.5.1 Ajax介绍
Ajax即Asynchronous Javascript And XML(异步JavaScript和XML)在 2005年被Jesse James Garrett提出的新术语,用来描述一种使用现有技术集合的‘新’方法,包括: HTML 或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 以及最重要的XMLHttpRequest。 [3] 使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。
特点:
- 局部刷新
- 异步访问
2.5.2 Ajax为什么可以异步
同步:
当用户发起请求时,如果后端服务器没有返回数据,此时用户页面无法展现. 一直出于加载的状态 (整个页面同时刷新)
异步:
- 用户将请求发送给Ajax引擎. 之后JS继续向下执行.
- Ajax引擎接收用户请求之后,通过代理的方式访问后端服务器.
- 后端服务器接收请求之后,执行业务操作,最终将响应的结果返回值代理服务器(Ajax引擎)
- 引擎通过回调函数的方式返回给用户数据.
2.5.3 JQuery下载
网址:https://jquery.com/
2.6 JQuery 前后端调用
2.6.1 JS中的循环语法
- 基础循环写法
//JS可以将接收的JSON串动态转化为JS对象
$.get(url,function(data){
//循环遍历返回值
for(var i=0; i<data.length;i++){
console.log(data[i])
}
})
- in关键字
//JS可以将接收的JSON串动态转化为JS对象
$.get(url,function(data){
//循环遍历返回值
//in 遍历数组下标
for(index in data){//从0开始
console.log(data[index])
}
})
- of关键字
//JS可以将接收的JSON串动态转化为JS对象
$.get(url,function(data){
//循环遍历返回值
//of 关键字 直接获取遍历对象
for(user of data){
console.log(user)
}
})
2.6.2 模板字符串
说明: 模版字符串语法从ES5以后提供的
语法: 反引号
特点:
- 被反引号包裹的都是字符串 可以随意换行 可以保留代码结构.
- 可以动态的从对象中获取数据 语法: ${对象.属性}
用法:
for(user of data){
//获取数据信息
var tr =
`<tr align="center">
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.sex}</td>
</tr>`
//将tr标签追加到表格中
$("#tab1").append(tr)
}
2.6.3 Ajax获取远程数据
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>用户列表demo</title>
<!-- html是一种解释执行的语言 -->
<!-- 导入JS函数类库 -->
<script src="jquery-3.6.0.min.js"></script>
<script>
//让页面加载完成之后,再次调用
//编程方式: 函数式编程
$(function(){
/**
* 常见Ajax写法:
* 1.$.ajax({})
* 2.$.get() get类型
* 3.$.post()
* 4.$.getJSON()
*/
/**
* 语法说明:
* $.get(url,data,function(data){},dataType)
* 参数说明:
* 1.url: 请求服务器的网址
* 2.data: 前端向服务器传递的参数 字符串
* 3.回调函数: 请求成功之后开始回调
* 4.dataType: 返回值结果的数据类型. 可以省略自动判断
*
*/
var url = "http://localhost:8090/getAll"
/**
* 关于data语法: id=100 name="tom"
* 写法: 25上课!!!!
* 1.JS对象写法
* {id:100,name:"tom"}
* 2.字符串拼接
* id=100&name=tom
*/
//var data = "id=100&name=tom"
var data = {id:100,name:"tom"}
//JS可以将接收的JSON串动态转化为JS对象
$.get(url,function(data){
//循环遍历返回值
//of 关键字 直接获取遍历对象
for(user of data){
//获取数据信息
var tr =
`<tr align="center">
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.sex}</td>
</tr>`
//将tr标签追加到表格中
$("#tab1").append(tr)
}
})
})
/**
* 传统Ajax 功能强大
*/
$.ajax({
url: "http://localhost:8090/getAll",
type: "get",
data: {id:100,name:"tomcat"},
success: function(data){
console.log(data)
},
error: function(data){//浏览器的返回值
console.log(data)
},
async: true //默认为true 异步 false 同步调用
})
/*
1. 基本循环
for(var i=0; i<data.length;i++){
console.log(data[i])
}
2.in 关键字
for(index in data){
console.log(data[index])
}
*/
</script>
</head>
<body>
<table id="tab1" border="1px" align="center" width="80%">
<tr>
<td colspan="4" align="center"><h1>用户列表</h1></td>
</tr>
<tr align="center">
<td>编号</td>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
</tr>
<!-- <tr align="center">
<td>100</td>
<td>李憨憨</td>
<td>22</td>
<td>女</td>
</tr> -->
</table>
</body>
</html>
3、跨域
3.1 同源策略
要素1:浏览器地址: file:///D:/workspace/cgb2105/webDemo/userList.html 展现页面
要素2:Ajax请求地址: http://localhost:8090/getAll
要求: 如果浏览器的地址与Ajax请求地址如果满足 HTTP请求协议/请求的域名/端口号 要求3项必须相同则满足同源策略. 浏览器可以解析返回值,则请求正确.
3.2 同源策略举例说明
案例1:
- 浏览器地址: http://localhost:8090/a.html
- Ajax地址: http://localhost:8091/getAll 不满足:端口号不一样
案例2: - 浏览器地址: http://localhost:8090/a.html
- Ajax地址: http://www.baidu.com:80/getAll 不满足: 域名/端口号不一样
案例3:前提: IP与域名正确映射 DNS - 浏览器地址: http://10.1.10.8/a.html
- Ajax地址: http://www.baidu.com/getAll 不满足:域名不一致
3.3 跨域解决策略
3.3.1 JSONP
JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的
核心知识: 利用 <script src属性=“获取远程服务器数据”> 实现跨域访问.
3.3.2 CORS 跨域资源共享
跨域资源共享( CORS ) 是一种基于HTTP 标头的机制,它允许服务器指示浏览器应允许从其加载资源的任何其他来源(域、方案或端口)。CORS 还依赖于浏览器向托管跨域资源的服务器发出“预检”请求的机制,以检查服务器是否允许实际请求。在该预检中,浏览器发送指示 HTTP 方法的标头和将在实际请求中使用的标头。
解释:
跨域资源共享( CORS ) ,通过Http 响应头 信息标识哪些网址可以访问服务器.现在几乎所有的浏览器默认支持CORS. 在请求之前会进行"预检" 如果预检成功,则在一段时间之后无需校验(30分钟).
报错信息:
3.3.3 跨域注解
- 注解标识
- 响应头信息