1.案例:一个tomcat中的项目想要访问另一个tomcat中的信息(跨域)
1.1问题:通过ajax因为安全性不允许跨域请求。
1.1.1解决方法:使用jsonp
2.在demo1中的index.jsp中调用demo2中的servlet中的信息?
2.1在index.jsp中配置:
<script type="text/javascript"
src="http://localhost:9002/js/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function() {
$("button").click(function(){
$ajax({
url:'http://localhost:9002/demo2',
type:'post',
datatype:'jsonp',
jsonpCallback:'',
jsonp:'callback',
success:function(){
alert("data");
}
});
})
})
</script>
<title>Insert title here</title>
</head>
<body>
<button>按钮</button>
</body>
2.2当index中的ajax向demo中的servlet发起请求时:发过来的参数名是:callback
demo2:
@Controller
public class DemoController {
@RequestMapping("demo3")
@ResponseBody
public MappingJacksonValue demo(String callback){
People p = new People();
p.setId(1);
p.setName("张三");
//把构造方法参数转换为json字符串并当作最终返回值函数的参数
MappingJacksonValue mjv = new MappingJacksonValue(p);
//最终返回结果中函数名
mjv.setJsonpFunction(callback);
return mjv;
}
}
这样通过jsonp就可以得到demo2中的数据,并且是json格式。
3.jsonp应用于项目中,一个项目需要在另一个项目中的数据,比如商品类别展示需要商品管理项目中的数据、供应商系统中的供应商的发布单等等都可以用到jsonp