Ajax:ajax跨域解决方案代理机制原理及实现


目录:

(1)ajax跨域解决方案之代理机制实现原理

(2)ajax跨域解决方案之代理机制的代码实现


 

(1)ajax跨域解决方案之代理机制实现原理

让ajax请求访问servlet,可以让ajax请求跨域,通过直接本应用中的资源servlet,ajax可以不跨域访问本应用中的servlet,让java程序发送Get,Post请求,来访问2号服务器中的的servlet

Ajax:ajax跨域解决方案代理机制原理及实现_第1张图片

Ajax:ajax跨域解决方案代理机制原理及实现_第2张图片 

用java代码模拟浏览器的行为,就好比在浏览器地址栏输入地址敲回车一样

Ajax:ajax跨域解决方案代理机制原理及实现_第3张图片

首先把架包导入:创建lib目录,复制进去  选中右键Add as library

HttpClientSendGet:

package com.bjpowernode.httpclient;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class HttpClientSendGet {
    public static void main(String[] args) throws Exception {
        // 使用java代码去发送HTTP get请求
        // 目标地址
        //String url = "https://www.baidu.com";
        String url = "http://localhost:8081/b/hello";
        HttpGet httpGet = new HttpGet(url);

        // 设置类型 "application/x-www-form-urlencoded" "application/json"
        httpGet.setHeader("Content-Type", "application/x-www-form-urlencoded");
        //System.out.println("调用URL: " + httpGet.getURI());

        // httpClient实例化
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 执行请求并获取返回
        HttpResponse response = httpClient.execute(httpGet);
        HttpEntity entity = response.getEntity();
        //System.out.println("返回状态码:" + response.getStatusLine());

        // 显示结果
        BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
        String line = null;
        StringBuffer responseSB = new StringBuffer();
        while ((line = reader.readLine()) != null) {
            responseSB.append(line);
        }
        System.out.println("服务器响应的数据:" + responseSB);
        reader.close();

        httpClient.close();
    }
}

 运行:

Ajax:ajax跨域解决方案代理机制原理及实现_第4张图片

 (2)ajax跨域解决方案之代理机制的代码实现

b站点创建Servlet:

Ajax:ajax跨域解决方案代理机制原理及实现_第5张图片

TargetServlet:

package com.bjpowernode.b.web.servlet;


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/target")
public class TargetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 响应一个json字符串。
        response.getWriter().print("{\"username\":\"jackson\"}");
    }
}

 a站点需要servlet,首先需要加入servlet依赖:

Ajax:ajax跨域解决方案代理机制原理及实现_第6张图片

引入架包:httpclient架包

Ajax:ajax跨域解决方案代理机制原理及实现_第7张图片 

 Ajax:ajax跨域解决方案代理机制原理及实现_第8张图片

 

ProxyServlet:发送get请求,访问b站点TargerServlet,请求响应回来数据在进行响应

 

package com.bjpowernode.javaweb.servlet;


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

@WebServlet("/proxy")
public class ProxyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 通过httpclient组件,发送HTTP GET请求,访问 TargetServlet
        HttpGet httpGet = new HttpGet("http://localhost:8081/b/target");
        httpGet.setHeader("Content-Type", "application/x-www-form-urlencoded");
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpResponse resp = httpClient.execute(httpGet);
        HttpEntity entity = resp.getEntity();
        BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
        String line = null;
        StringBuffer responseSB = new StringBuffer();
        while ((line = reader.readLine()) != null) {
            responseSB.append(line);
        }
        reader.close();
        httpClient.close();
        // b站点响应回来的数据
        response.getWriter().print(responseSB);
    }
}

ajax5.html:发送ajax请求:




    
    使用代理机制完成ajax跨域访问




Ajax:ajax跨域解决方案代理机制原理及实现_第9张图片

点击按钮:

 Ajax:ajax跨域解决方案代理机制原理及实现_第10张图片

 

 

你可能感兴趣的:(Ajax总结,servlet,java,ajax)