JAVA跨域

来源:互联网 发布:java反射机制教程 编辑:程序博客网 时间:2024/06/03 16:44

在做项目的时候遇到了跨域的问题…

后端跨域,一般会修改头部信息
看了一下度娘,很多都是filter 设置”Access-Control-Allow-Origin”
然后我就写了个servlet(对方是用ajax[jsonp]调用的),代码如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {     String origin = request.getHeader("Origin");                response.setHeader("Access-Control-Allow-Origin",origin);     response.setHeader("Access-Control-Allow-Credentials","true");     //do sth     String result = "testResult";     response.getWriter().println(result); }

果然,对方可以正常调用,但是收不到我发送的数据。。。

百思不得其解之下,我寻求其它的思路,于是便修改代码,如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    //get the backcall 获取回调方法      String back = WebUtils.getHTTPRequestParameter(request, "callback");    //do sth    JSONObject json= new JSONObject();    json= (new JSONObject()).put("status", "success");    //发送数据的时候加上 回调方法 格式如: backcall(111)    response.getWriter().println(back+"("+json.toString()+")");}

附上前端代码

$.ajax({          url:"",//跨域调用的url         dataType:'jsonp',          data:'',          jsonp:'callback',          success:function(result) {              //do sth         }     });

Jsonp原理
首先在客户端注册一个callback, 然后把callback的名字传给服务器。
此时,服务器先生成 json 数据。
然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp。
最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里(动态执行回调函数)。

原创粉丝点击