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中处理跨域问题,通常有以下两种常用的解决方法。

第一种解决方法

后台代码在被请求的Servlet中添加Header设置:

response.setHeader("Access-Control-Allow-Origin", "*");

PrintWriter out =null;

try

{

out = response.getWriter();

} catch (IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

out.print("{'status':'ok'}");

out.flush();

out.close();

Access-Control-Allow-Origin这个Header在W3C标准里用来检查该跨域请求是否可以被通过,如果值为*则表明当前页面可以跨域访问。默认的情况下是不允许的。

在前端JS中需要向Servlet发出请求,请求代码如下所示:

$.ajax({

url: "your url",

type:"get or post",

dataType:"json",

data:{

....

},

success:function(data){

...

}

第二种解决方法

通过jsonp跨域请求的方式。JSONP和JSON虽然只有一个字母的区别,但是他们完全就是两回事,很多人很容易把他们搞混。JSON是一种数据交换的格式,而JSONP则是一种非官方跨域数据交互协议。

首先来说一下前端JS是怎么发送请求。代码如下所示:

$.ajax({

url:"your url",

type:"get or post",

async:false,

dataType : "jsonp",

//服务端用于接收callback调用的function名的参数

jsonp:"callbackparam",

//callback的function名称

jsonpCallback:"success_jsonpCallback",

success:function(data){

console.log(data);

},

error:function(data){

console.log(data);

}

});

这里的callbackparam和success_jsonpCallback可以理解为发送的data数据的键值对,可以自定义,但是callbackparam需要和后台约定好参数名称,因为后台需要获取到这个参数里面的值(即success_jsonpCallback)。

下面,最重要的来了,后台怎么样获取和返回数据呢。代码如下所示:

PrintWriter out =null;

String callback=req.getParameter("callbackparam");

String json=callback+"({'status':'ok'})";

try

{

out = resp.getWriter();

} catch (IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

out.print(json);

out.flush();

out.close();

首先需要获取参数名为callbackparam的值,这里获取到的值就是“success_jsonpCallback”。然后将这个值加上一对小括号。小括号里放入你需要返回的数据内容,比如这里我返回一个JSON对象。当然你也可以返回其他对象,比如只返回一个字符串类型数据也可以。最后前端JS返回的数据就是这样的:

success_jsonpCallback({'status':'ok'})

浏览器会自动解析为json对象,这时候你只需要在success回调函数中直接用data.status就可以了。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

java解决跨域问题_Java项目中如何解决跨域问题相关推荐

  1. vue php axios 跨域,在vue项目中,使用axios跨域处理

    下面我就为大家分享一篇在vue项目中,使用axios跨域处理,具有很好的参考价值,希望对大家有所帮助. 跨域,一个很是让人尴尬的问题,有些人可以在后台中设置请求头,但是很多前端并不具备后台的知识,并无 ...

  2. java批量处理数据库语句_Java项目中调用bat批处理进行多用户数据库备份

    Java项目中调用bat批处理配合使用BCP进行多用户数据的备份 一.项目需求 最近项目中需要对数据库(Sql Server系列数据库)进行备份.项目中的需求不是简单的整个数据库的备份,而是根据用户来 ...

  3. java的相对路径用法_java项目中的绝对路径和相对路径用法说明

    java项目中的绝对路径和相对路径用法说明 绝对路径:不可改变的路径 本地绝对路径:增加盘符的路径(e:/test/test.html) 网络绝对路径:增加协议,IP地址,端口号的路径(http:// ...

  4. java单例模式的应用场景_java项目中单列模式适用于什么场景?

    单例(Singleton)模式 也叫单态模式,是java的23种设计模式之一.网上很多介绍,我就言简意赅点了. 一.单例模式的应用场景 1.整个程序的运行中只允许有一个类的实例: 2.需要频繁实例化然 ...

  5. java 遍历属性文件路径_Java项目中读取properties文件,以及六种获取路径的方法...

    Java读取properties文件的方法比较多,网上最多的文章是"Java读取properties文件的六种方法",但在Java应用中,最常用还是通过java.lang.Clas ...

  6. java用户登录记住密码_java项目中登陆时记住密码

    1.在登陆的时候记住密码,不知自动登陆: 2.登陆页面,填写用户名,密码,点击记住密码,下次进入登陆页面的时候,填写同样的用户名,密码自动填充(在不一次会话的情况下也就是说在不关闭浏览器的情况下): ...

  7. vue php跨域,Vue 项目中遇到的跨域问题及解决方法(后台php)

    问题描述 前端 vue 框架,后台 php,百度跨域问题后台加这段代码 header("Access-Control-Allow-Origin: *"); 加了之后报这个错: Th ...

  8. 【全栈项目上线(vue+node+mongodb)】06.nodejs服务上线(生产环境前后分离的vue项目中怎么解决跨域问题)...

    以下操作使用下面项目为案例 https://github.com/itguide/vnshop ## 启动node服务 克隆好项目后记得把依赖包安装好 npm i 使用 node 启动node服务 c ...

  9. 解决vue项目中的前端跨域问题

    什么是跨域 正常情况下,我们使用ajax请求的数据都在自己的服务器上.但在一些特定的场景中,我们需要获取到别人的服务器上的数据,也就是在自己的服务器中的ajax要请求到别人的服务器的网址,这就是跨域. ...

最新文章

  1. Could not install packages due to an EnvironmentError: [Errno 28] No space left on device
  2. 微信小程序画布圆形进度条demo
  3. W3C HTML 工作组联合主席Paul Cotton谈HTML5发展愿景
  4. GARFIELD@01-18-2005
  5. 求给定数组子数组中最接近0的和
  6. android eclipse 按钮事件,android eclipse按钮的OnClick事件 - java
  7. C#父类与子类(多态性)
  8. 虚幻4 控制台_虚幻引擎打造足球手游!实况足球新引擎测试今日开启
  9. Java技术:实现pdf和Excel的生成及数据动态插入、导出
  10. 《javaScript100例|03》自写javaScript+CSS轮显效果
  11. 利用反射对dao层进行重写
  12. java使用重复的类库,java list 去除 重复值
  13. SpringBoot :cannot be cast to org.springframework.web.accept.ContentNegotiationManager
  14. CUDA全局变量(__device__)的初始化与使用:cudaMemoryToSymbol、cudaMemoryFromSymbol、cudaGetSymbolAddress
  15. AI芯片、框架、语言与知识、量子计算……百度大脑6.0发布
  16. SqlServer命名规范
  17. 【openGL2021版】链接FBX模型库
  18. 华为MA5300配置RADIUS认证
  19. 2021-2023年个人发展规划整理
  20. 亚马逊aws认证是什么?亚马逊aws认证证书含金量怎么样?

热门文章

  1. Okumura-Hata模型损耗信道仿真
  2. 友友球捕获率_宝可梦剑盾速刷亲密度方法 无极汰那详细分析
  3. 瓦片、WMS与WMTS
  4. 简要介绍 | 计算机视觉中的开放词汇:挑战与未来
  5. Wayfair面向中国卖家开放入驻,一文带你抢跑Wayfair平台(内附福利)
  6. WPS97中的模板文件(转)
  7. Android Studio调用python读取图片(使用服务器paddlehub处理图片)
  8. 案例:宝马的软件交付离不开OpenStack Zuul
  9. 计算机顶级期刊和会议
  10. 深度学习实战(2):肺炎预测|附数据集与源码