Из -за требований проекта требуется связь между двумя системами. После некоторых исследований было решено использовать HTTP -запрос.
О сервере нечего сказать. Первоначально он используется для доступа к нему с помощью веб -страниц. Следовательно, после запуска пружинной загрузки, интерфейс уровня контроллера автоматически обнажается. Клиент может просто вызвать соответствующий URL -адрес, так что здесь в основном клиент.
Во -первых, я настраивал класс инструмента DeviceFactoryHttp для обработки HTTP -запросов. Поскольку это доступ к URL, есть две проблемы, которые необходимо решить, одна из них - URL, который запрашивает службу и параметры сервера запросов. Заголовок сообщений клиента запрашивает URL -адрес службы: запросить URL -адрес сервера, который я определяю, представляет собой те же параметры URL, что и клиент: на сервере есть два типа параметров, аналогичных следующим:
http: // localhost: 8080/switch/getallstatus? Data {"name Interface": "GetallStudentStaus"}
Один не инкапсулирован, аналогично следующему:
http: // localhost: 8080/switch/getstudentinfobyname? name = Zhangsan
Во -первых, он инкапсулируется:
1: инициализировать httpclient
Частный статический httpclient client = null; static {poolinghttpclientconnectionmanager cm = new PoolinghttpclientConnectionManager (); cm.setmaxtotal (128); cm.setdefaultmaxperroute (128); client = httpclients.custom (). setConnectionManager (cm) .build (); }Два: Получите запрошенный URL -адрес, потому что URL -адрес, определенный моим сервером, такой же, как и клиент, поэтому я напрямую использую URL -адрес запрошенного клиента
// Получить запрошенную urlpublic stringbuffer geturltorequest (httpservletrequest) {stringbuffer url = request.getRequesturl (); // Получить запрошенный URL (http: // localhost: 8080/switch/getStudentinfobyname) string [] splitArr = url.toString () splitaring (); String appName = splitarr [3]; // Имя проекта string ipreport = splitarr [2]; // Проект IP: отчет String ResultStr = url.toString (). Ryplaceall (appname, devfacconstans.facname) .replaceall (ipreport, devfacconstans.ip+":"+devfacconstans.report); вернуть New StringBuffer (ResultStr); }Получите URL -адрес разделить в соответствии с /, потому что я тестирую среду, IP -среда для производственной среды, номер порта (доменное имя), безусловно, не локально, некоторые добавят имя проекта перед ним, поэтому я заменю значение, соответствующее разделению.
Три: Соберите параметры запроса и вызовите HTTP -запрос
/*** Отправить http -запрос с помощью запроса* вызовать слой контроллера* @param request* @return*/public String sendhttptodevfac (httpservletrequest) Throws Exception {httpclient client = null; String returnResult = ""; // http: // localhost: 8080/leo/1.0/h5/login stringbuffer urlbuffer = geturltorequest (request); // вызовите второй шаг, получите URL // Получить параметры и собирайте строки dataSjson = request.getParameter ("data"); String encoderdata = urlencoder.encode (dataasjson, "utf-8"); Httpget get = new httpget (urlbuffer.append ("? Data ="). Append (encoderdata) .toString ()); // Установить HeaderSEnumeration <string> headernames = request.getheadernames (); while (gheverernames.hasmoreelements ()) {string headername = headernames.nextelement (); String heatervalue = request.getheader (headername); get.setheader (Headername, Headervalue); } client = deviceFactoryHttp.client; logger.info ("http http -запрос запуска, запрос:"+urlbuffer.tostring ()); httpresponse rep = client.execute (get); returnResult = entityutils.tostring (rep.getentity (), "utf-8"); logger.info ("http-запрос заканчивается !!"); returnResult; }Сначала получите запрошенные параметры, затем собирайте параметры за URL. Не забывайте о urlencoder.encode. Это потому, что параметры будут иметь некоторые символы. Вам нужно кодировать параметры перед добавлением URL. В противном случае будет брошено исключение. Установите заголовки: Поскольку некоторые информационные серверы вытадут из заголовка запроса, я также установил заголовок запроса клиента на запрос сервера. Запрашиваемый URL и запрошенные параметры могут быть сплачиваны и Client.Exceute (get) для выполнения запроса.
Выше приведено, что мой браузер напрямую передает запрос на запрос запроса в качестве параметра моему клиенту, поэтому я могу получить URL -адрес непосредственно из запроса. У некоторых нет запроса, поэтому мне нужно получить его из контекста запроса.
Неупаковано:
Сначала получите запрос
/*** получить запрос*@return*/public static httpservletrequest getRequest () {servletRequestattributes ra = (servletrequestattributes) requestContexTholder.getRequestattributes (); Httpservletrequest request = ra.getRequest (); запрос на возврат; }2: После запроса есть URL. Давайте анализируем параметры запроса, потому что этот параметр не инкапсулирован, поэтому все параметры запроса получаются.
/** * Нет запроса запроса, вызовите слой контроллера * @param key * @param Interfacename * @param Strings * @return * @Throws Exception */public String CenterToDeviceFacnOreQuest (String Key, String InterfacEname) Throws Exception {try {httpserveltrequest request = GetRequest ();//repse rup weep/urse ore/uteStRepErquest = GetRequest (); request request parameter uemeration <string> names = request.getParameternames (); Map <string, string> parammap = new hashmap <> (); // карта запроса transraight while (names.hasmoreelements ()) {string name = names.nextelement (); String value = (string) request.getParameter (name); parammap.put (имя, значение); } // Вызовите метод для отправки http -запроса return sendhttptodevfacnodata (parammap, request); } catch (Exception e) {e.printstackTrace (); } // end return null; } Три: отправить http -запрос
/ ** * Отправить http -запрос, [без данных] * @return */ public String sendhttptodevfacnodata (map <string, string> parammap, httpservlectrequest) throws exection {httpclient client = null; String result = ""; StringBuffer DataBuffer = getUrlToreQuest (запрос); // Получить url databuffer.append ("?"); client = deviceFactoryHttp.client; Iterator <entry <string, string >> paamit = parammap.EntrySet (). Iterator (); while (paamit.hasnext ()) {intpirt <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 (restusturl); // Установить перечисление заголовков <string> headernames = request.getheadernames (); while (gheverernames.hasmoreelements ()) {string headername = headernames.nextelement (); String heatervalue = request.getheader (headername); get.setheader (Headername, Headervalue); } Httpresponse rep = client.execute (get); logger.info ("Start Call http request, url -запрос:"+resulturl); // return result = entityutils.tostring (rep.getentity (), "utf-8"); logger.info ("http -запрос заканчивается заканчивается !!"); результат возврата; }Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.