设为首页 - 加入收藏 淳化站长网 (http://www.0910zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 学习 赚钱 知识 模式
当前位置: 首页 > 澳门三合王 > 外闻 > 正文

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

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

从连接器(Connector)源码说起

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

既然是来解析连接器(Connector),那么我们直接从源码入手,后面所有源码我会剔除不重要部分,所以会忽略大部分源码细节,只关注流程。源码如下(高能预警,大量代码):

  1. public?class?Connector?extends?LifecycleMBeanBase?{?
  2. ?public?Connector()?{?
  3. ?this("org.apache.coyote.http11.Http11NioProtocol");?
  4. ?}?
  5. ?public?Connector(String?protocol)?{?
  6. ?boolean?aprConnector?=?AprLifecycleListener.isAprAvailable()?&&?
  7. ?AprLifecycleListener.getUseAprConnector();?
  8. ?if?("HTTP/1.1".equals(protocol)?||?protocol?==?null)?{?
  9. ?if?(aprConnector)?{?
  10. ?protocolHandlerClassName?=?"org.apache.coyote.http11.Http11AprProtocol";?
  11. ?}?else?{?
  12. ?protocolHandlerClassName?=?"org.apache.coyote.http11.Http11NioProtocol";?
  13. ?}?
  14. ?}?else?if?("AJP/1.3".equals(protocol))?{?
  15. ?if?(aprConnector)?{?
  16. ?protocolHandlerClassName?=?"org.apache.coyote.ajp.AjpAprProtocol";?
  17. ?}?else?{?
  18. ?protocolHandlerClassName?=?"org.apache.coyote.ajp.AjpNioProtocol";?
  19. ?}?
  20. ?}?else?{?
  21. ?protocolHandlerClassName?=?protocol;?
  22. ?}?
  23. ?//?Instantiate?protocol?handler?
  24. ?ProtocolHandler?p?=?null;?
  25. ?try?{?
  26. ?Class?clazz?=?Class.forName(protocolHandlerClassName);?
  27. ?p?=?(ProtocolHandler)?clazz.getConstructor().newInstance();?
  28. ?}?catch?(Exception?e)?{?
  29. ?log.error(sm.getString(?
  30. ?"coyoteConnector.protocolHandlerInstantiationFailed"),?e);?
  31. ?}?finally?{?
  32. ?this.protocolHandler?=?p;?
  33. ?}?
  34. ?//?Default?for?Connector?depends?on?this?system?property?
  35. ?setThrowOnFailure(Boolean.getBoolean("org.apache.catalina.startup.EXIT_ON_INIT_FAILURE"));?
  36. ?}?

我们来看看Connector的构造方法,其实只做了一件事情,就是根据协议设置对应的ProtocolHandler,根据名称我们知道,这是协议处理类,所以连接器内部的一个重要子模块就是ProtocolHandler。

关于生命周期

我们看到Connector继承了LifecycleMBeanBase,我们来看看Connector的最终继承关系:

金九银十,查漏补缺:连接器在Tomcat中是如何设计的

我们看到最终实现的是Lifecycle接口,我们看看这个接口是何方神圣。我把其接口的注释拿下来解释下

  1. /**?
  2. ?*?Common?interface?for?component?life?cycle?methods.?Catalina?components?
  3. ?*?may?implement?this?interface?(as?well?as?the?appropriate?interface(s)?for?
  4. ?*?the?functionality?they?support)?in?order?to?provide?a?consistent?mechanism?
  5. ?*?to?start?and?stop?the?component.?
  6. ?*?start()?
  7. ?*?-----------------------------?
  8. ?*?|?|?
  9. ?*?|?init()?|?
  10. ?*?NEW?-?--?INITIALIZING?|?
  11. ?*?|?|?|?|?------------------?-----------------------?
  12. ?*?|?|?|auto?|?|?|?
  13. ?*?|?|?\|/?start()?\|/?\|/?auto?auto?stop()?|?
  14. ?*?|?|?INITIALIZED?--?--?STARTING_PREP?--?-?STARTING?--?-?STARTED?--?---?|?
  15. ?*?|?|?|?|?|?
  16. ?*?|?|destroy()|?|?|?
  17. ?*?|?--?-----?--?------------------------?--------------------------------?^?
  18. ?*?|?|?|?|?
  19. ?*?|?|?\|/?auto?auto?start()?|?
  20. ?*?|?|?STOPPING_PREP?----?----?STOPPING?------?-----?STOPPED?-----?-----?
  21. ?*?|?\|/?^?|?^?
  22. ?*?|?|?stop()?|?|?|?
  23. ?*?|?|?--------------------------?|?|?
  24. ?*?|?|?|?|?|?
  25. ?*?|?|?|?destroy()?destroy()?|?|?
  26. ?*?|?|?FAILED?----?------?DESTROYING?---?-----------------?|?
  27. ?*?|?|?^?|?|?
  28. ?*?|?|?destroy()?|?|auto?|?
  29. ?*?|?--------?-----------------?\|/?|?
  30. ?*?|?DESTROYED?|?
  31. ?*?|?|?
  32. ?*?|?stop()?|?
  33. ?*?----?-----------------------------?------------------------------?
  34. ?*?
  35. ?*?Any?state?can?transition?to?FAILED.?
  36. ?*?
  37. ?*?Calling?start()?while?a?component?is?in?states?STARTING_PREP,?STARTING?or?
  38. ?*?STARTED?has?no?effect.?
  39. ?*?
  40. ?*?Calling?start()?while?a?component?is?in?state?NEW?will?cause?init()?to?be?
  41. ?*?called?immediately?after?the?start()?method?is?entered.?
  42. ?*?
  43. ?*?Calling?stop()?while?a?component?is?in?states?STOPPING_PREP,?STOPPING?or?
  44. ?*?STOPPED?has?no?effect.?
  45. ?*?
  46. ?*?Calling?stop()?while?a?component?is?in?state?NEW?transitions?the?component?
  47. ?*?to?STOPPED.?This?is?typically?encountered?when?a?component?fails?to?start?and?
  48. ?*?does?not?start?all?its?sub-components.?When?the?component?is?stopped,?it?will?
  49. ?*?try?to?stop?all?sub-components?-?even?those?it?didn't?start.?
  50. ?*?
  51. ?*?Attempting?any?other?transition?will?throw?{@link?LifecycleException}.?
  52. ?*?
  53. ?*?
?
  • ?*?The?{@link?LifecycleEvent}s?fired?during?state?changes?are?defined?in?the?
  • ?*?methods?that?trigger?the?changed.?No?{@link?LifecycleEvent}s?are?fired?if?the?
  • ?*?attempted?transition?is?not?valid.?
  • 【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

    网友评论
    推荐文章