Debido a los requisitos del proyecto, se requiere comunicación entre los dos sistemas. Después de algunas investigaciones, se decidió usar la solicitud HTTP.
No hay nada que decir sobre el servidor. Originalmente se usa para acceder a él usando páginas web. Por lo tanto, después de que se inicia el arranque de primavera, la interfaz de la capa del controlador se expone automáticamente. El cliente puede llamar a la URL correspondiente, por lo que aquí es principalmente el cliente.
Primero, personalicé una clase de herramientas DeviceFactoryHTTP para procesar las solicitudes HTTP. Dado que es acceso a la URL, hay dos problemas que deben manejarse, uno es la URL que solicita el servicio y los parámetros del servidor de solicitudes. El encabezado del mensaje del cliente solicita la URL de servicio: Solicitar la URL del servidor que defino son los mismos parámetros de la URL que el cliente: hay dos tipos de parámetros en el servidor que están encapsulados, similar a los siguientes:
http: // localhost: 8080/switch/getAllStatus? Data {"Nombre de la interfaz": "GetAllStudentstaus"}
Uno no está encapsulado, similar al siguiente:
http: // localhost: 8080/switch/getStudentInfobyname? name = zhangsan
Primero, está encapsulado:
1: Inicializar httpclient
client de httpclient static privado = nulo; static {PoolinghttpClientConnectionManager cm = new PoolingHttpClientConnectionManager (); cM.SetMaxToTal (128); cM.SetDefaultMaxperRoute (128); cliente = httpclients.custom (). setConnectionManager (CM) .Build (); }Dos: Obtenga la URL solicitada, porque la URL definida por mi servidor es la misma que el cliente, por lo que uso directamente la URL del cliente solicitado
// Obtenga el URLPublic StringBuffer de getUrlTorequest solicitado (httpservletRequest request) {StringBuffer url = request.getRequestUrl (); // Obtener la url solicitada (http: // localhost: 8080/switch/getStudentInfobyname) string [] Split = url.Tostring (). Split ("" ");"); String appname = splitarr [3]; // Nombre del proyecto String ipreport = Splitarr [2]; // Proyecto IP: Informe String ResultStr = URL.ToString (). ReplaceAll (AppName, DevFacConstans.FacName) .REPLACEALL (iPreport, devFacConstans.ip+":" DevfacConstans.Rreport); devolver nuevo StringBuffer (ResultsTR); }Haga que la URL se divida de acuerdo con /, porque estoy probando el entorno, el entorno de producción IP, el número de puerto (nombre de dominio) definitivamente no es local, algunos agregarán el nombre del proyecto antes, por lo que reemplazaré el valor correspondiente a la división.
Tres: ensamble los parámetros de solicitud y llame a la solicitud HTTP
/*** Enviar solicitud http con solicitud* Llame a la capa del controlador* @param Solicitud* @return*/public String sendHttPTODVFAC (httpservletRequest solicitud) lanza la excepción {httpclient client = null; Cadena returnResult = ""; // http: // localhost: 8080/leo/1.0/h5/login stringbuffer urlbuffer = getUrlTorequest (request); // llame al segundo paso, obtenga URL // obtener parámetros y ensamble string dataSjson = request.getParameter ("datos"); Cadena encoderData = urlencoder.encode (dataAsjson, "utf-8"); Httpget get = new httpget (urlbuffer.append ("? Data ="). Append (encoderData) .ToString ()); // establecer HeadersEnumeration <String> headernames = request.getheadernames (); while (headernames.hasmoreElements ()) {string headername = headernames.nextelement (); String Headervalue = request.getheader (headername); get.setheader (headername, Headervalue); } Client = DeviceFactoryHttp.client; logger.info ("Iniciar llamada http solicitud, solicitud URL:"+urlbuffer.ToString ()); httpResponse rep = client.execute (get); returnResult = entityUtils.ToString (Rep.GetEntity (), "UTF-8"); logger.info ("La llamada de solicitud http termina !!"); return returnResult; }Primero obtenga los parámetros solicitados, luego ensamble los parámetros detrás de la URL. No te olvides de urlencoder.encode. Esto se debe a que los parámetros tendrán algunos símbolos. Debe codificar los parámetros antes de agregar la URL. De lo contrario, se lanzará una excepción. Establezca encabezados: debido a que algunos servidores de información los sacarán del encabezado de solicitud, también configuro el encabezado de solicitud del cliente en la solicitud del servidor. La URL solicitada y los parámetros solicitados pueden ser empalmados y Client.ExCeute (Get) para ejecutar la solicitud.
Lo anterior es que mi navegador pasa directamente la solicitud de solicitud de solicitud como parámetro para mi cliente, para que pueda obtener la URL directamente de la solicitud. Algunos no tienen una solicitud, por lo que necesito obtenerla del contexto de la solicitud.
Desempaquetado:
Primero obtenga la solicitud
/*** Obtenga la solicitud*@return*/public static httpservletRequest getRequest () {ServLetRequestAttributes ra = (ServLetRequestatTributes) requestContextholder.getRequestatTributes (); HttpservletRequest solicitud = ra.getRequest (); solicitud de devolución; }2: Después de recibir una solicitud, hay una URL. Vamos a analizar los parámetros de solicitud, porque este parámetro no está encapsulado, por lo que se obtienen todos los parámetros de solicitud.
/** * No hay solicitud de solicitud, llame a la capa del controlador * @param clave * @param interfacename * @param strings * @return * @throws excepción */public string centerToVicefacnorequest (clave de cadena, string interfacename) lanza excepción {try {htttPservletRequest request = getRequest (); // el primer paso es obtener el contexto de la orl. Enumeración de parámetros de solicitud de reuquest <String> nombres = request.getParamTernames (); Map <string, string> parammap = new HashMap <> (); // TransTraight Solic Map while (names.hasmoreElements ()) {String name = names.nextelement (); String value = (string) request.getParameter (nombre); parammap.put (nombre, valor); } // Llame al método para enviar la solicitud HTTP Return SendHttPTODVFACNODATA (parammap, solicitud); } catch (Exception e) {E.PrintStackTrace (); } // finalizar return null; } Tres: Enviar solicitud HTTP
/ ** * Enviar solicitud http, [sin datos] * @return */ public string sendHttpToDevfacnodata (map <string, string> parammap, httpservletRequest solicitud) lanza la excepción {httpclient cliente = null; Resultado de cadena = ""; StringBuffer databuffer = getUrlTorequest (solicitud); // Obtener URL Databuffer.append ("?"); Client = DeviceFactoryHttp.client; Iterator <Entry <String, String >> paamit = parammap.entryset (). Iterator (); while (paamit.hasNext ()) {Entry <String, String> Entry = Paamit.Next (); databuffer.append (entry.getKey ()). append ("="). append (entry.getValue ()). append ("&"); } String resultUrl = Databuffer.ToString (). Substring (0, Databuffer.ToString (). LastIndexOf ("&")); // Enviar solicitud httpget get = new httpget (resultUrl); // establecer la enumeración de los encabezados <String> headernames = request.getheadernames (); while (headernames.hasmoreElements ()) {string headername = headernames.nextelement (); String Headervalue = request.getheader (headername); get.setheader (headername, Headervalue); } HttpResponse Rep = Client.execute (get); logger.info ("Inicie la solicitud de llamada http, solicitud URL:"+resultUrl); // return resultado = entityUtils.ToString (rep.getEntity (), "UTF-8"); logger.info ("HTTP SELIT Call finaliza!"); resultado de retorno; }Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.