プロジェクトの要件のため、2つのシステム間の通信が必要です。いくつかの調査の後、HTTPリクエストを使用することが決定されました。
サーバーについて何も言うことはありません。もともとは、Webページを使用してアクセスするために使用されます。したがって、スプリングブートが開始された後、コントローラーレイヤーインターフェイスが自動的に公開されます。クライアントは対応するURLを呼び出すだけであるため、主にクライアントがあります。
まず、HTTPリクエストを処理するためのツールクラスDeviceFactoryHTTPをカスタマイズしました。 URLアクセスであるため、処理する必要がある2つの問題があります。1つは、リクエストサーバーのサービスとパラメーターを要求するURLです。クライアントのメッセージヘッダーは、サービスURLを要求します:私が定義するサーバーURLを要求することは、クライアントと同じURLパラメーターです。次のように、カプセル化されたサーバーに2つのタイプのパラメーターがあります。
http:// localhost:8080/switch/getallstatus?data {"interface name": "getallstudentstaus"}
次のように、1つはカプセル化されていません。
http:// localhost:8080/switch/getstudentinfobyname?name = Zhangsan
まず、カプセル化されています:
1:httpclientを初期化します
private static httpclientクライアント= null; static {poolinghttpclientConnectionManager cm = new PoolingHttpClientConnectionManager(); cm.setmaxtotal(128); cm.setDefaultMaxperroute(128); client = httpclients.custom()。setConnectionManager(cm).build(); }2:私のサーバーによって定義されたURLがクライアントと同じであるため、要求されたURLを取得するので、要求されたクライアントのURLを直接使用します
//要求されたurlpublic stringbuffer geturltorequest(httpservletrequest request){stringbuffer url = request.getRequesturl(); //要求されたurl(http:// get relocehost:8080/switch/getstudentinfobyname)string [] spitl = url.tr. string appname = splitArr [3]; //プロジェクト名String ipreport = splitArr [2]; // Project IP:Report string resultStr = url.toString()。新しいstringbuffer(resultStr)を返します。 }/に従ってURLを分割します。環境をテストしているため、生産環境IP、ポート番号(ドメイン名)は間違いなくローカルホストではありません。プロジェクト名を前に追加する場合があるため、分割に対応する値を置き換えます。
3:リクエストパラメーターを組み立てて、HTTPリクエストを呼び出します
/***リクエストでhttp要求を送信*コントローラーレイヤーを呼び出す* @param request* @return*/public string sendhttptodevfac(httpservletrequest request)スロー{httpclient client = null; string returnResult = ""; // http:// localhost:8080/leo/1.0/h5/login stringbuffer urlbuffer = geturltorequest(request); // 2番目のステップを呼び出し、url // get url//getパラメーターを取得し、文字列datasjson = request.getParameter( "data"); string encoderdata = urlencoder.encode(datasjson、 "utf-8"); httpget get = new httpget(urlbuffer.append( "?data =")。append(encoderdata).toString()); // 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( "call http request、"+urlbuffer.tostring()); httpresponse rep = client.execute(get); returnResult = entityUtils.toString(rep.getEntity()、 "utf-8"); logger.info( "http request call end !!"); returnResult; }最初に要求されたパラメーターを取得し、次にURLの背後にあるパラメーターを組み立てます。 urlencoder.encodeを忘れないでください。これは、パラメーターにいくつかのシンボルがあるためです。 URLを追加する前に、パラメーターをエンコードする必要があります。それ以外の場合、例外がスローされます。セットヘッダー:一部の情報サーバーはリクエストヘッダーからそれらを取り除くため、クライアントのリクエストヘッダーをサーバーのリクエストに設定します。要求されたURLと要求されたパラメーターをスプライスし、クライアント.exceute(get)にリクエストを実行できます。
上記は、私のブラウザがクライアントにパラメーターとしてリクエストリクエスト要求を直接渡すため、リクエストから直接URLを取得できることです。リクエストがない人もいるので、リクエストのコンテキストから取得する必要があります。
パッケージ化されていない:
最初にリクエストを取得します
/*** get request*@return*/public static httpservletrequest getRequest(){servletRequestattributes ra =(servletRequestattributes)requestcontextholder.getRequestattributes(); httpservletrequest request = ra.getRequest();返品リクエスト。 }2:リクエストを受けた後、URLがあります。このパラメーターがカプセル化されていないため、要求パラメーターを解析しましょう。そのため、すべての要求パラメーターが取得されます。
/** *リクエストリクエストはありません。コントローラーレイヤー * @param key * @param interfacename * @param strings * @return * @return */public string centertodevicefacnorequest(string key、string interfaceName)スロー{try {try {httpservletrequest = get -from from from from from from from from from from from from from from from from from peris Reuquest Request Parameter Enumeration <String> names = request.getParameterNames(); map <string、string> parammap = new Hashmap <>(); // transTraight request map while(names.hasmoreelements()){string name = names.nextelement(); string value =(string)request.getParameter(name); parammap.put(name、value); } //メソッドを呼び出してhttp要求を送信しますsendttptodevfacnodata(parammap、request); } catch(Exception e){e.printstacktrace(); } // end return null; } 3:HTTPリクエストを送信します
/ ** * http要求を送信します。文字列結果= ""; stringbuffer databuffer = geturltoreQuest(request); // 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( "&")); //リクエストを送信httpget get = new httpget(resulturl); //ヘッダー列挙<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( "http requestを呼び出し、url:"+resulturl); // return result = entityutils.toString(rep.getEntity()、 "utf-8"); logger.info( "http request call end !!");返品結果; }上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。