加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

查漏补缺:连接器在Tomcat中是如何设计的

发布时间:2019-09-24 16:26:56 所属栏目:外闻 来源:今日头条
导读:副标题#e# 从连接器(Connector)源码说起 既然是来解析连接器(Connector),那么我们直接从源码入手,后面所有源码我会剔除不重要部分,所以会忽略大部分源码细节,只关注流程。源码如下(高能预警,大量代码): publicclassConnectorextendsLifecycleMBeanBas

这段注释翻译就是,这个接口是提供给组件声明周期管理的,并且提供了声明周期流转图。这里我们只需要知道正常流程即可:

  1. New--->Init()---->Start()---->Stop()--->Destory() 

从生命周期探索连接器

根据上面的生命周期说明,我们可以知道连接器(Connector)就是按照如此的声明周期管理的,所以我们找到了线索,所以连接器肯定会先初始化然后再启动。我们查看其initInternal()方法可以知道连接器初始化做了什么事情,源码如下:

  1. @Override 
  2.  protected void initInternal() throws LifecycleException { 
  3.  super.initInternal(); 
  4.  if (protocolHandler == null) { 
  5.  throw new LifecycleException( 
  6.  sm.getString("coyoteConnector.protocolHandlerInstantiationFailed")); 
  7.  } 
  8.  // Initialize adapter 
  9.  adapter = new CoyoteAdapter(this); 
  10.  protocolHandler.setAdapter(adapter); 
  11.  if (service != null) { 
  12.  protocolHandler.setUtilityExecutor(service.getServer().getUtilityExecutor()); 
  13.  } 
  14.  // Make sure parseBodyMethodsSet has a default 
  15.  if (null == parseBodyMethodsSet) { 
  16.  setParseBodyMethods(getParseBodyMethods()); 
  17.  } 
  18.  if (protocolHandler.isAprRequired() && !AprLifecycleListener.isInstanceCreated()) { 
  19.  throw new LifecycleException(sm.getString("coyoteConnector.protocolHandlerNoAprListener", 
  20.  getProtocolHandlerClassName())); 
  21.  } 
  22.  if (protocolHandler.isAprRequired() && !AprLifecycleListener.isAprAvailable()) { 
  23.  throw new LifecycleException(sm.getString("coyoteConnector.protocolHandlerNoAprLibrary", 
  24.  getProtocolHandlerClassName())); 
  25.  } 
  26.  if (AprLifecycleListener.isAprAvailable() && AprLifecycleListener.getUseOpenSSL() && 
  27.  protocolHandler instanceof AbstractHttp11JsseProtocol) { 
  28.  AbstractHttp11JsseProtocol<?> jsseProtocolHandler = 
  29.  (AbstractHttp11JsseProtocol<?>) protocolHandler; 
  30.  if (jsseProtocolHandler.isSSLEnabled() && 
  31.  jsseProtocolHandler.getSslImplementationName() == null) { 
  32.  // OpenSSL is compatible with the JSSE configuration, so use it if APR is available 
  33.  jsseProtocolHandler.setSslImplementationName(OpenSSLImplementation.class.getName()); 
  34.  } 
  35.  } 
  36.  try { 
  37.  protocolHandler.init(); 
  38.  } catch (Exception e) { 
  39.  throw new LifecycleException( 
  40.  sm.getString("coyoteConnector.protocolHandlerInitializationFailed"), e); 
  41.  } 
  42.  } 

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读