搭建前后端完整结构

一、搭建后端完整结构

1. 后端结构说明

1.1 后端作用

  1. 接受前端发送的数据(接收) SpringMVC Controller
  2. 按照用户的业务需求处理数据(处理) Spring Server
  3. 将处理之后的结果按照特定的要求返回给用户(返回) SpringMVC

1.2 代码结构

在这里插入图片描述

1.3 后端测试要求

要求: 接收URL的请求地址,之后JSON数据返回

URL: http://localhost:8090/getAll

要求利用MP的方式查询数据库

1.4 编辑 UserController

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/getAll")
    public List<User> getAll(){
        return userService.getAll();
    }
}

1.5 编辑UserService/UserServiceImpl

UserService :

	public interface UserService {
	    List<User> getAll();
	}

UserServiceImpl :

@Service
public class UserServiceImpl implements UserService {
	   @Autowired
	   private UserMapper userMapper;
	
	   @Override
	   public List<User> getAll() {
	       return userMapper.selectList(null);
	   }
}

1.6 页面展示效果

在这里插入图片描述

2. 构建前端页面

2.1 编辑前端页面

需求: 前端准备一个表格,之后在表格中展现后端查询的所有数据.
知识点:

  1. html css
  2. jQuery 知识
  3. Ajax $.ajax({…})
  4. 了解JS的处理基本用法. VUE

html:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>用户列表demo</title>
	</head>
	<body>
		<table border="1px solid black" align="center" width="80%">
			<tr>
				<td colspan="4" align="center">用户列表</td>
			</tr>
			<tr align="center">
				<td>编号</td>
				<td>姓名</td>
				<td>年龄</td>
				<td>性别</td>
			</tr>
			<tr align="center">
				<td>100</td>
				<td>黑熊精</td>
				<td>3000</td>
				<td>男</td>
			</tr>
		</table>
	</body>
</html>

2.2 关于JSON结构

2.2.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.2.2 Object格式

案例:

{ "id": 100, "name":"tomcat", "age":18}

在这里插入图片描述

2.2.3 Array格式

案例:

[100, "张三", "李四"]

在这里插入图片描述

2.2.4 嵌套格式

案例:

[{
	"id":"959",
	"name":"zjy",
	"hobby":["爬山","羽毛球","乒乓球"],
	"装备":[
		{
			"name":"末世","value":"神装"
		},
		{
			"name":"电刀","value":"神装"
		},
		{
			"name":"破晓","value":"半神装"
		}
	]
}]

在这里插入图片描述

2.3 关于Ajax

2.3.1 什么是Ajax

Ajax即Asynchronous Javascript And XML(异步JavaScript和XML)在 2005年被Jesse James Garrett提出的新术语,用来描述一种使用现有技术集合的‘新’方法,包括: HTML 或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 以及最重要的XMLHttpRequest。使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。

特点:

  1. 局部刷新
  2. 异步访问
2.3.2 Ajax为什么可以异步

同步: 当用户发起请求时,如果后端服务器没有返回数据,此时用户页面无法展现,一直处于加载状态(整个页面同时刷新)

异步原因: 因为Ajax中由Ajax引擎

具体步骤:

  1. 用户将请求发送给Ajax一你请,之后JS继续向下执行
2.3.3 jQuery 下载

网址: https://jquery.com/
在这里插入图片描述

2.4 Ajax实现前后端调用

2.4.1 JS中循环写法
  1. 基础循环写法

     //JS可以将接收的JSON串动态转化为JS对象
     $.get(url,function(data){
     	//循环遍历返回值
     	for(var i=0; i<data.length;i++){
     		console.log(data[i])
     	}
     })
    
  2. in关键字

     //JS可以将接收的JSON串动态转化为JS对象
     $.get(url,function(data){
     	//循环遍历返回值
     	//in 遍历数组下标
     	for(index in data){//从0开始
     		console.log(data[index])
     	}
     })
    
  3. of关键字

     //JS可以将接收的JSON串动态转化为JS对象
     $.get(url,function(data){
     	//循环遍历返回值
     	//of 关键字 直接获取遍历对象
     	for(user of data){
     		console.log(user)
     	}
     })
    
2.4.2 模板字符串

说明: 模板字符串语法从ES5之后提供

语法: 反引号

特点:

  1. 被反引号包裹的都是字符串 可以随意换行,可以保留代码结构
  2. 可以动态的从对象中获取数据
  3. 语法: ${对象:属性}

用法:

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.4.3 Ajax获取远程数据

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>用户列表demo</title>
		<!-- 导入JS函数类库 -->
		<script src="js/jquery.min.js"></script>
		<script>
			/* 让页面加载完成之后,再次调用 */
			/* 编程方式: 函数式编程 */
			$(function(){
				/* 常见Ajax的写法:
					1. $.Ajax({})
					2. $.get()
					3. $.post()
					4. $.getISON()
				 */
				/* 语法说明: 
					$.get(url,data,function(data){},dataType)
				   参数说明:
					1. url: 请求服务器网址
					2. data: 前端向服务器传递的参数 字符串
					3. 回调函数: 请求成功之后开始回调
					4. dataType: 返回值结果的数据类型 (可以省略,自动判断)
				 */
				var url = "http://localhost:8090/getAll"
				
				/* 关于data语法: id=100, name=tom
					写法:
						1. JS对象的写法
							{id:100,name:"tom"}
						2. 字符串拼接
							id=100&name=tom
				 */
				var data = ""
				
				// JS可以将接收的JSON串转化为JS对象
				$.get(url,data,function(data){
					// 循环遍历返回值
					// 基本循环
					// for(var i = 0 ; i < data.length ; i++){
					// 	console.log(data[i])
					// }
					
					// 增强for循环,in 遍历数组下标
					// for(index in data){
					// 	console.log(data[index])
					// }
					
					// 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)
					}
				})
			})
		</script>
	</head>
	<body>
		<table id="tab1" border="1px solid black" align="center" width="80%">
			<tr>
				<td colspan="5" align="center" height="50px"><b>用户列表</b></td>
			</tr>
			<tr align="center">
				<td>编号</td>
				<td>姓名</td>
				<td>年龄</td>
				<td>性别</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:

  1. 浏览器地址: http://localhost:8090/a.html
  2. Ajax地址: http://localhost:8091/getAll 不满足: 端口号不一样

例子2:

  1. 浏览器地址: http://localhost:8090/a.html
  2. Ajax地址: http://www.baidu.com:80/getAll 不满足: 域名/端口号不一样

例子2: 前提: IP与域名正确映射 DNS

  1. 浏览器地址: http://10.1.10.8/a.html
  2. 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 注解解决跨域
  1. 注解标识

     @RestController
     @CrossOrigin    //实现跨域
     public class UserController {
         @Autowired
         private UserService userService;
     
         @RequestMapping("/getAll")
         public List<User> getAll(){
             return userService.getAll();
         }
     }
    
  2. 响应头信息
    在这里插入图片描述

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘刘刘刘刘先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值