프로젝트 요구 사항으로 인해 두 시스템 간의 통신이 필요합니다. 일부 연구 후 HTTP 요청을 사용하기로 결정했습니다.
서버에 대해 할 말이 없습니다. 원래 웹 페이지를 사용하여 액세스하는 데 사용됩니다. 따라서 스프링 부팅이 시작된 후 컨트롤러 계층 인터페이스가 자동으로 노출됩니다. 클라이언트는 해당 URL을 호출 할 수 있으므로 주로 클라이언트가 있습니다.
먼저 HTTP 요청을 처리하기 위해 도구 클래스 DeviceFactoryHTTP를 사용자 정의했습니다. URL 액세스이므로 처리 해야하는 두 가지 문제가 있습니다. 하나는 서비스를 요청하는 URL과 요청 서버의 매개 변수입니다. 클라이언트의 메시지 헤더는 서비스 URL을 요청합니다. 요청 서버 URL은 클라이언트와 동일한 URL 매개 변수입니다. 서버에는 다음과 유사한 두 가지 유형의 매개 변수가 있습니다.
http : // localhost : 8080/switch/getallstatus? data { "인터페이스 이름": "getAllStudentStaus"}
하나는 다음과 유사하게 캡슐화되지 않습니다.
http : // localhost : 8080/switch/getstudentinfobyname? name = zhangsan
먼저 캡슐화됩니다.
1 : httpclient를 초기화하십시오
개인 정적 httpclient client = null; static {poolinghttpclientConnectionManager cm = 새로운 poolinghttpclientConnectionManager (); cm.setmaxtotal (128); cm.setDefaultMaxPerroute (128); client = httpclients.custom (). setConnectionManager (cm) .build (); }2 : 내 서버에 의해 정의 된 URL이 클라이언트와 동일하므로 요청 된 클라이언트의 URL을 직접 사용하기 때문에 요청 된 URL을받습니다.
// 요청 된 urlpublic StringBuffer geturlTorequest (httpservletRequest 요청) {StringBuffer url = request.getRequestUrl (); // 요청 된 URL을 가져옵니다 (http : // localhost : 8080/switch/getStudentInfoByname [] splitARR =/"); 문자열 appName = splitArr [3]; // 프로젝트 이름 문자열 ipreport = splitAr [2]; // project IP : report String resulttr = url.tostring (). replaceall (appname, devfacconstans.facname) .replaceall (ipreport, devfacconstans.ip+":"+devfacconstans.report); 새로운 StringBuffer (resultstr)를 반환합니다. }테스트 환경, 프로덕션 환경 IP, 포트 번호 (도메인 이름)는 분명히 로컬 호스트가 아니기 때문에 URL을 /에 따라 분할하십시오. 일부는 프로젝트 이름을 추가하여 프로젝트 이름을 추가하므로 분할에 해당하는 값을 교체합니다.
3 : 요청 매개 변수를 조립하고 HTTP 요청에 전화하십시오.
/*** 요청으로 http 요청을 보내십시오* 컨트롤러 계층* @param request* @return*/public string sendhttptodevfac (httpservletrequest request)는 예외 {httpclient client = null; 문자열 returnResult = ""; // http : // localhost : 8080/leo/1.0/h5/login stringbuffer urlbuffer = geturltorequest (request); // 두 번째 단계를 호출하고 URL을 받고 매개 변수를 얻고 string datajson = request.getParameter ( "data"); String encoderData = urlencoder.encode (DataAsjson, "UTF-8"); httpget get = new httpget (urlbuffer.append ( "? data ="). Append (encoderData) .toString ()); // HEADERSENUMERATION SET <String> HeaderNames = request.getheAderNames (); while (headernames.hasmoreElements ()) {String headername = headernames.nextElement (); 문자열 headervalue = request.getheader (headername); get.setheader (Headername, Headervalue); } client = deviceFactoryHttp.client; logger.info ( "시작 호출 http 요청, 요청 URL :"+urlbuffer.toString ()); httpresponse rep = client.execute (get); returnResult = entityUtils.toString (rep.getEntity (), "utf-8"); logger.info ( "http 요청 호출 종료 !!"); return returnResult; }먼저 요청 된 매개 변수를 얻은 다음 URL 뒤에 매개 변수를 조립하십시오. urlencoder.encode를 잊지 마십시오. 매개 변수에 일부 기호가 있기 때문입니다. URL을 추가하기 전에 매개 변수를 인코딩해야합니다. 그렇지 않으면 예외가 발생합니다. 헤더 설정 : 일부 정보 서버가 요청 헤더에서 벗어나기 때문에 클라이언트의 요청 헤더를 서버의 요청으로 설정합니다. 요청 된 URL 및 요청 된 매개 변수를 스 플라이싱하고 Client.Exceute (get)를 작성하여 요청을 실행할 수 있습니다.
위의 내용은 내 브라우저가 요청 요청 요청을 클라이언트로 직접 전달하므로 요청에서 직접 URL을 가져올 수 있다는 것입니다. 일부는 요청이 없으므로 요청의 맥락에서 가져와야합니다.
포장 풀기 :
먼저 요청을 받으십시오
/*** 요청 받기*@return*/public static httpservletRequest getRequest () {servletRequestAttributes ra = (servletRequestAttributes) requestContexTholder.getRequestAttributes (); httpservletrequest 요청 = ra.getRequest (); 반환 요청; }2 : 요청이 있으면 URL이 있습니다. 이 매개 변수가 캡슐화되지 않았으므로 모든 요청 매개 변수가 얻어 지므로 요청 매개 변수를 구문 분석하겠습니다.
/** * 요청 요청이 없습니다. 컨트롤러 계층 * @param key * @param interfaceName * @param strings * @Throws Exception */public string centertodevicefacnorequest (String key, String InterfaceName) 예외 {httpservletrequest = getRequest (httPervletRequest = getRequest); reuquest 요청 매개 변수 열거 <string> names = request.getParameterNames (); Map <String, String> Parammap = New Hashmap <> (); // transTraight 요청 맵 while (names.hasmoreElements ()) {문자열 이름 = names.nextElement (); 문자열 값 = (문자열) request.getParameter (이름); Parammap.put (이름, 값); } // 메소드를 호출하여 http 요청을 보내려고합니다. return sendhttptodevfacnodata (Parammap, request); } catch (예외 e) {e.printstacktrace (); } // end return null; } 셋째 : HTTP 요청을 보내십시오
/ ** * http 요청을 보내십시오. 문자열 결과 = ""; StringBuffer DataBuffer = geturlTorequest (request); // get url databuffer.append ( "?"); 클라이언트 = DeviceFactoryHttp.Client; 반복자 <enly <string, string >> paamit = parammap.entryset (). iterator (); while (paamit.hasnext ()) {enther <string, string> entry = paamit.next (); databuffer.append (entry.getKey ()). Append ( "="). Append (Entry.GetValue ()). Append ( "&"); } string resultUrl = DataBuffer.toString (). substring (0, databuffer.toString (). lastIndexof ( "&")); // 요청 httpget get = new httpget (resultUrl); // 헤더 열거 설정 <string> headernames = request.getheaderNames (); while (headernames.hasmoreElements ()) {String headername = headernames.nextElement (); 문자열 headervalue = request.getheader (headername); get.setheader (Headername, Headervalue); } httpresponse rep = client.execute (get); logger.info ( "시작 호출 http 요청, 요청 URL :"+resultUrl); // return result = entityutils.toString (rep.getEntity (), "utf-8"); logger.info ( "HTTP 요청 호출 종료 !!"); 반환 결과; }위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.