一般的解决跨域问题解决方法主要有:
A:利用jsonp ,(JSONP是JSON with Padding的略称。它是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。--来源百度).当然,我猜你可能没有看懂。简单来说就是在请求数据时,利用callback创建一个回调函数,然后在远程服务上调用这个函数并且将JSON 数据形式作为参数传递,完成回调。并且在html页面(前台)修改代码,也要在后台修改代码(增加callback)。这样才能完成数据交互。
(解决办法:http://www.cnblogs.com/chopper/archive/2012/03/24/2403945.html)
对于新手而言,前后台同时修改代码可能有一点点麻烦。这里主要是介绍是下面一种方法,轻松有效便捷。
B:利用过滤器(filter)和web.xml.
首先你要在filter文件夹里创建一个类:代码为:(我的类名为AjaxLogin)
public class AjaxFilter implements javax.servlet.Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletResponse httpServletResponse=(HttpServletResponse)servletResponse; httpServletResponse.setHeader("Access-Control-Allow-Origin", "*"); httpServletResponse.setHeader("Access-Control-Allow-Headers", "Authentication"); filterChain.doFilter(servletRequest,httpServletResponse); } @Override public void destroy() { } }
配置web.xml:
只要完成上面两步就ok了,你完全可以一键复制我的代码到你的文件中。
两种方法对比:
1.jsonp的方法要修改前后台代码,相比第2种方法则稍微麻烦。
2.jsonp的方法只能针对某一个ajax请求,第2种方法是针对所有的ajax的请求。配置一次,就无须配置第2次。
3.jsonp的方法在某些方面来说较为第二种方法安全,但也安全不了哪里去。