不加.html是方便搜索引擎好检索
关于跨域的说明
聚合工程
访问了页面 才会访问ajax 打印json
关于跨域的说明
1.1 跨域访问测试
测试1: 同服务器测试
说明:
1.浏览器的网址信息: http://manage.jt.com/test.html
2.ajax请求的地址信息: http://manage.jt.com/test.json
发现: 请求协议名称://域名:端口号都相同时,请求可以正常进行.
测试2: 不同的服务器测试
说明:;
1.浏览器的网址信息: http://www.jt.com/test.html
2.ajax请求的地址信息: http://manage.jt.com/test.json
结论: 域名地址不相同时请求不能正常获取响应的结果.
启动两个服务器
f12
综上总结
同源策略介绍
说明:
浏览器在解析ajax时,如果发现请求的协议名称://请求的域名:请求的端口号与网址的地址都相同的时满足同源策略的规定,浏览器可以正确的解析返回值.该访问称之为同域访问.该策略叫做同源策略.
但是如果违反了同源策略中的任意一条,则叫做跨域访问.浏览器出于安全性的考虑.不予解析返回值(请求正常的被处理,但是接收不到返回值).
概括: 浏览器解析ajax时,由于请求违反了同源策略则称之为跨域请求.
概况
:浏览器解析ajax时,由于请求违反了同源策略则称之为跨域请求
例子: http://localhost:8091/xxx.html
http://manage.jt.com/xx.html 不可以通讯
因为http://manage.jt.com/xx.html 经过了nginx代理服务器
jsonp实现跨域
web-对应网址 ww.jt.com
script 的src 写的url 不受同源请求策略的影响
对应上图 调用函数的证据
自我实现
JSONP官方做法(江哥)
1.javaScript中的src属性不受同源策略的约束.可以获取远程服务器数据.
<!--该json一直保存到浏览器中等待调用,但是没有函数名称无法调用 -->
<script type="text/javascript" src="http://manage.jt.com/test.json"></script>
2.自定义回调函数 名称任意
/*定义回调函数 */
function hello(data){
alert(data.name);
}
3.将返回值结果进行特殊的格式封装 callback(JSON);
hello({"id":"1","name":"tomcat猫"})
总结
jt-web里面
jsonp只能支持get请求
不需要手动封装了
测试案例
自我实现
访问
新建测试
原先
自我是实现
报错
解释return callback+"("+json+")";
分析ajax 原理不变
后端业务的controller
全新的 分开
前后台分离
都是json
新的API调用
总结 都是www.jt.com跨域去访问manage里面的json数据
借助src去访问 共性jsonp 还有利用工具API
编辑的html时 jt-web里面的JSONP.html controller编写的时jt-manage是里面的JSONPController 去对被访问的manager进行桥接
api测试自我实现
完美实现
关于ajax请求时间毫秒数的说明
CORS跨域 是最简单的跨域 需要服务器标注就行
说明:当下的主流的浏览器默认支持cors跨域的形式,但是需要服务器添加响应的信息.否则浏览器不支持数据的获取.
拿manage里面的 test.html和test.json举例子
CORS跨域说明
例子 进小区 主人给了礼物让带走 保安检查是不是偷的 需要标识(主人的字条) 标识就等于字条
前台向后台 服务器运行才行
晚上 缺图 (over)
默认是30min
跨域测试
自我实现 CORS跨域方式
前台web服务器 到 后台manage服务器 通知服务器 开放浏览器的允许 就行
下午
京淘单点登录系统
2.1 通用页面跳转
2.1.1 业务分析
1.注册的url地址
京淘单点登录系统创建
自我实现
创建jt-sso项目
创建JT-SSO项目 JT-SSO项目说明
作用:主要为jt-web的服务器提供用户的数据的支持,但凡涉及到user的CRUD操作都应该由该系统完成.
打包方式: jar包程序
注意事项: 继承jt/ 依赖jt-common 添加插件.
端口号: 8093
<!--添加依赖-->
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>jt-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<!-- 添加插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.3.RELEASE</version>
</plugin>
</plugins>
</build>
POJO表
搭脚手架
conf
自我实现
更改好yml配置文件 和 nginx的conf配置文件
搭脚手架
完美实现
开始实现注册登录
前后端开发
分析js
校验的业务分析
自我实现
16.14 晚上 回看
自我实现
/**
* JSONP的跨域请求 特殊的格式封装…
* 需求分析:校验用户的数据是否可用.
* url: http://sso.jt.com/user/check/{param}/{type}
* 参数: param/type
* 返回值结果: SysResult对象
*/
实现效果如下
还缺dao层 查询数据库校对 已有basemapper 不用手动查
http://sso.jt.com/user/check/addxxx/1?r=0.2782759446132195&callback=jsonp1600158461341&_=1600158464802
要加callback
/**
* JSONP的跨域请求 特殊的格式封装.....
* 需求分析:校验用户的数据是否可用.
* url: http://sso.jt.com/user/check/{param}/{type}
* 参数: param/type
* 返回值结果: SysResult对象
*/
@RequestMapping("/check/{param}/{type}")
public JSONPObject chcekUser(@PathVariable String param,
@PathVariable Integer type,
String callback){
//根据信息查询数据库获取响应记录
Boolean flag = userService.checkUser(param,type);
return new JSONPObject(callback, SysResult.success(flag));
}
自我实现
处理全局处理机制的修改
自我实现
package com.jt.aop;
import com.fasterxml.jackson.databind.util.JSONPObject;
import com.jt.vo.SysResult;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import javax.servlet.http.HttpServletRequest;
@RestControllerAdvice //作用: 标识我是一个通知方法,并且只拦截Controll层的异常.并且返回JSON.
public class SysResultException {
//需要定义一个全局的方法 返回指定的报错信息.
//ExceptionHandler 配置异常的类型,当遇到了某种异常时在执行该方法.
//JSONP的异常处理应该是 callback({status:201,msg:"",data:""})
//利用Request对象动态获取callback参数.之后动态封装返回值
@ExceptionHandler(RuntimeException.class)
public Object exception(Exception e, HttpServletRequest request){
e.printStackTrace();
String callback = request.getParameter("callback");
if(!StringUtils.isEmpty(callback)){ //jsonp请求
return new JSONPObject(callback, SysResult.fail());
}
//日志记录/控制台输出. 让程序员知道哪里报错!!!
return SysResult.fail();
}
}
为了更好的让程序员知道后台出了什么错
怎么去试错
微服务框架的介绍
17.18一番话
jsonp 浏览器解析ajax xxxxxxxxxxx
入门案例
自我实现
HttpClient入门案例
导入jar包
<!--添加httpClient jar包 -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
入门案例
package com.jt.test;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.junit.jupiter.api.Test;
import java.io.IOException;
public class TestHttpClient {
/**
* 步骤:
* 1.实例化httpClient工具API
* 2.定义请求url地址 任意网络地址....
* 3.定义请求的类型 get/post/put/delete
* 4.发起请求,获取响应的结果
* 5.判断响应的状态码信息. 200 404 500 406 400....
* 6.动态解析返回值执行后续操作.
*/
@Test
public void test01(){
HttpClient httpClient = HttpClients.createDefault();
String url = "https://www.baidu.com/";
HttpGet get = new HttpGet(url);
try {
HttpResponse httpResponse = httpClient.execute(get);
//判断状态码是否正确
int statusCode = httpResponse.getStatusLine().getStatusCode();
if(statusCode == 200){
//表示请求正确
HttpEntity httpEntity = httpResponse.getEntity(); //获取服务器的全部响应信息(json/html/xml/xxxx)
String result = EntityUtils.toString(httpEntity,"UTF-8");
//获取之后可以执行业务处理......
System.out.println(result);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}