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("*" ...
随机推荐
- linux的bash与sh的区别
转自:https://zhidao.baidu.com/question/305415121.html https://zhidao.baidu.com/question/176780008.html ...
- windosw启动redis
1.cmd控制台 cd C:\Program Files\Redis 2.redis-server.exe redis.windows.conf 3. ok!!
- Linux ping不通百度的解决方法
今天在学习DNS的时候遇到了一个问题,我的虚拟机能够ping通ip地址,却ping不通www.baidu.com www.qq.com等域名,先是出现了以下报错: 折腾了几个小时终于找到解决办法 1. ...
- PAT 1017 Queueing at Bank (模拟)
1017. Queueing at Bank (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Supp ...
- Powershell About File System
File System Rights Get-Acl $sharepath | select -expand access | where { !$_.IsInherited -AND $_.file ...
- _heap_alloc_base 奔溃,奔溃原因:堆被破坏
现象:程序崩溃的地方比较随机,之前没问题的代码, 可能直接奔溃,多线程下其他地方堆栈被破坏,引起崩溃的时间是不定,所以在其他地方随机性奔溃 检测方法:使用windows工具gflags.exe 开启 ...
- python pip源配置,pip配置文件存放位置
https://blog.csdn.net/u013066730/article/details/54580789/ pip源配置文件可以放置的位置: Linux/Unix: /etc/pip.con ...
- 如何重定向 stderr ?
可以使用该方法写一个轻量级日志类 #include <cstdio> int main() { FILE *stream = freopen("freopen.txt" ...
- Qt 使用 lambda 表达式做为槽函数时为什么使用 QObject::sender() 获取到的发送信号对象指针为空?
/*! Returns a pointer to the object that sent the signal, if called in a slot activated by a signal; ...
- 用java求一个整数各位数字之和
/* * 用java求一个整数各位数字之和 */ public class Test02 { public static void main(String[] args) { System.out.p ...