Ajax: Ajax Cross - Domain solution agent Mechanism Principle and Implementation

Dengfengling999 2022-07-24 00:09:09 阅读数:975

ajaxajaxcrossdomainsolution

Table des matières:

(1)ajaxPrincipes de mise en œuvre du mécanisme d'agence pour les solutions Multi - domaines

(2)ajaxMise en œuvre du Code pour le mécanisme de proxy pour les solutions Multi - domaines


 

(1)ajaxPrincipes de mise en œuvre du mécanisme d'agence pour les solutions Multi - domaines

JeanajaxDemande d'accèsservlet,Ça pourrait faireajaxDemande inter - domaines,Grâce aux ressources directement disponibles dans cette applicationservlet,ajaxVous pouvez accéder àservlet,JeanjavaProgramme envoyéGet,PostDemande,Pour visiter2Sur le serveur n°servlet

 

AvecjavaLe Code simule le comportement du navigateur,C'est comme entrer une adresse dans la barre d'adresse d'un navigateur et taper sur Entrée

Importer d'abord le paquet Rack:CréationlibTable des matières,Copier dans  Clic droit sélectionné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 {
// Utiliserjava Code à envoyer HTTP getDemande
// Adresse de destination
//String url = "https://www.baidu.com";
String url = "http://localhost:8081/b/hello";
HttpGet httpGet = new HttpGet(url);
// Définir le type "application/x-www-form-urlencoded" "application/json"
httpGet.setHeader("Content-Type", "application/x-www-form-urlencoded");
//System.out.println("AppelezURL: " + httpGet.getURI());
// httpClientInstanciation
CloseableHttpClient httpClient = HttpClients.createDefault();
// Exécuter la demande et obtenir le retour
HttpResponse response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
//System.out.println("Code d'état de retour:" + response.getStatusLine());
// Afficher les résultats
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("Données de réponse du serveur:" + responseSB);
reader.close();
httpClient.close();
}
}

 Exécution:

 (2)ajaxMise en œuvre du Code pour le mécanisme de proxy pour les solutions Multi - domaines

bCréation de siteServlet:

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 {
// Répondre à unjsonString.
response.getWriter().print("{\"username\":\"jackson\"}");
}
}

 a Besoins du site servlet, Il faut d'abord ajouter servletDépendance:

Introduire le paquet rack :httpclientRack bag

 

 

 

ProxyServlet:EnvoyergetDemande,Accès àbSite WebTargerServlet, Demande de réponse retour des données en réponse

 

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 {
// AdoptionhttpclientComponents,EnvoyerHTTP GETDemande,Accès à 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 Le site répond aux données
response.getWriter().print(responseSB);
}
}

ajax5.html:EnvoyerajaxDemande:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> Utiliser le mécanisme de l'agent pour compléter ajaxAccès inter - domaines</title>
</head>
<body>
<script type="text/javascript">
// ES6 Il y a une nouvelle syntaxe :Fonctions fléchées.
window.onload = () => {
document.getElementById("btn").onclick = () => {
// EnvoyerajaxDemande
// 1.Créer un objet central
const xmlHttpRequest = new XMLHttpRequest(); // constLes variables peuvent être déclarées.(Peut - être qu'on peut l'étudier par soi - même:var let const Quelle est la différence dans la Déclaration des variables )
// 2.Enregistrer la fonction de rappel
xmlHttpRequest.onreadystatechange = () => {
if (xmlHttpRequest.readyState == 4) {
// Vous pouvez également utiliser la méthode des intervalles ici , Parce que le Code d'état est 200~299 C'est la fin de la réponse normale .
if (xmlHttpRequest.status >= 200 && xmlHttpRequest.status < 300) {
document.getElementById("mydiv").innerHTML = xmlHttpRequest.responseText
}
}
}
// 3.Ouvrir le canal
xmlHttpRequest.open("GET", "/a/proxy", true)
// 4.Envoyer la demande
xmlHttpRequest.send()
}
}
</script>
<button id="btn"> Utiliser un mécanisme de substitution pour résoudre ajaxAccès inter - domaines</button>
<div id="mydiv"></div>
</body>
</html>

Cliquez sur le bouton:

 

 

 

Copyright:Cet article est[Dengfengling999]Établi,Veuillez apporter le lien original pour réimprimer,remercier。 https://fra.fheadline.com/2022/205/202207240008267276.html