Java + Ajax跨域解决方案整理

Java + Ajax跨域解决方案整理为什么会跨域呢?简单来说就是前端页面与后台服务没有部署在同一个服务器上。产生跨域的情况有:1.域名不同,端口也不同;2.域名相同但是端口不同;3.域名不同,端口相同。解决方案:一、JSONP方式1.只支持get方法,不支持postfang方法;使用时需修改前端和后端代码,用起来也不太方便,本文不推荐使用。二、使用springMVC架构的,使用版本4.2以上…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

为什么会跨域呢?简单来说就是前端页面与后台服务没有部署在同一个服务器上。

产生跨域的情况有:

1.域名不同,端口也不同;

2.域名相同但是端口不同;

3.域名不同,端口相同。

解决方案:

一、JSONP方式

1.只支持get方法,不支持postfang方法;

使用时需修改前端和后端代码,用起来也不太方便,本文不推荐使用。

二、使用springMVC架构的,使用版本4.2以上

可以使用@CorsOrigin注解,可以放在方法上,也可以放在类名上

三、使用filter

该方法也参考了spring跨域的实现

public class PostFilter implements Filter {

	public void destroy() {

	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {

		HttpServletResponse response = (HttpServletResponse) resp;
		response.setHeader("Access-Control-Allow-Origin",
				((HttpServletRequest) req).getHeader("Origin"));
		response.setHeader("Access-Control-Allow-Methods",
				"POST,GET,OPTIONS,DELETE");
		response.setHeader("Access-Control-Max-Age", "3600");
		response.setHeader("Access-Control-Allow-Headers",
				"Origin, X-Requested-With, Content-Type, Accept");
		response.setHeader("Access-Control-Allow-Credentials", "true");
		chain.doFilter(req, resp);

	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO 自动生成方法存根

	}

}

web.xml配置加入

        <filter>
		<filter-name>action</filter-name>
		<filter-class>com.filter.PostFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>action</filter-name>
		<url-pattern>*</url-pattern>
	</filter-mapping> 

前端ajax

	$.ajax({
		type:"post",
		url:url,
		data:jsonstr,
		dataType:"json",
        xhrFields: {
            withCredentials: true
        },
        crossDomain: true,
		success: function(msg){
		
		    },
		error:function(XMLHttpRequest, textStatus, errorThrown){
		   var readystate=XMLHttpRequest.readyState;
		    console.log('readystate:'+readystate+'textStatus:'+textStatus);
		       if(readystate==4)
			   readystate='该帐号已被他人登录';
			   else readystate='请检查网络';
			$('#label1').text(readystate);	
			$.mobile.hidePageLoadingMsg(); 
			},
		complete:function(XHR, TS){XHR = null;}
		});

以上便是我用过的方法

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/172568.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 构造哈夫曼树的算法_哈夫曼树的应用数据结构

    构造哈夫曼树的算法_哈夫曼树的应用数据结构一、什么是赫夫曼树给定n个权值作为n个叶子节点,构造一课二叉树,若该树的带权路径长度和(wpl)达到最小,称这样的二叉树为最优二叉树,也就是赫夫曼树。要理解这句话,我们需要了解几个关键词:路径:

    2022年8月16日
    3
  • VMware安装Centos7超详细过程(图文并茂)

    VMware安装Centos7超详细过程(图文并茂)

    2021年8月3日
    30
  • efishell无法开机shell_开机出现efi shell卡住不动了解决方法全集「建议收藏」

    efishell无法开机shell_开机出现efi shell卡住不动了解决方法全集「建议收藏」[文章导读]最近有很多网友问我,为什么我的电脑开机后出现efishell提示进不了系统,开机出现efishell提示时,一般是由于第一启动项设置的是efishell启动的,有的网友告诉我,我第一启动项明明设置的是硬盘启动,当然还有一种情况就是前面的启动项都无法加载,然后按启动顺序启动,然后就启动到efishell了,出现这种情况一般就是系统引导破坏或是找不到引导项了。那么怎么找到原并解决…

    2022年7月24日
    6
  • LAMP下HTTPS配置「建议收藏」

    LAMP下HTTPS配置「建议收藏」LAMP下HTTPS配置    LAMP下配置HTTPS非常简单,本文主要介绍ubuntu下apache配置https的具体步骤和流程,证书为服务器生成的本地证书,希望对大家有所帮助。证书:本地生成apache版本:Apache/2.4.7(Ubuntu)系统:Ubuntu14.04一、安装Apache$sudoapt-getinstallapache2使用此方式安装的APACHE,配置比…

    2022年6月5日
    28
  • Java程序员烂大街了吗?No or yes?

    Java程序员烂大街了吗?No or yes?Java程序员烂大街了吗?当下,越来越多的企业需要程序员,即使不是互联网公司,很普通的公司程序员也是标配。过去程序员属于稀缺岗位,而今随着技术的发展在二三线城市,甚至四线五线城市,小县城都有程序员的需求。作为一个发展越来越成熟的行业,Java程序员越来越多,自然会感觉程序员到处都是。小乐认为,虽然越来越多,也不必过分的担忧。虽然现在学Java做Java的人很多,但不难发现依旧有很多公司在招聘Java程序员。究其原因就是现在Java程序员虽然很多,但是精的很少。简单的增删该查估计一个门外汉网上找个开源

    2022年7月8日
    46
  • ORA-02287: 此处不同意序号「建议收藏」

    ORA-02287: 此处不同意序号

    2022年1月28日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号