梁山企业网站建设,做网站的工资高吗?,惠州人才市场最新招聘信息网,黄页88网推广服务免费因为项目需求#xff0c;需要两个系统之间进行通信#xff0c;经过一番调研#xff0c;决定使用http请求。服务端没有什么好说的#xff0c;本来就是使用web 页面进行访问的#xff0c;所以spring boot启动后#xff0c;controller层的接口就自动暴露出来了#xff0c;客…因为项目需求需要两个系统之间进行通信经过一番调研决定使用http请求。 服务端没有什么好说的本来就是使用web 页面进行访问的所以spring boot启动后controller层的接口就自动暴露出来了客户端通过调用对应的url即可所以这里主要就客户端。 首先我自定义了一个用来处理http 请求的工具类DeviceFactoryHttp 既然是url访问那就有两个问题需要处理一个请求服务的url和请求服务端的参数客户端的消息头 请求服务的url请求服务端url我定义的是跟客户端一个样的url 服务端的参数:服务端的参数有两种一种经过封装的类似下面这样 http://localhost:8080/switch/getAllStatus?data{interface name”:”getAllStudentStaus”} 一种是没有经过封装的类似下面这样 http://localhost:8080/switch/getStudentInfoByName?namezhangSan 首先是经过封装 一初始化httpclient private static HttpClient client null; static { PoolingHttpClientConnectionManager cm new PoolingHttpClientConnectionManager(); cm.setMaxTotal(128); cm.setDefaultMaxPerRoute(128); client HttpClients.custom().setConnectionManager(cm).build(); } 二获取请求的url因为我服务端定义的url与客户端一样所以我直接使用请求客户端的url //根据request获取请求的url public StringBuffer getUrlToRequest(HttpServletRequest request) { StringBuffer urlrequest.getRequestURL();//获取请求的url(http://localhost:8080/switch/getStudentInfoByName) String[] splitArrurl.toString().split(/); String appNamesplitArr[3];//项目名称 String ipReportsplitArr[2];//项目ip:report String resultStrurl.toString().replaceAll(appName,DevFacConstans.facname).replaceAll(ipReport, DevFacConstans.ip:DevFacConstans.report); return new StringBuffer(resultStr); } 获取url根据/ 进行split因为我这是测试环境生产环境ip,端口号域名肯定不是localhost,有的前面还会加上项目名称 所以我split对应的值来进行替换。 三拼装请求参数调用http请求 /** * 发送http请求 有request * 给controller层调用 * param request * return */ public String sendHttpToDevFac(HttpServletRequest request)throws Exception { HttpClient client null; String returnResult; // http://localhost:8080/leo/1.0/h5/login StringBuffer urlBuffergetUrlToRequest(request);//调用第二步获取url //获取参数并拼装 String dataAsJson request.getParameter(data); String encoderDataURLEncoder.encode(dataAsJson,utf-8); HttpGet getnew HttpGet(urlBuffer.append(?data).append(encoderData).toString()); //set headers EnumerationString headerNamesrequest.getHeaderNames(); while(headerNames.hasMoreElements()) { String headerNameheaderNames.nextElement(); String headerValuerequest.getHeader(headerName); get.setHeader(headerName, headerValue); } clientDeviceFactoryHttp.client; logger.info(开始调用http请求请求url:urlBuffer.toString()); HttpResponse repclient.execute(get); returnResultEntityUtils.toString(rep.getEntity(),utf-8); logger.info(http 请求调用结束!!); return returnResult; } 先获取请求的参数再将参数拼装在url后面URLEncoder.encode 这个不要忘了因为参数会有一些符号需要对参数进行编码后再加入url否则就会抛出异常 set headers因为有部分信息服务端会从请求头中取出所以我将客户端的请求头也set到服务端的request中请求的url和请求的参数拼好就就可以client.exceute(get)执行请求了。 上面的是我浏览器直接将request请求作为参数传到我客户端我所以我可以直接从request中获取url有的是没有request就需要从request的上下文环境中取了。 没有经过封装的 首先从上下文中获取request的 /** * 获取request * return */ public static HttpServletRequest getRequest(){ ServletRequestAttributes ra (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request ra.getRequest(); return request; } 二有了request后就有了url,下面再来解析请求参数因为这个参数是没有封装的所以获取所有的请求参数 /*** 没有request 请求给controller层调用* param key* param interfaceName* param strings* return* throws Exception*/public String centerToDeviceFacNoRequest(String key,String interfaceName)throws Exception {try {HttpServletRequest requestgetRequest();//上面第一步从上下文中获取url//获取reuquest请求参数EnumerationString names request.getParameterNames();MapString,StringparamMapnew HashMap();//遍历请求mapwhile(names.hasMoreElements()) {String namenames.nextElement();String value(String) request.getParameter(name);paramMap.put(name, value);}//调用发送http请求的方法return sendHttpToDevFacNoData(paramMap,request);} catch (Exception e) {e.printStackTrace();}//endreturn null;} 三发送http请求 /*** 发送http请求【没有data数据的】* return*/public String sendHttpToDevFacNoData(MapString,StringparamMap,HttpServletRequest request)throws Exception {HttpClient client null;String result;StringBuffer dataBuffergetUrlToRequest(request);//获取urldataBuffer.append(?);clientDeviceFactoryHttp.client;IteratorEntryString, String paamItparamMap.entrySet().iterator();while(paamIt.hasNext()) {EntryString, String entrypaamIt.next();dataBuffer.append(entry.getKey()).append().append(entry.getValue()).append();}String resultUrldataBuffer.toString().substring(0, dataBuffer.toString().lastIndexOf());//发送请求HttpGet getnew HttpGet(resultUrl);//set headersEnumerationString headerNamesrequest.getHeaderNames();while(headerNames.hasMoreElements()) {String headerNameheaderNames.nextElement();String headerValuerequest.getHeader(headerName);get.setHeader(headerName, headerValue);}HttpResponse repclient.execute(get);logger.info(开始调用http请求请求url:resultUrl);//返回结果resultEntityUtils.toString(rep.getEntity(),utf-8);logger.info( http 请求调用结束!!);return result;}转载于:https://www.cnblogs.com/zhangXingSheng/p/7745009.html