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