Aufgrund der Projektanforderungen ist die Kommunikation zwischen den beiden Systemen erforderlich. Nach einigen Nachforschungen wurde beschlossen, die HTTP -Anfrage zu verwenden.
Über den Server gibt es nichts zu sagen. Es wird ursprünglich verwendet, um mit Webseiten darauf zugreifen zu können. Daher wird nach dem Start des Springstiefels die Controller -Layer -Schnittstelle automatisch freigelegt. Der Kunde kann einfach die entsprechende URL aufrufen, daher ist hier hauptsächlich der Client.
Zunächst habe ich eine Werkzeugklasse DeviceFactoryHttp zur Verarbeitung von HTTP -Anforderungen angepasst. Da es sich um einen URL -Zugriff handelt, müssen zwei Probleme behandelt werden. Eine ist die URL, die den Dienst und die Parameter des Anforderungsservers anfordert. Der Nachrichtenübergang des Clients fordert die Service -URL an: Fordern Sie die Server -URL an, die ich definiere, dieselben URL -Parameter wie der Client: Auf dem Server befinden sich zwei Arten von Parametern, ähnlich wie folgt:
http: // localhost: 8080/switch/getAllstatus? Daten {"Schnittstellenname": "getAllstudentStaus"}
Eine wird nicht eingekapselt, ähnlich wie folgt:
http: // localhost: 8080/switch/getstudentInfobyname? name = zhangsan
Erstens ist es eingekapselt:
1: Initialisieren Sie httpclient
private static httpclient client = null; static {poolinghttpclientConnectionManager cm = new PoolinghttpclientConnectionManager (); CM.SetMaxtotal (128); }Zwei: Holen Sie sich die angeforderte URL, da die von meinem Server definierte URL mit dem Client übereinstimmt. Daher verwende ich direkt die URL des angeforderten Clients
// Erhalten Sie den angeforderten urlPublic StringBuffer Geturltorequest (httpServletRequest -Anforderung) {StringBuffer url = request.getRequesturl (); // Erhalten Sie die angeforderte URL (http: // localhost: 8080/switchentinfobyname) String [] splitarr = url.toString (). String appname = splitarr [3]; // Projektname String iPreport = Splitarr [2]; // Projekt IP: Berichtsstring -resultStr = url.toString (). Ersatz (Appname, devfacconstans.facname) .ReplaceAll (IPReport, Devfacconstans.ip+":"+Devfacconstans.Report); Neue StringBuffer (resultStr) zurückgeben; }Lassen Sie die URL nach /testen, da ich die Umgebung, die Produktionsumgebung IP, die Portnummer (Domain -Name), definitiv nicht localhost.
Drei: Montieren Sie die Anforderungsparameter und rufen Sie die HTTP -Anforderung an
/*** HTTP -Anforderung mit Anfrage senden* Rufen Sie die Controller -Ebene* @param request* @return*/public String sendhtttTodevfac (httpServletRequest -Anforderung) aus Ausnahme {httpclient client = null; String returnResult = ""; // http: // localhost: 8080/leo/1.0/h5/login StringBuffer urlbuffer = Geturltorequest (Anfrage); // Rufen Sie den zweiten Schritt an, erhalten Sie URL // Parameter abrufen und String Dataasjson = Request.GetParameter ("Data"); String cccoderData = urlencoder.encode (dataasjson, "utf-8"); Httpget get = new httpget (urlbuffer.Append ("? Data ="). Append (cccoderData) .ToString ()); // Headersumeration <string> headernames = request.getheadernames () setzen; while (headernames.hasmoreElements ()) {String headername = headernames.nextElement (); String Headervalue = Request.GETHEADER (Headername); Get.Setheader (Headername, Headervalue); } client = deviceFactoryHttp.client; logger.info ("Start -Call -HTTP -Anforderung, Anfrage URL:"+urlBuffer.toString ()); returnResult = entityutils.toString (rep.getEntity (), "utf-8"); logger.info ("HTTP-Anfrage endet mit endet !!"); returnResult; }Erhalten Sie zuerst die angeforderten Parameter und montieren Sie dann die Parameter hinter der URL. Vergessen Sie nicht urlencoder.encode. Dies liegt daran, dass die Parameter einige Symbole haben. Sie müssen die Parameter codieren, bevor Sie die URL hinzufügen. Andernfalls wird eine Ausnahme geworfen. Setzen Sie Header: Da einige Informationsserver sie aus dem Anforderungsheader herausnehmen, habe ich auch den Anforderungsheader des Clients auf die Anfrage des Servers festgelegt. Die angeforderte URL und die angeforderten Parameter können gespleißt und client.excute (get) zur Ausführung der Anforderung.
Das obige oben ist, dass mein Browser die Anfrageanforderung als Parameter direkt an meinen Client weitergibt, sodass ich die URL direkt aus der Anfrage abrufen kann. Einige haben keine Anfrage, daher muss ich sie aus dem Kontext der Anfrage erhalten.
Ausgepackt:
Holen Sie sich zuerst die Anfrage
/*** Get Anfrage*@return*/public static httpServletRequest getRequest () {ServletRequestAttributes ra = (servletRequestAtributes) RequestContexTHolder.GetRequestAttributes (); HttpServletRequest request = ra.getRequest (); Rückgabeanforderung; }2: Nach Anfrage gibt es eine URL. Lassen Sie uns die Anforderungsparameter analysieren, da dieser Parameter nicht eingekapselt ist, sodass alle Anforderungsparameter erhalten werden.
/** * Es gibt keine Anforderungsanforderung. Rufen Sie die Controller -Ebene auf * @param key * @param interfacename * @param Strings * @return * @throws Exception */public String CentertodeViceFacnorequest (String Key, String interfacename) Aussagen {try {httpsertrequest the cousws the chontows the chontows the chontows the cocal-nrequest () /////. Reuquest Request Parameter Aufzählung <string> names = request.getParameternames (); Karte <String, String> parammap = new HashMap <> (); // transpraight request map while (names.hasmoreElements ()) {String name = names.nextElement (); String value = (String) request.getParameter (Name); Parammap.put (Name, Wert); } // Rufen Sie die Methode an, um die HTTP -Anfrage zu senden, die sendhttptodevfacnodata (Parammap, Anfrage) zurücksenden; } catch (Ausnahme e) {e.printstacktrace (); } // Ende return null; } Drei: HTTP -Anfrage senden
/ ** * HTTP -Anforderung senden, [ohne Daten] * @return */ public String sendhttttodevfacnodata (MAP <String, String> Parammap, httpServletRequest -Anforderung) löst die Ausnahme aus {httpclient client = null; String result = ""; StringBuffer Databuffer = Geturltorequest (Anfrage); // URL Databuffer.Append ("?"); client = deviceFactoryHttp.client; Iterator <Eintrag <String, String >> paamit = parammap.EntrySet (). Iterator (); while (paamit.hasNext ()) {Eintrag <string, string> Eintrag = paamit.next (); DataBuffer.Append (Eintrag.getKey ()). append ("="). append (Eintrag.getValue ()). append ("&"); } String resulturl = databuffer.toString (). Substring (0, Databuffer.toString (). LastIndexof ("&")); // Anfrage httpget Get = new httpget (resulturl) senden; // Header Enumeration <String> headernames = request.getheadernames () setzen; while (headernames.hasmoreElements ()) {String headername = headernames.nextElement (); String Headervalue = Request.GETHEADER (Headername); Get.Setheader (Headername, Headervalue); } HttPresponse rep = client.execute (get); logger.info ("Start -Anruf HTTP -Anfrage, URL anfordern:"+resulturl); // return result = entityutils.toString (rep.getEntity (), "utf-8"); logger.info ("HTTP -Anfrage endet endet !!"); Rückgabeergebnis; }Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.