En raison des exigences du projet, la communication entre les deux systèmes est requise. Après quelques recherches, il a été décidé d'utiliser la demande HTTP.
Il n'y a rien à dire sur le serveur. Il est initialement utilisé pour y accéder à l'aide de pages Web. Par conséquent, après le démarrage de Spring Boot, l'interface de couche de contrôleur est automatiquement exposée. Le client peut simplement appeler l'URL correspondante, donc voici principalement le client.
Tout d'abord, j'ai personnalisé une classe d'outils devicefactoryhttp pour le traitement des demandes HTTP. Puisqu'il s'agit d'accès à l'URL, il y a deux problèmes qui doivent être traités, l'un est l'URL qui demande le service et les paramètres du serveur de demande. L'en-tête de message du client demande l'URL de service: demandez à l'URL du serveur que je définisse est les mêmes paramètres d'URL que le client: il existe deux types de paramètres sur le serveur qui sont encapsulés, similaires à ce qui suit:
http: // localhost: 8080 / switch / getallStatus? data {"nom d'interface": "getAllStudentStaus"}
L'un n'est pas encapsulé, similaire à ce qui suit:
http: // localhost: 8080 / switch / getStudentinfobyname? name = zhangsan
Tout d'abord, il est encapsulé:
1: Initialiser httpclient
client httpclient statique privé = null; statique {PooringHttpClientConnectionManager cm = new PooringHttpClientConnectionManager (); cm.SetMextotal (128); cm.SetDefaultMaxPerRoute (128); client = httpclients.custom (). setConnectionManager (cm) .build (); }Deux: Obtenez l'URL demandée, car l'URL définie par mon serveur est la même que le client, donc j'utilise directement l'URL du client demandé
// Obtenez l'urlpublic demandé StringBuffer getUrlToreQuest (requette httpservletRequest) {StringBuffer url = request.getRequestUrl (); // Obtenez l'url demandée (http: // localhost: 8080 / switch / getStudentinfoByName) String [] SplitAr = url.tostring (). String Appname = SplitArr [3]; // Nom du projet String IpReport = SplitArr [2]; // Project IP: Rapport String Resultstr = url.ToString (). RempaceALL (Appname, DevfacConstans.FacName) .ReplaceAll (ipreport, devfacconstans.ip + ":" + DevfacConstans.Report); return new StringBuffer (RUNEURSTR); }Faites en sorte que l'URL se divise en fonction de /, parce que je teste l'environnement, l'environnement de production IP, le numéro de port (nom de domaine) n'est certainement pas localhost, certains ajouteront le nom du projet avant, donc je remplacerai la valeur correspondant à Split.
Trois: assemblez les paramètres de demande et appelez la demande HTTP
/ *** Envoyer la demande http avec demande * Appelez la couche de contrôleur * @param demande * @return * / public chaîne sendhttptodevfac (httpsservletRequest request) lève l'exception {httpclient client = null; String returnResult = ""; // http: // localhost: 8080 / leo / 1.0 / h5 / ligin stringbuffer urlbuffer = getUrltorequest (request); // Appelez la deuxième étape, obtenez URL // obtenir des paramètres et assemblez la chaîne dataSjson = request.getParameter ("data"); String EncoderData = UrLencoder.Encode (DataSjson, "UTF-8"); Httpget get = new httpget (urlbuffer.append ("? Data ="). Apende (EncoderData) .toString ()); // Définissez HeaderSenumeration <string> HeaderNameS = request.geTheRernames (); while (headernames.hasmoreElements ()) {String HeaderName = HeaderNames.NextElement (); String Herevalue = request.GetHeader (Headername); get.sethEader (nom de tête, Herevalue); } client = devicefactoryhttp.client; logger.info ("Démarrer la demande http, URL de la demande:" + urlbuffer.toString ()); httpResponse rep = client.execute (get); returnResult = entityUtils.toString (rep.getEntity (), "utf-8"); logger.info ("http request Call se termine !!"); return returnResult; }Obtenez d'abord les paramètres demandés, puis assemblez les paramètres derrière l'URL. N'oubliez pas Urlencoder.Encode. En effet, les paramètres auront des symboles. Vous devez coder les paramètres avant d'ajouter l'URL. Sinon, une exception sera lancée. Définir les en-têtes: comme certains serveurs d'informations les retireront de l'en-tête de demande, j'ai également défini l'en-tête de demande du client sur la demande du serveur. L'URL demandée et les paramètres demandés peuvent être épissés et client.exceute (get) pour exécuter la demande.
Ce qui précède est que mon navigateur transmet directement la demande de demande de demande en tant que paramètre à mon client, afin que je puisse obtenir l'URL directement à partir de la demande. Certains n'ont pas de demande, je dois donc l'obtenir du contexte de la demande.
Déballaged:
Obtenez d'abord la demande
/ *** GET DEMAND * @return * / public static httpServleRequest getRequest () {servLetRequestAttributes ra = (servLetRequestAttributes) requestContexTholder.getRequestAttributes (); HttpServLetRequest request = ra.getRequest (); demande de retour; }2: Après avoir demandé, il y a une URL. Associons les paramètres de demande, car ce paramètre n'est pas encapsulé, donc tous les paramètres de demande sont obtenus.
/ ** * Il n'y a pas de demande de demande, appelez la couche de contrôleur * @param key * @param interfacename * @param Strings * @return * @throws exception * / public string CenteroDeviceFacNorequest (String Key, String InterfacEname) lance l'exception {TRY {httSservletRequest request = GetRequest (); // La première étape ci-dessus est pour obtenir le contexte / GetTred (); REUQUEST PARAMETER DEMANDE ENUMERATION <string> noms = request.getParameTernames (); Map <string, string> parammap = new hashmap <> (); // Map de demande à transformation while (noms.hasmoreElements ()) {String name = nameS.NextElement (); String Value = (String) request.getParameter (name); Parammap.put (nom, valeur); } // Appelez la méthode pour envoyer la demande http return sendhttptodevfacnodata (Parammap, demande); } catch (exception e) {e.printStackTrace (); } // fin return null; } Trois: Envoyez la demande HTTP
/ ** * Envoyer la demande http, [sans données] * @return * / public String SendhTTPTODEVFACNODATA (MAP <String, String> Parammap, httpservletRequest request) lève une exception {httpclient client = null; Résultat de chaîne = ""; StringBuffer databuffer = getUrltoreQuest (request); // get url databuffer.append ("?"); client = deviceFactoryHttp.Client; Iterator <entrée <string, string >> paamit = parammap.entryset (). Iterator (); while (paamit.hasnext ()) {entrée <string, string> entry = paamit.next (); databuffer.append (entry.getKey ()). APPEND ("="). APPEND (entrée.getValue ()). APPEND ("&"); } String resultUrl = databuffer.toString (). Substring (0, databuffer.toString (). LastIndexof ("&")); // Envoi de la demande httpget get = new httpget (resultUrl); // définir les en-têtes énumération <string> headrames = request.geTheRernames (); while (headernames.hasmoreElements ()) {String HeaderName = HeaderNames.NextElement (); String Herevalue = request.GetHeader (Headername); get.sethEader (nom de tête, Herevalue); } HttpResponse rep = client.execute (get); Logger.info ("Démarrer la demande HTTP, URL de la demande:" + resultUrl); // return result = EntityUtils.ToString (rep.GetEntity (), "utf-8"); Logger.info ("L'appel de demande HTTP se termine !!"); Résultat de retour; }Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.