springmvc跨域
//mvc默认是text/plain;charset=ISO-8859-1
@RequestMapping(value = "/xxx", produces = "application/json;charset=UTF-8")
@ResponseBody
public xxx xxx() {return xxx;}
使用jackson:
返回java对象,springmvc会自动调用jackson,将java对象转换成json格式字符串
使用json-lib:
可以将java对象转化为json格式字符串,然后直接返回字符串
不能直接转list等集合,可以将list加到map中,再转map
JSONObject jsonObjectFromMap = JSONObject.fromObject(map);
String jsonStr = jsonObjectFromMap.toString();
跨域:
跨域要在后端增加参数String jsonpCallback,
并将jsonpCallback拼接到返回的json格式字符串中,
String jsonStr = jsonpCallback + "(" + jsonStr + ")";
页面则要设置为:
dataType: 'jsonp',
jsonp: "jsonpCallback",//jsonp的值默认为callback
jsonpCallback:"myJsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名
//jsonpCallback=myJsonpCallback将作为参数传给后端,后端获取参数jsonpCallback,并将jsonpCallback参数的值myJsonpCallback作为调用的函数名
//jsonp使用默认值callback,则jsonp和jsonpCallback都可省略
跨域原理:
1.跨域的障碍:
同源策略:基于安全的原因,浏览器使用同源策略机制,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性。
简单点说,就是浏览器限制脚本只能和同协议、同域名、同端口的脚本进行交互。
2.绕开障碍:
<script>、<img>、<iframe>等标签拥有跨域的能力,
JSONP就是利用<script>标签绕过浏览器的同源策略,
JSONP是英文JSON with Padding的缩写,是一个非正式传输协,允许服务端生成<script>标签返回给客户端。
返回的<script>标签中就是一个远程js文件,内容是调用本地的一个函数,并将要传输的数据作为该函数的参数
3.分析例子:
$.ajax({
type: "get",
url: "xxx",
dataType: "jsonp",
jsonp: "jsonpCallback",
jsonpCallback:"myJsonpCallback",
success: function(json){
alert(json);
}
});
public String findNearby(String jsonpCallback) {
String json = "{name:'xiaoming'}";
json = jsonpCallback+"("+json+")";//返回的最终字符串为"myJsonpCallback({name:'xiaoming'})"
return json;
}
//这里实际是调用myJsonpCallback函数,并将{name:'xiaoming'}作为参数
//jquery会将success函数封装成myJsonpCallback函数,实际上调用的就是success函数,而参数就是后台的json格式数据
//这样就能在success函数中处理后台传输的数据了
参考:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html
springmvc跨域的更多相关文章
- SpringMVC跨域问题排查以及源码实现
SpringMVC跨域问题排查以及源码实现 最近一次项目中,将SpringMVC版本从4.1.1升级到4.3.10,出现跨域失败的情况.关于同源策略和跨域解决方案,网上有很多资料. 项目采用的方式是通 ...
- SpringMvc跨域支持
SpringMvc跨域支持 在controller层加上注解@CrossOrigin可以实现跨域 该注解有两个参数 1,origins : 允许可访问的域列表 2,maxAge:飞行前响应的缓存持续 ...
- 关于springmvc跨域
spingMVC 3.X跨域 关于跨域问题,主要用的比较多的是cros跨域. 详细介绍请看https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Acces ...
- springmvc跨域(转)
跨域资源共享 CORS 详解 原文链接:http://www.ruanyifeng.com/blog/2016/04/cors.html 作者: 阮一峰 日期: 2016年4月12日 CORS是 ...
- SpringMvc 跨域处理
导读 由于浏览器对于JavaScript的同源策略的限制,导致A网站(Ajax请求)不能通过JS去访问B网站的数据,于是跨域问题就出现了. 跨域指的是域名.端口.协议的组合不同就是跨域. http:/ ...
- (H5)FormData+AJAX+SpringMVC跨域异步上传文件
最近都没时间整理资料了,一入职就要弄懂业务,整天被业务弄得血崩. 总结下今天弄了一个早上的跨域异步上传文件.主要用到技术有HTML5的FormData,AJAX,Spring MVC. 首先看下上传页 ...
- springmvc跨域+token验证(app后台框架搭建二)
这是app后台框架搭建的第二课,主要针对app应用是跨域的运用,讲解怎么配置跨域服务:其次讲解怎么进行token验证,通过拦截器设置token验证和把token设置到http报文中.主要有如下: ...
- springmvc跨域+token验证
1)app后台跨域设置 2)拦截器中设置http报文header中token 3)token的生成实现 ==================================== ...
- springmvc跨域问题的解决
如果只想对某个方法开启跨域设置: controller上添加注解: @CrossOrigin(maxAge = 3600) 在特定的方法上添加注解: @CrossOrigin("*" ...
随机推荐
- IOS 预览pdf,word文档的集中方式
在iPhone中可以很方便的预览文档文件,如:pdf.word等等,这篇文章将以PDF为例.介绍三种预览PDF的方式,又分别从本地pdf文档和网络上的pdf文档进行对比. 预览本地PDF文档: 1.使 ...
- HDU 1233 还是畅通工程(Kruskal)
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- mongoose学习
#mongoose的使用详解# ##1.Scheme.model和Entity## Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model : 由Schema发布生成 ...
- QTimeLine 控制动画(一步一步的往前变化,并在每次变化时都会发出一个frameChanged信号)
QTimeLine顾名思义表示一条时间线,即一个时间序列,该时间序列会按我们实现定义好的间隔一步一步的往前变化,并在每次变化时都会发出一个frameChanged()信号.所以,我们通常会使用该类来驱 ...
- centos7安装tomcat7
1.去官网下载指定的安装包http://tomcat.apache.org/download-70.cgi 2.把下载下来的安装包放在/opt下 3.使用命令解压下载的文件tar -zxvf apac ...
- Django内置分页器
分页 在Django中实现分页功能非常简单.因为Django已经内置了两个处理分类的类.分别是Paginator和Page.Paginator用来管理整个分类的一些属性,Page用来管理当前这个分页的 ...
- Python迭代对象与迭代器
一.迭代对象 1.概念 迭代对象:可以直接作用于for循环的对象统称为可迭代对象:Iterable. 2.可以直接作用于for循环的数据类型 (1)集合类数据类型,如list, tuple, dict ...
- HTML(form标签)、CSS
一.表单标签<form> 功能:表单用于向服务器传输数据,从而实现用户与Web服务器的交互. 表单能够包含input系列标签,比如文本字段.复选框.单选框.提交按钮等等. 表单还可以包含t ...
- Django的模型层(2)- 多表操作(上)
一.创建模型 例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一(on ...
- Python高级教程-Map/Reduce
Python中的map()和reduce() Python内建了map()和reduce()函数. map() map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每 ...