原本使用HtppClicent类去做的跨域处理 , 但是我自己的HttpClicent工具类写的不是很完善 , 重载了三类方法:参数只有url , 参数为url+请求参数 , 参数为 url+请求参数+请求头 , 虽然我的请求参数使用Map<Strting,Object> , 但是这个Object去没有考虑传入参数为数组或者集合的情况 , 所以在今天做批量的文件上传时,应为工具类不能正常处理文件数组 ,所以使用了mvc去配置跨域 , 刚开始就想着为了开发方便,配置允许所有请求跨域,具体配置如下:
<mvc:cors>
<mapping path = "/*" />
<mvc:cors>
启动jetty没有任何报错,去页面刷新效果 , 结果ajax在执行完之后却直接执行error,不执行success,看一下控制台没有任何报错,在看一下浏览器的响应数据,数据也过来了 , 看一下后台数据库数据也更新了,就感觉懵了 ...
没有办法就在Controller中请求方法上使用了@ CrossOrigin注解 , 试了下 , 一切都正常了 ...
到这里就懵了 , @CrossOrigin注解可以,为什么配置不行,而且配置的后台是没有问题的 , 前端代码如下:
$.ajax({ type : "post", async :false, url : "http://****, data : fd, datatype: "json", contentType : false, processData : false, success : function() { window.location.href = "****" }, error:function(e) { layer.msg("数据上传失败",{time:2000,icon:2,shift:6},function(){ console.log(e); }); } })
看半天没找到错误 , 突然发现自己有点南辕北辙了,既然@CrossOrigin是正常的,那么前端代码就没有问题才对,所以问题定在了mvc中跨域的配置 , 又想到浏览器控制台的报错,同源策略拒绝了访问,虽然跨域成功了,但是这个跨域一定是有问题的,看了一眼mvc中的配置...
<mvc:cros >
<mapping path = "/*">
<mvc:cros/>
... /* 是/* ,醉了 , 这个/*是可以跨域的,但是ajax是获取不到响应头的...
改为/** , 一切正常... 特发此文纪警示:写代码是一件很认真很认真的事...