当前位置:   article > 正文

ajax调用controller层方法 404_RPC远程调用

ajax controller层

一 系统框架的演变

1.1 传统的单体架构

1.1.1 什么是单体架构

一个归档包包含了应用所有功能的程序,我们通常称之为单体应用。也称之

为单体应用架构。这是一种比较传统的架构风格。

ce7d4f9f8956bfae91b3ca89c582dde8.png

1.1.2 单体架构优点

便于开发:只需借助 IDE 的开发,调试功能即可完成

易于测试:只需要通过单元测试或浏览器即可完成测试

易于部署:打包成单一可执行 jar 或者 war 包,完成 jar 或者 war 部署即可

2 SOA架构

2.1 什么是SOA架构

就是面向服务的架构。这里的服务可以理 解为 service 层业务服务。将系统拆

分为不同的服务单元,通过网络协议服务单元之间进行 通信。服务单元完成一

个特定功能(如:验证、支付、登录等等),通过服务单元之间的集成 组成完整的

应用程序。

SOA 架构中由两个重要的角色: 服务提供者(Provider)和服务使用者

2871964be0e8832749409be135d8be36.png

3 什么是RPC调用

RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机

程序上请求 服务,而不需要了解底层网络技术的协议。请求程序就是一个客户机,

而服务提供程序就是 一个服务器。

4 RPC的实现方式

RMI:Java 提供的基于 java 平台 RPC 远程调用技术,服务消费者和服务提供者是

java 平台。

6913b7da1f5f9857af49ba9b866648fe.png

WEBSERVICE:通过 Http 协议,请求发送 xml 和响应 xml 的 RPC 远程调用技术,最大

的特征使用 xml 进行数据交互,可以实现跨平台调用。

0692f7ee095d04dd7aaa24b2fd5df372.png

HttpClient:Http 客户端工具,Java 程序通过 HttpClient 发送 Http 协议的请求,直接

获得远程 资源。

a104ac9fd1775d5c3499f91b9a035ec5.png

二 RPC远程调用实现

1 RMI介绍

RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能

够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可

以用此方法调用的任何对象 必须实现该远程接口。

1.2 服务提供者实现

1.2.1 创建 rmi-provider

1.2.2 创建UserService接口

017818c65920214fcd81778cdfab8b9c.png

1.2.3 创建UserServiceImpl是实现类

cf037e99371ff14c7e1b02ef0e8cb4b1.png

1.2.4 发布远程服务

f770b4e423002900770c1ed4c4d12c5c.png

1.3 服务消费者实现

1.3.1 创建rmi-consumer项目

1.3.2 拷贝UserService接口

1.3.3 消费远程服务

977b6f8167a6a3cc963cc038f5813a89.png

2 WebService介绍

Web service 是一个平台独立的,低耦合的 web 的应用程序用于开发分布式的互操

作的应用 程序。Web Service 技术, 能使得运行在不同机器上的不同应用无须借助

附加的、专门的第 三方软件或硬件, 就可相互交换数据或集成。

c5151bed18bf42f63aab09193f4a116a.png

3 HttpClient介绍

HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java

应用程 序需要直接通过 HTTP 协议来访问网络资源。 HttpClient 是 Apache

Jakarta Common 下的子项目,供高效的、最新的、功能丰富的支持 HTTP 协议的

客户端编程工具包。实现了所有 HTTP 的方法支持 RestFul。

3.1 服务提供者实现

3.1.1 业务需求说明

实现:通过用户系统访问订单系统,获得某个用户的订单信息。

User-sys:服务的消费者

Order-sys:服务的提供者

User-sys 给 order-sys 的 Controller 发送 http 请求

3.1.2 创建order-sys项目

187a4034630b0fce961ed7832123b33a.png

f286e06760af0ec951ebe27bd380b1e6.png

5e8b7fd73fd6cbe4ac6e5e2ef6650b18.png

e96fb692a0e327e3930f1ddc840675a8.png

3.1.3 创建Order订单实体类

fc141a52a0bf210614e76f36d5b661dd.png

3.2 创建OrderController

84fbefbff8cac6ee1029e43bcd541038.png

3.3 配置 springmvc.xml

3.4 配置 web.xml

4 服务消费者实现

4.1 创建user-sys项目

73db202db7a9ff55e7acc5db4b520596.png

4.2 拷贝Order订单实体类

4.3 创建测试类

fac4cebc2230ff00bef92b904bffb91f.png

b8091020895594031648504a99eeffcc.png

5 RestTemplate介绍

5.1 业务需求说明

3452d6d79b7cad2b7a4590bd64aab4d9.png

5.2 创建red-sys项目

cd8aae09b5f85332ae07799a3f92d73f.png

3b9712822766705a94e0ec951227b1d4.png

e13e3ebc0abab354583a4238b8a65fc1.png

5.3 拷贝Order订单实体类

5.4 创建RedController类

9d7be66f9d99c9a026d8b89a8bc5ab21.png

e0504a1f6d08ef8e27ac86401658431f.png

5.5 配置springmvc.xml

5.6 配置web.xml

Ajax跨域

1 Ajax跨域介绍

跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成

的,是浏览器 对 JavaScript 施加的安全限制。

什么是同源策略: 所谓的同源,指的是域名、协议、端口均相等。

不同源的系统使用 ajax 发送求,会存在跨域的问题:

例如 http://www.abc.com/ 访问 .xyz Domain Names | Join Generation XYZ

域名不一致,存在跨域 http://www.abc.com/ 访问 https://www.abc.com

协议不一致,存在跨域 http://www.abc.com:80/ 访问 http://www.abc.com:81

端口不一致,存在跨域。

2 Ajax跨域问题

2.1 创建ajax-origin项目

591f389ab2b6ace44af4f79f0560efb4.png

eccbc482d5be3430f55093f84ebdd10c.png

e7a65c55da722b08e1c4c522710ac417.png

2.2 发送Ajax请求

be58ad8d926eb643d45c677addafa236.png

2.3 观察跨域问题

d8e500cce6bd1146f95ba4974b0ce9b8.png

3 ajax跨域解决方案

3.1 服务器段解决 服务端设置 response header 中 Access-Control-Allow-Origin

字段

3.2 前端 JSONP 解决 利用 script 标签,不受同源策略的限制,用户从服务请求数据,服

务器返回一个带有方法和数据 的 js 代码。

4 CORSFilter 解决跨域访问原理

4.1 修改pom文件添加 CORSFilter 依赖

<dependency>

<groupId>com.thetransactioncompany</groupId>

<artifactId>cors-filter</artifactId>

<version>2.5</version>

<scope>runtime</scope>

</dependency>

4.2 web.xml配置CORSFilter

39c3a054b2d8d688c19744cdf8c4e432.png

5 JSONP 解决跨域

5.1 原理

在 js 中,我们直接用 XMLHttpRequest 请求不同域上的数据时,是不可以的。

但是,在页面 上引入不同域上的 js 脚本文件却是可以的,jsonp 正是利用这个特

性来实现的。

例如: <script src="https://code.jquery.com/jquery-1.12.4.js"></script>

从不同域的服务器直接请求 js 代码,jsonp 就是通过获得不同域的服务器上的 js

代码(js 代码 中包含一个在本地定义的 js 函数和需要获得数据),来获得不同域

的数据。

5.2 注释 web.xml 中 CORSFilter 配置 添加 fastjson 依赖

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>1.2.47</version>

</dependency>

5.3 修改 OrderController 类

2aa07271e355f42538952874f8b9c2db.png

5.4 发送请求

bef04321a2d4083742ae5be22cf4ad7c.png
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/145773
推荐阅读
相关标签
  

闽ICP备14008679号