关于tomcat7使用myeclipce 10工具的前后端跨域问题总结

使用工具:myeclipce 10,tomcat7

首先说明一下,这是一个web项目,我的跨域有一个

--->config.xml文件(如下)

<?xml version="1.0" encoding="utf-8" ?>
 <taxrates>
  <taxrate key="url">
    <value>http://127.168.0.1:8080/PriceTag/</value>
    <name>后台数据交互地址</name>
  </taxrate>
  <taxrate key="urlFile">
    <value>http://127.168.0.1:8080/PriceTag/UploadController/upload</value>
    <name>上传文件地址</name>

  </taxrate>

</taxrates>

</xml>

--->通过js的方式获取后台数据交互地址

js(如下)

<script>

//读取配置文件
function readXML(id){
    var val="";
    $.ajax({
        url: "config/config.xml",
        dataType: 'xml',
        type: 'GET',
        async:false,
        timeout: 2000,
        error: function(xml)
        {
            HJSJ.prompts("error","加载XML 文件出错!");
        },
        success: function(xml)
        {
            $(xml).find("taxrate").each(function(i)
            {
                if($(this).attr("key")==id){
                    val= $(this).children("value").text();
                }
            });
        }
    });
    return val;
}

</script>

随后就是一个简单的ajax请求了,需要注意的是,传输到后台的都是json数据,我们定义一个js数组。需要转换成JSON.stringify("parameter")类型,parameter为存放的值,后台才能接收到。我使用的是mybatis所以直接用字符串接受。

试例:

@Controller("LoginController")
@RequestMapping(LoginController.Location)
public class LoginController extends BaseController{
    public static final String Location = "/web_login";
        //登录
        @RequestMapping(value="/login",method=RequestMethod.POST)
        public @ResponseBody JsonCrudModel<String> login(@RequestBody String data,HttpServletRequest request,HttpServletResponse response) throws Exception{    
            final JsonCrudModel<String> result = new JsonCrudModel<String>();
        
            if (data==null || data.equals("")) {
                result.setCode(JsonCrudModel.Status_Parameter);
                result.setMsg("参数有误");
                return result;
            }
            try {
                //1.创建JSON解析对象(两条规则的提现:大括号用JSONObject,注意传入数据对象)-->这里解析会再封装成一个方法调用
                JSONObject jObj = new JSONObject(data);  
                //System.out.println(jObj);
                JSONObject jObj1 = jObj.getJSONObject("parameter");
                String userName = jObj1.getString("userName").trim();
                String password = jObj1.getString("password").trim();
                //String token = jObj.getString("token");
                //String machine = jObj.getString("machine");
                String pwd = PasswordUtils.encryptPassword(password,"hj2018", "!");
                //System.out.println(pwd);
                User user = userService.getLoginUser(userName, pwd);//这里是数据库验证

    }

}

以上是一个请求的流程。

现在我们没有配置,故请求是发送不过去的。

一,我们在web.xml中配置如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>    
    <!-- 中文过滤器 -->
    <filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>com.hjsj.filter.EncodingingFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
 
  <!-- 跨域请求 -->
    <filter>
        <filter-name>CorsFilter</filter-name>
        <filter-class>com.cn.filter.CorsFilter</filter-class>------->这里是我自己项目过滤器的位置
    </filter>
    <filter-mapping>
        <filter-name>CorsFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

   <!--  springmvc -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
      
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

</web-app>

二,com.an.filter包下CorsFilter

import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
 
/**
 * TODO:
 *
 * @author: jonath
 * @date: 17-3-2
 */
public class CorsFilter implements Filter {
 
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
 
    }
 
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
        httpResponse.addHeader("Access-Control-Allow-Origin", "*");
        httpResponse.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        httpResponse.setHeader("Access-Control-Allow-Methods", "GET, PUT, DELETE, POST");
        filterChain.doFilter(servletRequest, servletResponse);
    }
 
    @Override
    public void destroy() {
 
    }
}

三,跨域所需要的jar包

cors-filter-1.7.1-sources.jar

cors-filter-2.5.jar

java-property-utils-1.9.1-sources.jar

junit-4.10-sources.jar

servlet-api-2.5-sources.jar

这里我用jar包名称,方便记忆。


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页