javaWeb项目跨域问题解决方案:

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1.简单的servlet项目

1.配置一个filter过滤器,过滤所有的请求,并且设置响应头

javaWeb项目跨域问题解决方案:_第1张图片

 

package Filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/*自定义拦截器 用于给每个都加上跨域的头*/
public class CORSFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //变成http的
        HttpServletResponse resp = (HttpServletResponse) response;
        // 添加参数,允许任意domain访问
        resp.setContentType("text/html;charset=UTF-8");
        //禁用缓存,确保网页信息是最新数据
        resp.setHeader("Pragma","No-cache");
        resp.setHeader("Cache-Control","no-cache");
        resp.setHeader("Access-Control-Allow-Origin", "*");
        resp.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, HEAD, DELETE, PUT");
        resp.setHeader("Access-Control-Max-Age", "3600");
        resp.setHeader("Access-Control-Allow-Headers",
                "X-Requested-With, Content-Type, Authorization, Accept, Origin, User-Agent, Content-Range, Content-Disposition, Content-Description");

        resp.setDateHeader("Expires", -10);
        chain.doFilter(request, resp);
    }
    public void init(FilterConfig filterConfig) {}


    public void destroy() {}
}

 

2.在web.xml中声明该过滤器(注意:最好放在最前面)


        cors
        Filter.CORSFilter


        cors
        /*

 

3.然后就可以直接解决跨域问题了

  2.使用springMVC下的跨域问题解决方案

1.先把整个springMVC项目搭建起来

  1.1在pom.xml中引入maven依赖




  4.0.0
  war

  smart_blog
  com.kylin
  smart_blog
  1.0-SNAPSHOT

  
    
      
        org.mortbay.jetty
        maven-jetty-plugin
        6.1.7
        
          
            
              8888
              30000
            
          
          ${project.build.directory}/${pom.artifactId}-${pom.version}
          /
        
      
      
        org.apache.maven.plugins
        maven-compiler-plugin
        
          6
          6
        
      
    
  

  
    
    
      junit
      junit
      4.12-beta-3
      test
    
    
    
      log4j
      log4j
      1.2.17
    

    
      jstl
      jstl
      1.2
    

    

    
      org.springframework
      spring-core
      4.3.18.RELEASE
    

    
      org.springframework
      spring-expression
      4.3.18.RELEASE
    

    
      org.springframework
      spring-beans
      4.3.18.RELEASE
    

    
      org.springframework
      spring-aop
      4.3.18.RELEASE
    

    
      org.springframework
      spring-context
      4.3.18.RELEASE
    
    
      org.springframework
      spring-context-support
      4.3.18.RELEASE
    

    
      org.springframework
      spring-tx
      4.3.18.RELEASE
    

    
      org.springframework
      spring-web
      4.3.18.RELEASE
    
    
      org.springframework
      spring-jdbc
      4.3.18.RELEASE
    

    
      org.springframework
      spring-webmvc
      4.3.18.RELEASE
    
    
      org.springframework
      spring-aspects
      4.3.18.RELEASE
    

    
      org.springframework
      spring-tx
      4.3.18.RELEASE
    

    
      org.springframework
      spring-test
      4.3.18.RELEASE
    
    

    
    
      javax.servlet.jsp
      javax.servlet.jsp-api
      2.2.1
      provided
    
    
    
      javax.servlet
      javax.servlet-api
      3.1.0
      provided
    

    
    
      com.google.code.gson
      gson
      2.2.4
    

  

 

  1.2编写springMVC的核心配置文件




    
    

    



    
        
        
    

 

  1.3在web.xml中进行基本配置




  
    CORSFilter
    com.kylin.Filter.CORSFilter
  

  
    CORSFilter
    /*
  

  



  
  
    springMVC
    org.springframework.web.servlet.DispatcherServlet
    
    
      contextConfigLocation
      classpath:spring/springMVC.xml
    
    
    1
  
  
  
    springMVC
    /
  

 

2.编写过滤器CORSFilter来处理跨域问题

package com.kylin.Filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/*自定义拦截器 用于给每个都加上跨域的头*/
public class CORSFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //变成http的
        HttpServletResponse resp = (HttpServletResponse) response;
        // 添加参数,允许任意domain访问
        resp.setContentType("text/html;charset=UTF-8");
        //禁用缓存,确保网页信息是最新数据
        resp.setHeader("Pragma","No-cache");
        resp.setHeader("Cache-Control","no-cache");
        resp.setHeader("Access-Control-Allow-Origin", "*");
        resp.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, HEAD, DELETE, PUT");
        resp.setHeader("Access-Control-Max-Age", "3600");
        resp.setHeader("Access-Control-Allow-Headers",
                "X-Requested-With, Content-Type, Authorization, Accept, Origin, User-Agent, Content-Range, Content-Disposition, Content-Description");

        resp.setDateHeader("Expires", -10);
        chain.doFilter(request, resp);
    }
    public void init(FilterConfig filterConfig) {}


    public void destroy() {}
}

 

3.在web.xml中声明该过滤器(注意:位置最好放在最前面)

  由于web.xml中上面已经有了,就不再重复拷贝代码

4.就能正常的解决跨域问题

下面附上项目的目录结构:

  javaWeb项目跨域问题解决方案:_第2张图片

 

附上前端vue框架的代码:

  ps:前端vue框架刚刚学,很多东西不懂~别介意

附上项目目录:

 javaWeb项目跨域问题解决方案:_第3张图片

1.在config/index.js中配置代理

javaWeb项目跨域问题解决方案:_第4张图片

2.在router/index.js中配置路由

javaWeb项目跨域问题解决方案:_第5张图片

3.在组件中使用axios来发送post请求

src/components/Login.vue






4.打开vue项目所在的目录,输入npm start命令启动项目即可

5.开心的实现前后端分离~~~~~

转载于:https://my.oschina.net/u/2331760/blog/2960965

你可能感兴趣的:(javaWeb项目跨域问题解决方案:)