ajax 跨域请求api_java跨域请求的三种方法

ajax 跨域请求api_java跨域请求的三种方法让ajax请求访问servlet,可以让ajax请求跨域,通过直接本应用中的资源servlet,ajax可以不跨域访问本应用中的servlet,让java程序发送Get,Post请求,来访问2号服务器中的的servlet。ProxyServlet发送get请求,访问b站点TargerServlet,请求响应回来数据在进行响应。首先把架包导入创建lib目录,复制进去选中右键Addaslibrary。(2)ajax跨域解决方案之代理机制的代码实现。引入架包httpclient架包。…

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

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


目录:

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

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


 

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

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

ajax 跨域请求api_java跨域请求的三种方法

ajax 跨域请求api_java跨域请求的三种方法 

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

ajax 跨域请求api_java跨域请求的三种方法

首先把架包导入:创建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 跨域请求api_java跨域请求的三种方法

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

b站点创建Servlet:

ajax 跨域请求api_java跨域请求的三种方法

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 跨域请求api_java跨域请求的三种方法

引入架包:httpclient架包

ajax 跨域请求api_java跨域请求的三种方法 

 ajax 跨域请求api_java跨域请求的三种方法

 

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请求:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用代理机制完成ajax跨域访问</title>
</head>
<body>
<script type="text/javascript">
    // ES6当中的有一个新语法:箭头函数。
    window.onload = () => {
        document.getElementById("btn").onclick = () => {
            // 发送ajax请求
            // 1.创建核心对象
            const xmlHttpRequest = new XMLHttpRequest(); // const可以声明变量。(可以自己研究一下:var let const声明变量时有什么区别)
            // 2.注册回调函数
            xmlHttpRequest.onreadystatechange = () => {
                if (xmlHttpRequest.readyState == 4) {
                    // 这里也可以使用区间的方式,因为状态码是200~299都是正常响应结束。
                    if (xmlHttpRequest.status >= 200 && xmlHttpRequest.status < 300) {
                        document.getElementById("mydiv").innerHTML = xmlHttpRequest.responseText
                    }
                }
            }
            // 3.开启通道
            xmlHttpRequest.open("GET", "/a/proxy", true)
            // 4.发送请求
            xmlHttpRequest.send()
        }
    }
</script>
<button id="btn">使用代理机制解决ajax跨域访问</button>
<div id="mydiv"></div>
</body>
</html>

ajax 跨域请求api_java跨域请求的三种方法

点击按钮:

 ajax 跨域请求api_java跨域请求的三种方法

 

ajax 跨域请求api_java跨域请求的三种方法

 

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

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

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


相关推荐

  • pygame的安装

    pygame的安装默认python和pip已经安装好了1、去官网下载pygame我使用的是py3.8,所以选择cp38。里面包括ios、linux和windows,注意选择64/32位。2、将pygame复制到项目所在的文件夹中,如图:3、单击选中include文件夹,按住shift键,右键点击空白处,点击:在此处打开WindowPowerShell。4、输入:pipinstallpygame-2.0.1-cp38-cp38-win_amd64.whl,加粗部分为下载的文件名。我是提前已经下好了所以会

    2022年5月23日
    54
  • dropdownlist的属性

    dropdownlist的属性DropDownList控件的使用(方法,属性)(.net学习笔记一)(2006-10-1117:57:03)转载分类:.net学习笔记从来没有写学习笔记的习惯,为了自己能坚定的把.net学好,努力吧!在.net中,DropDownList和ListBox是最常用的两个LIST控件,我的学习笔记也从这里开始吧!一、DropDownList命名空间:S…

    2022年10月17日
    2
  • 国内免费php mysql空间,[php mysql]国内有什么好的免备案免费php+mysql空间

    国内免费php mysql空间,[php mysql]国内有什么好的免备案免费php+mysql空间国内有什么好的免备案免费php+mysql空间问题补充:稳定点的,速度过得去就可以.谢谢●我一直在用”主机屋”提供的免费空间.稳定性可以运作几年了.不用备案.用了马上就知道好.百度搜索”主机屋”php+mysql实现无限级分类问题补充:php+mysql实现无限级分类●项目思路分析:一个PHP项目要用到分类,但不确定分几级,所以就想做成无限级分类。一开始想是按以前一样,数据库建4个值,如下:…

    2022年6月29日
    29
  • 需求分析之数据流图学习

    很实在的文章,原文转自http://blog.csdn.net/gashero/article/details/1230185以前眼里的软件工程,虽然重要,但是却一直不太了解其用处到底有多大。现在开始渐渐接触大工程了,才开始真正体验到软件工程的威力。没有好的需求分析,软件等于白做;没有好的系统设计,做了也要重做。在大型软件中,人的因素越来越大,远远超过技术的因素。比如,一些ERP系统的

    2022年4月15日
    57
  • phpstorm 2021.9激活码【2021最新】「建议收藏」

    (phpstorm 2021.9激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月26日
    46
  • 屏幕录制软件推荐_能录屏的软件

    屏幕录制软件推荐_能录屏的软件我们经常会遇到一些场景,需要你向别人展示一些操作或是效果——例如告诉别人某某软件的配置步骤啊、刚设计出来网站的动画效果怎么样啊、某某电影里面的一个镜头多么经典啊、打得大快人心的NBA绝杀瞬间是怎么回事

    2022年8月3日
    6

发表回复

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

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