首页 > 编程知识 正文

java跨域请求的三种方法,java跨域解决方案

时间:2023-05-04 04:33:02 阅读:33239 作者:461

如何在Java项目中解决域间问题

发布时间: 2020-11-11 16:00:40

来源:亿速云

阅读: 91

作者: Leah

如何在Java项目中解决域间问题? 很多初学者对此并不熟悉,为了解决这个难题,下面的编辑会详细说明,有这方面需求的人可以来学习,希望你能得到。

前言

我相信大家在编写前端脚本时经常会遇到将数据发送到后端的情况,但由于浏览器的限制,不同域名之间的数据无法相互访问。 那么前端如何在后端和数据之间进行交换?

出于安全原因,JavaScript不允许页面在域之间调用其他页面上的对象。 那么,什么是域间问题呢?

答:这是由于浏览器同源策略的限制,目前所有支持JavaScript的浏览器都在使用该策略。 那么什么是同源呢? 同源是指在域名相同这三个方面“相同”

协议是一样的

端口相同

为了更好地理解同源策略,让我举几个例子。 URL说明是否允许http://www.a.com/a.js的通信

http://www.a.com/b.js允许使用相同的域名

http://www.a.com/a.js

http://www.b.com/a.js域不允许

http://www.a.com:8000/a.js

http://www.a.com/b.js不允许具有相同域名的不同端口

https://www.a.com/a.js

http://www.a.com/b.js不允许具有相同域名的不同协议

在JAVA中处理域间问题通常有两种常见的解决方案:

第一种解决方法

后台代码将Header设置添加到请求的servlet中。

response.setheader (' access -控制- allow-origin ',' * ';

打印机写入器out=null;

特里

{

out=response.getWriter (;

}是}catch(ioexceptione )

{

//todo auto-generated catch块

e .打印堆栈跟踪(;

}

out.print((status ) : ) ok ) );

out.flush (;

out.close (;

header access-control-allow-origin用于检查域间请求是否可以通过W3C标准,*值表示当前页面可以在域间访问。 默认情况下不允许。

前端JS需要向servlet提出请求。 请求代码如下:

$.Ajax({

url: 'your url ',

类型: ' get or post ',

dataType:'json ',

数据: {

.

(,

success :功能(data ) {

.

}

第二种解决方法

通过jsonp在域之间请求的方法。 JSONP和JSON只有一个字的区别,但他们完全是两回事,很多人容易混淆他们。 JSON是数据交换的形式,JSONP是非正式的域间数据交换协议。

首先,前端JS如何发送请求? 代码如下。

$.Ajax({ ()

url:'your url ',

类型: ' get or post ',

Async :假,

dataType : 'jsonp ',

//服务器端用于接收callback呼叫的函数名称参数

jsonp:'callbackparam ',

//callback的功能名称

jsonp callback : ' success _ jsonp callback ',

success :功能(data ) {

控制台. log (数据;

(,

错误:功能(数据) {

控制台. log (数据;

}

);

这里的callbackparam和success_jsonpCallback可以理解为提交的data数据的键值对,可以自定义,但callbackparam必须约定后台和参数名称。 因为后台需要获取此参数中的值,即success_jsonpCallback

其次,最重要的是如何在后台获取和返回数据呢? 代码为:如下所示

打印机写入器out=null;

string callback=req.getparameter (callback param );

string JSON=callback ' { ' status ' : ' ok ' } };

特里

{

out=resp.getWriter (;

}是}catch(ioexceptione )

{

//todo auto-generated catch块

e .打印堆栈跟踪(;

}

out.print(JSON;

out.flush (;

out.close (;

首先,必须获取名为callbackparam的参数的值。 此处获取的值为“success_jsonpCallback”。 然后,在该值中添加一对小括号。 在括号中输入你应该返回的数据内容。 例如,在这里我将返回JSON对象。 当然,也可以返回其他对象。 例如,您可能只返回一个字符串类型数据。 最后一个前端JS返回的数据如下:

success _ jsonp callback ({ ' status ' : ' ok ' } )

浏览器会自动解析为json对象。 此时,只需在success回调函数中直接使用data.status即可。

看完上述内容后能帮上忙吗? 如果想了解更多相关知识,或者想阅读更多相关文章,请关注亿速云行业信息频道。 感谢您对亿速云的支持。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。