Devido aos requisitos do projeto, é necessária a comunicação entre os dois sistemas. Depois de algumas pesquisas, foi decidido usar a solicitação HTTP.
Não há nada a dizer sobre o servidor. É originalmente usado para acessá -lo usando páginas da web. Portanto, após o início da bota da primavera, a interface da camada do controlador é exposta automaticamente. O cliente pode chamar o URL correspondente, então aqui está principalmente o cliente.
Primeiro, eu personalizei uma classe de ferramenta DeviceFactoryHttp para processar solicitações HTTP. Como é o acesso à URL, há dois problemas que precisam ser tratados, um é o URL que solicita o serviço e os parâmetros do servidor de solicitação. O cabeçalho da mensagem do cliente solicita o URL do serviço: solicite o URL do servidor que eu defino é o mesmo parâmetros de URL que o cliente: existem dois tipos de parâmetros no servidor que são encapsulados, semelhantes aos seguintes:
http: // localhost: 8080/switch/getallStatus? Data {"Nome da interface": "getallstudentstaus"}
Um não é encapsulado, semelhante ao seguinte:
http: // localhost: 8080/switch/getStudentinfobyname? name = zhangsan
Primeiro, é encapsulado:
1: Inicialize httpclient
cliente estático privado httpclient = null; static {poolinghttpClientConnectionManager cm = novo poolingHttpClientConnectionManager (); cm.setmaxtotal (128); cm.SetDefaultMaxPerroute (128); client = httpClients.custom (). setConnectionManager (cm) .build (); }Dois: obtenha o URL solicitado, porque o URL definido pelo meu servidor é o mesmo que o cliente, então eu uso diretamente o URL do cliente solicitado
// obtenha o urlpublic stringbuffer getUrltoreQuest (httpServletRequest request) {stringbuffer url = request.getRequesturl (); // obtém o url solicitado (http: // localhost: 8080/switch/getStudentinfobyname) string [] String appName = splitararr [3]; // nome do projeto string ipreport = splitararr [2]; // ip do projeto: relatório string Resultstr = url.toString (). ReplaceAll (AppName, devfacConstans.facname) .replaceAll (ipreports, devfacconStans.ip+":" retornar novo StringBuffer (Resultado); }Faça com que o URL divida de acordo com /, porque estou testando o ambiente, o ambiente de produção IP, o número da porta (nome do domínio) definitivamente não é localhost, alguns adicionarão o nome do projeto antes dele, para substituir o valor correspondente à divisão.
Três: monte os parâmetros de solicitação e ligue para a solicitação HTTP
/*** Envie solicitação http com solicitação* Ligue para a camada do controlador* @param request* @return*/public string sendHttptodevfac (httpServletRequest Request) lança exceção {httpclient client = null; String returnResult = ""; // http: // localhost: 8080/leo/1.0/h5/login stringbuffer urlbuffer = geturltoreQuest (request); // ligue para a segunda etapa, obtenha URL // Obtenha parâmetros e montar string dataasjson = request.getParameter ("dados"); String coderData = urlencoder.encode (Dataasjson, "UTF-8"); Httpget get = new httpget (urlbuffer.append ("? Data ="). Apênder (coderdata) .toString ()); // Definir headersenumeration <string> headernames = request.getheaderNames (); while (headernames.hasMoreElements ()) {string headername = headernames.nextElement (); String headervalue = request.getheader (Headername); get.setheader (Headername, HeadValue); } client = devicefactoryhttp.client; logger.info ("Inicie a solicitação HTTP, solicitação:"+urlbuffer.toString ()); httproponse rep = client.execute (get); returnResult = entityutils.toString (rep.getEntity (), "utf-8"); logger.info ("chamada de solicitação http termina !!"); retornar retornarResult; }Primeiro obtenha os parâmetros solicitados e depois monte os parâmetros por trás do URL. Não se esqueça do urlencoder.Encode. Isso ocorre porque os parâmetros terão alguns símbolos. Você precisa codificar os parâmetros antes de adicionar o URL. Caso contrário, uma exceção será lançada. Definir cabeçalhos: como alguns servidores de informações os retiram do cabeçalho da solicitação, também defino o cabeçalho de solicitação do cliente para a solicitação do servidor. O URL solicitado e os parâmetros solicitados podem ser emendados e client.exceute (get) para executar a solicitação.
O exposto acima é que meu navegador passa diretamente a solicitação de solicitação como um parâmetro para o meu cliente, para que eu possa obter o URL diretamente da solicitação. Alguns não têm uma solicitação, então eu preciso obtê -lo do contexto da solicitação.
Unpackaged:
Primeiro receba a solicitação
/*** Get Solicitação*@return*/public static httpServletRequest getRequest () {servletRequestAttributes ra = (servletRequestattributes) requestContextholder.getRequestAttributes (); HttpServletRequest request = ra.getRequest (); solicitação de retorno; }2: Após a solicitação, há um URL. Vamos analisar os parâmetros de solicitação, porque esse parâmetro não está encapsulado, portanto, todos os parâmetros de solicitação são obtidos.
/** * Não há solicitação de solicitação, ligue para a camada do controlador * @param key * @param interfacename * @param strings * @return * @throws Exception */public String CentertodEviceFacnoreQuest (chave de string, string interfacename) lança excepção {Try {hTTTTSTELTREQUEST = getRestest (getRequest); reuquest solicitar parâmetro enumeração <string> nomes = request.getParameterNames (); Mapa <string, string> parammap = new hashmap <> (); // mapa de solicitação transtraight while while (names.hasMoreElements ()) {string name = names.nextElement (); String value = (string) request.getParameter (nome); parammap.put (nome, valor); } // Ligue para o método para enviar solicitação http retornar sendHttptodEvfacnodata (parammap, solicitação); } catch (Exceção e) {e.printStackTrace (); } // End Return null; } Três: Envie a solicitação HTTP
/ ** * Envie a solicitação http, [sem dados] * @return */ public String sendHttpToDevfacnodata (map <string, string> parammap, httpServletRequest request) lança exceção {httpclient client = null; String result = ""; Databuffer de StringBuffer = getUrlToreQuest (request); // Get URL Databuffer.append ("?"); cliente = devicefactoryhttp.client; Iterator <entrada <string, string >> paamit = parammap.entryset (). Iterator (); while (paamit.hasNext ()) {entradas <string, string> entradas = paamit.next (); DATABUFFER.APNEND (ENTRENT.GETKEY ()). APÊNHO ("="). Append (Entry.getValue ()). Append ("&"); } String resultUl = Databuffer.toString (). Substring (0, Databuffer.toString (). LastIndexOf ("&")); // envia solicitação httpget get = new httpget (resulturl); // Definir enumeração de cabeçalhos <String> headernames = request.getheaderNames (); while (headernames.hasMoreElements ()) {string headername = headernames.nextElement (); String headervalue = request.getheader (Headername); get.setheader (Headername, HeadValue); } HttpResponse rep = client.execute (get); logger.info ("Inicie a solicitação HTTP, solicitação:"+resultUrl); // Return resultado = entityutils.toString (rep.getEntity (), "utf-8"); Logger.info ("Chamada de solicitação http termina !!"); resultado de retorno; }O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.