当前位置: 首页 > news >正文

内江企业网站建设公司seo综合查询站长工具

内江企业网站建设公司,seo综合查询站长工具,dw软件免费下载,seo和sem的关系在项目中#xff0c;如果要调用第三方的http服务#xff0c;就需要发起http请求#xff0c;常用的请求方式#xff1a;第一种#xff0c;使用java原生发起http请求#xff0c;这种方式不需要引入第三方库#xff0c;但是连接不可复用#xff0c;如果要实现连接复用如果要调用第三方的http服务就需要发起http请求常用的请求方式第一种使用java原生发起http请求这种方式不需要引入第三方库但是连接不可复用如果要实现连接复用需要自己实现管理相对来说比较麻烦第二种就是使用第三方的库比较常用的就是apache的httpclient和okhttp两个包他们都对http请求进行了封装并且可以管理连接对于重复使用的连接会有比较好的性能第三种就是在springboot中使用RestTemplate进行请求它是对http请求的封装默认使用的java原生进行请求也支持整合httpclient和okhttp库提供很好的封装和扩展性。下面就介绍一下如何在项目中使用和相关配置 要在项目中使用RestTemplate首先需要定义一个Bean将它注入到系统中 Bean public RestTemplate restTemplate() {return new RestTemplate(); }这种方式注入的对象默认使用SimpleClientHttpRequestFactory工厂它使用java原生方式发起http请求性能并不好还有一种注入方式是 Bean public RestTemplate restTemplate(RestTemplateBuilder builder) {return builder.build(); }RestTemplateBuilder这种注入方式会根据系统中是否引入第三方的http库来灵活选择httpclient工厂通过跟踪源码发现目前支持httpclient和okhttp3两个库如下图 虽然通过上面的方式注入的RestTemplate会自动选择创建httpclient的工厂但是该工厂相关参数都是默认配置有时候并不能满足我们系统的需求比如要设置读写超时时间默认的配置中是永远不超时这样如果请求的第三方系统响应慢会导致整个系统崩溃。 不加任何配置的RestTemplate内容如下 要调整超时时间就需要使用下面这种方式注入工厂并配置相关参数 Bean public ClientHttpRequestFactory simpleClientHttpRequestFactory() {SimpleClientHttpRequestFactory factory new SimpleClientHttpRequestFactory();factory.setConnectTimeout(3000);factory.setReadTimeout(3000);return factory; }Bean public RestTemplate restTemplate(ClientHttpRequestFactory factory) {return new RestTemplate(factory); }再次查看RestTemplate的内容 通常情况下我们都不会使用java原生的方式发起http请求因为每次发起http请求都要重新建立连接这样会大大降低系统性能在这个示例中我选择使用apache下的httpclient库扩展首先需要在项目中引入相关依赖 dependencygroupIdorg.apache.httpcomponents/groupIdartifactIdhttpclient/artifactIdversion4.5.12/version /dependency dependencygroupIdorg.apache.httpcomponents/groupIdartifactIdhttpmime/artifactIdversion4.5.12/version /dependency dependencygroupIdorg.apache.httpcomponents/groupIdartifactIdhttpcore/artifactIdversion4.4.13/version /dependency注意包的版本要匹配否则会有报错接下来就是将httpclient注入到RestTemplate中这里有两种方式第一种是使用下面的配置 Bean public RestTemplate restTemplate(RestTemplateBuilder builder) {return builder.build(); }它可以检测到系统中引入了httpclient依赖会自动将原生的工厂类替换为apacheHttpClient的工厂 但是这种方式使用的配置都是默认的如连接池大小为20个超时时间永不超时等。这种配置不能满足我们的需求这时候就需要根据自己系统的要求调整配置参数了下面的示例代码是我的一个简单配置 import org.apache.http.HttpEntityEnclosingRequest; import org.apache.http.HttpRequest; import org.apache.http.NoHttpResponseException; import org.apache.http.client.HttpRequestRetryHandler; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.protocol.HttpClientContext; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.ConnectTimeoutException; import org.apache.http.conn.UnsupportedSchemeException; import org.apache.http.conn.socket.ConnectionSocketFactory; import org.apache.http.conn.socket.PlainConnectionSocketFactory; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate;import javax.net.ssl.SSLException; import java.io.InterruptedIOException; import java.net.SocketException; import java.net.SocketTimeoutException; import java.net.UnknownHostException; import java.util.concurrent.TimeUnit;Configuration public class RestTemplateConfig {Beanpublic ClientHttpRequestFactory apacheHttpRequestFactory() {// 重试配置HttpRequestRetryHandler retryHandler (e, count, context) - {System.out.println(连接失败次数| count);e.printStackTrace();if (count 5) { // 假设已经重试了5次就放弃return false;}// 返回true需要重试if (e instanceof NoHttpResponseException // 请求无响应就重试|| e instanceof ConnectTimeoutException // 连接超时|| e instanceof SocketException // 连接异常|| e instanceof SocketTimeoutException // socket超时) {try {// 重试时间间隔1sTimeUnit.MILLISECONDS.sleep(1000);} catch (InterruptedException ex) {e.printStackTrace();}return true;}// 返回false不需要重试if (e instanceof SSLException // SSL握手异常不要重试|| e instanceof InterruptedIOException // 中断|| e instanceof UnknownHostException // 目标server不可达|| e instanceof UnsupportedSchemeException // 协议不支持) {return false;}HttpClientContext clientContext HttpClientContext.adapt(context);HttpRequest request clientContext.getRequest();// 假设请求是幂等的就再次尝试return !(request instanceof HttpEntityEnclosingRequest);};RegistryConnectionSocketFactory registry RegistryBuilder.ConnectionSocketFactorycreate().register(http, PlainConnectionSocketFactory.INSTANCE).register(https, SSLConnectionSocketFactory.getSocketFactory()).build();// 连接池配置PoolingHttpClientConnectionManager connManager new PoolingHttpClientConnectionManager(registry);// 最大连接数connManager.setMaxTotal(1000);// 每个路由最大连接数connManager.setDefaultMaxPerRoute(200);// 超时配置都为5sRequestConfig reqConfig RequestConfig.custom().setConnectionRequestTimeout(5000) // 从连接池中获取连接超时时间.setConnectTimeout(5000) // 连接建立超时时间也就是三次握手完成时间.setSocketTimeout(5000) // 等待服务器响应超时时间.build();// 构建httpclientCloseableHttpClient client HttpClients.custom().setConnectionManager(connManager).setDefaultRequestConfig(reqConfig).setRetryHandler(retryHandler).build();return new HttpComponentsClientHttpRequestFactory(client);}Beanpublic RestTemplate restTemplate() {return new RestTemplate(apacheHttpRequestFactory());} }通过上面的配置就将自定义的连接参数注入到RestTemplate中了。在使用的位置只需要引入restTemplate就可以正常使用了 Autowired private RestTemplate restTemplate;使用restTemplate发起http请求的方法封装为两种形式一种是ForObject()如getForObject()、postForObject()这种只会返回数据另一种是ForEntity()如getForEntity()、postForEntity()这种方式会返回数据和状态信息。 get请求比较简单下面主要演示一下post请求中的提交表单数据和json数据的示例 提交表单数据 // 请求地址 String url http://localhost:8081/test/add; // form表单数据 MultiValueMapString, Object data new LinkedMultiValueMap(); data.add(name, james); data.add(age, 38); // 请求头部 HttpHeaders headers new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); // 发起请求 ResponseEntityString result restTemplate.postForEntity(url, new HttpEntity(data, headers), String.class);提交json数据 // 请求地址 String url http://localhost:8081/test/add; // json数据 String data {\name\:\james\,\age\:38}; // 请求头部 HttpHeaders headers new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); // 发起请求 ResponseEntityString result restTemplate.postForEntity(url, new HttpEntity(data, headers), String.class);
http://www.hkea.cn/news/14476255/

相关文章:

  • 烟台免费网站建设carousel wordpress
  • 网站建设状况手机的网站建设目标是什么意思
  • 银行门户网站开发平度建设局网站
  • 网站制作中搜索栏怎么做6腾讯建站平台官网
  • 郑州专业网站建设公司详情晋城网站设计
  • 东莞网站(建设信科网络)最专业网站建设公司首选
  • 优酷土豆网站建设iis 7.0 网站配置
  • 做抽奖网站合法吗网站毕业设计模板
  • 建设银行网站会员有什么用电商网站设计内容
  • 易语言做自动登陆网站做住宿的有几个网站
  • 网上做室内设计的网站高职院校优质校建设专栏网站
  • 怎么做投票 网站四大商业网站
  • 复古风格网站西安大雁塔图片
  • 简约设计网站房产网站建设机构
  • 技术培训班深圳网站优化平台
  • 网站管理和维护怎么做做电影网站违法吗
  • 企业网站背景颜色wix wordpress
  • 公司网站要更新哈密建设局网站
  • 关于网站建设的大学自己建一个电商网站吗
  • 怎么做淘宝网站赚钱免费asp网站源码
  • 为什么要创建网站子目录python基础教程百度亿
  • 昆明360网站制作网络推广技巧
  • 教育软件开发公司排名seo入门讲解
  • 周口网站建设公司京东客网站怎么做
  • 最受欢迎国内设计网站做网站怎么销售
  • 做美食网站首页怎么做视频建设网站
  • 金桥路附近做网站的高端室内设计
  • vs2013网站开发沈阳营商环境建设局网站
  • 旅游酒店网站建设网站投稿系统怎么做
  • 登录全球最大的域名注册商网站镇江网站建设zjmfkj