Karena persyaratan proyek, komunikasi antara kedua sistem diperlukan. Setelah beberapa penelitian, diputuskan untuk menggunakan permintaan HTTP.
Tidak ada yang bisa dikatakan tentang server. Awalnya digunakan untuk mengaksesnya menggunakan halaman web. Oleh karena itu, setelah boot musim semi dimulai, antarmuka lapisan pengontrol secara otomatis diekspos. Klien hanya dapat memanggil URL yang sesuai, jadi di sini terutama klien.
Pertama, saya menyesuaikan kelas alat deviceFactoryHttp untuk memproses permintaan http. Karena itu adalah akses URL, ada dua masalah yang perlu ditangani, satu adalah URL yang meminta layanan dan parameter server permintaan. Header pesan dari klien meminta URL layanan: Minta URL Server yang saya tentukan adalah parameter URL yang sama dengan klien: Ada dua jenis parameter pada server yang dienkapsulasi, mirip dengan yang berikut:
http: // localhost: 8080/switch/getallstatus? data {"nama antarmuka": "getallstudentstaus"}
Salah satunya tidak dienkapsulasi, mirip dengan yang berikut:
http: // localhost: 8080/switch/getStudentInfobyname? name = zhangsan
Pertama, itu dienkapsulasi:
1: Inisialisasi httpClient
klien httpclient statis pribadi = null; static {poolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager (); cm.setMaxtotal (128); cm.setDefaultMaxperroute (128); klien = httpclients.custom (). setConnectionManager (cm) .build (); }Dua: Dapatkan URL yang diminta, karena URL yang ditentukan oleh server saya sama dengan klien, jadi saya langsung menggunakan URL klien yang diminta
// Dapatkan UrlPublic StringBuffer GetUrlToreQuest yang diminta (permintaan httpservletRequest) {stringBuffer url = request.getRequestur (); // Dapatkan URL yang diminta (http: // localhost: 8080/switch/getStudentinfobyname) []; String appName = splitArr [3]; // Nama proyek string iPreport = splitArr [2]; // Proyek IP: Laporkan string hasil = url.toString (). ReplaceAll (AppName, devfacconstans.facname) .replaceAll (iPreport, devfacconstans.ip+":"+). mengembalikan StringBuffer baru (hasil); }Dapatkan URL untuk dibagi menurut /, karena saya menguji lingkungan, IP lingkungan produksi, nomor port (nama domain) jelas bukan localhost, beberapa akan menambahkan nama proyek sebelumnya, jadi saya akan mengganti nilai yang sesuai dengan split.
Tiga: Merakit Parameter Permintaan dan Hubungi Permintaan HTTP
/*** Kirim permintaan http dengan permintaan* Hubungi layer controller* @param permintaan* @return*/string publik SendHttPtOdevFac (permintaan httpservletRequest) melempar pengecualian {httpclient client = null; String returnResult = ""; // http: // localhost: 8080/leo/1.0/h5/login stringbuffer urlbuffer = getUrltorequest (permintaan); // panggil langkah kedua, dapatkan url // dapatkan parameter dan kumpulkan string dataasjson = request.getParameter ("data"); String encoderData = urlencoder.encode (dataasjson, "UTF-8"); Httpget get = httpget baru (urlbuffer.append ("? Data ="). Append (encoderData) .toString ()); // atur 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 ("Mulai panggilan permintaan http, permintaan url:"+urlbuffer.toString ()); httpresponse rep = client.execute (get); returnResult = entityutils.tostring (rep.getEntity (), "UTF-8"); Logger.info ("HTTP Permintaan Panggilan berakhir !!"); return returnResult; }Pertama dapatkan parameter yang diminta, lalu kumpulkan parameter di belakang URL. Jangan lupa tentang urlencoder.encode. Ini karena parameter akan memiliki beberapa simbol. Anda perlu menyandikan parameter sebelum menambahkan URL. Kalau tidak, pengecualian akan dilemparkan. Set header: Karena beberapa server informasi akan mengeluarkannya dari header permintaan, saya juga mengatur header permintaan klien ke permintaan server. URL yang diminta dan parameter yang diminta dapat disambung dan klien. Expeute (dapatkan) untuk melaksanakan permintaan.
Di atas adalah bahwa browser saya secara langsung melewati permintaan permintaan permintaan sebagai parameter untuk klien saya, sehingga saya bisa mendapatkan URL langsung dari permintaan. Beberapa tidak memiliki permintaan, jadi saya perlu mendapatkannya dari konteks permintaan.
Tidak dikemas:
Pertama dapatkan permintaannya
/*** Dapatkan permintaan*@return*/public static httpservletRequest getRequest () {servletRequestAttributes ra = (servletRequestAttributes) requestContextholder.getRequestAttributes (); HttpservletRequest request = ra.getRequest (); permintaan pengembalian; }2: Setelah memiliki permintaan, ada URL. Mari kita purset parameter permintaan, karena parameter ini tidak dienkapsulasi, sehingga semua parameter permintaan diperoleh.
/** * Tidak ada permintaan permintaan, hubungi lapisan pengontrol * @param Key * @param Interfacename * @param string * @return * @throws Exception */public string centertodevicefacnorequest (Kunci string, getrequest get dari lemparan (coba {try {httpservleteRequest () dari contact a di atas/lemparan (coba {httpservleteRequest (getrequest = getRequest () lemparan () di atas (try {httpservleteRequest (getrequest = getrequest () lemparan () di atas/httpservlete permintaan httpservlete (getrequest = getrequest {httpservlete {httpservlete () Parameter permintaan reuquest enumeration <string> names = request.getParameternames (); Peta <String, String> parammap = hashmap baru <> (); // peta permintaan transtraight while (name.hasmoreElements ()) {string name = name.nextElement (); String value = (string) request.getParameter (name); parammap.put (nama, nilai); } // hubungi metode untuk mengirim permintaan http pengembalian sendHttptoDevfacnodata (parammap, permintaan); } catch (Exception e) {E.PrintStackTrace (); } // end return null; } Tiga: Kirim Permintaan HTTP
/ ** * Kirim permintaan http, [tanpa data] * @return */ string publik SendHttPtODevFacnodata (peta <string, string> parammap, httpservletRequest permintaan) melempar pengecualian {httpclient client = null; Hasil string = ""; StringBuffer DataBuffer = getUrlToreQuest (request); // dapatkan URL DataBuffer.append ("?"); klien = deviceFactoryHttp.client; Iterator <entry <string, string >> paamit = parammap.entryset (). Iterator (); while (paamit.hasnext ()) {entri <string, string> entri = paamit.next (); databuffer.append (entry.getKey ()). append ("="). append (entry.getValue ()). append ("&"); } String resultUrl = databuffer.toString (). Substring (0, databuffer.toString (). LastIndexof ("&")); // Kirim permintaan httpget get = httpget baru (resultUrl); // atur header enumeration <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 ("Mulai Panggilan Permintaan HTTP, Permintaan URL:"+hasilnya); // hasil return = entityutils.tostring (rep.getEntity (), "UTF-8"); Logger.info ("Panggilan Permintaan HTTP berakhir !!"); hasil pengembalian; }Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.