ajax 跨域请求+spring mvc篇

  有时候前后台做数据交互,会遇到烦人的跨域请求问题,如果你还是一枚编程小白来说,无疑来说是很痛苦的事。当然网上也肯定会有一些解决方法。但自身实力有限,不一定会看的懂,能把问题解决了。
  一般的解决跨域问题解决方法主要有:

   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的方法在某些方面来说较为第二种方法安全,但也安全不了哪里去。



你可能感兴趣的:(spring,ajax,mvc,spring,mvc,web)