blovekyo 发表于 2018-12-5 12:53:52

解析TOMCAT框架 .

  毕竟TOMCAT的框架还是比较复杂的, 单是从文字上理解, 是不那么容易掌握TOMCAT的框架的。 所以得实践、实践、再实践。 建议下载一份TOMCAT的源码, 调试通过, 然后单步跟踪其启动过程。 如果有不明白的地方, 再来查阅本文, 看是否能得到帮助。 我相信这样效果以及学习速度都会好很多!
  1. Tomcat的整体框架结构
  Tomcat的基本框架, 分为4个层次。
  Top Level Elements:
  Server
  Service
  Connector
  HTTP
  AJP
  Container
  Engine
  Host
  Context
  Component
  manager
  logger
  loader
  pipeline
  valve
  ...
  站在框架的顶层的是Server和Service
  Server:其实就是BackGroud程序, 在Tomcat里面的Server的用处是启动和监听服务端事件(诸如重启、关闭等命令。 在tomcat的标准配置文件:server.xml里面, 我们可以看到“”这里的"SHUTDOWN"就是server在监听服务端事件的时候所使用的命令字)
  Service: 在tomcat里面, service是指一类问题的解决方案。通常我们会默认使用tomcat提供的:Tomcat-Standalone 模式的service。 在这种方式下的service既给我们提供解析jsp和servlet的服务, 同时也提供给我们解析静态文本的服务。
  Connector: Tomcat都是在容器里面处理问题的, 而容器又到哪里去取得输入信息呢?
  Connector就是专干这个的。 他会把从socket传递过来的数据, 封装成Request, 传递给容器来处理。
  通常我们会用到两种Connector,一种叫http connectoer, 用来传递http需求的。 另一种叫AJP, 在我们整合apache与tomcat工作的时候, apache与tomcat之间就是通过这个协议来互动的。 (说到apache与tomcat的整合工作, 通常我们的目的是为了让apache 获取静态资源, 而让tomcat来解析动态的jsp或者servlet。)
  Container: 当http connector把需求传递给顶级的container: Engin的时候, 我们的视线就应该移动到Container这个层面来了。
  在Container这个层, 我们包含了3种容器: Engin, Host, Context.
  Engin: 收到service传递过来的需求, 处理后, 将结果返回给service( service 是通过 connector 这个媒介来和Engin互动的 ).
  Host: Engin收到service传递过来的需求后,不会自己处理, 而是交给合适的Host来处理。
  Host在这里就是虚拟主机的意思, 通常我们都只会使用一个主机,既“localhost”本地机来处理。
  Context: Host接到了从Host传过来的需求后, 也不会自己处理, 而是交给合适的Context来处理。
  比如:
  
  前者交给foo这个Context来处理, 后者交给bar这个Context来处理。
  很明显吧! context的意思其实就是一个web app的意思。
  我们通常都会在server.xml里面做这样的配置
  
  这个context容器,就是用来干我们该干的事儿的地方的。
  毕竟TOMCAT的框架还是比较复杂的, 单是从文字上理解, 是不那么容易掌握TOMCAT的框架的。 所以得实践、实践、再实践。 建议下载一份TOMCAT的源码, 调试通过, 然后单步跟踪其启动过程。 如果有不明白的地方, 再来查阅本文, 看是否能得到帮助。 我相信这样效果以及学习速度都会好很多!
  1. Tomcat的整体框架结构
  Tomcat的基本框架, 分为4个层次。
  Top Level Elements:
  Server
  Service
  Connector
  HTTP
  AJP
  Container
  Engine
  Host
  Context
  Component
  manager
  logger
  loader
  pipeline
  valve
  ...
  站在框架的顶层的是Server和Service
  Server:其实就是BackGroud程序, 在Tomcat里面的Server的用处是启动和监听服务端事件(诸如重启、关闭等命令。 在tomcat的标准配置文件:server.xml里面, 我们可以看到“”这里的"SHUTDOWN"就是server在监听服务端事件的时候所使用的命令字)
  Service: 在tomcat里面, service是指一类问题的解决方案。通常我们会默认使用tomcat提供的:Tomcat-Standalone 模式的service。 在这种方式下的service既给我们提供解析jsp和servlet的服务, 同时也提供给我们解析静态文本的服务。
  Connector: Tomcat都是在容器里面处理问题的, 而容器又到哪里去取得输入信息呢?
  Connector就是专干这个的。 他会把从socket传递过来的数据, 封装成Request, 传递给容器来处理。
  通常我们会用到两种Connector,一种叫http connectoer, 用来传递http需求的。 另一种叫AJP, 在我们整合apache与tomcat工作的时候, apache与tomcat之间就是通过这个协议来互动的。 (说到apache与tomcat的整合工作, 通常我们的目的是为了让apache 获取静态资源, 而让tomcat来解析动态的jsp或者servlet。)
  Container: 当http connector把需求传递给顶级的container: Engin的时候, 我们的视线就应该移动到Container这个层面来了。
  在Container这个层, 我们包含了3种容器: Engin, Host, Context.
  Engin: 收到service传递过来的需求, 处理后, 将结果返回给service( service 是通过 connector 这个媒介来和Engin互动的 ).
  Host: Engin收到service传递过来的需求后,不会自己处理, 而是交给合适的Host来处理。
  Host在这里就是虚拟主机的意思, 通常我们都只会使用一个主机,既“localhost”本地机来处理。
  Context: Host接到了从Host传过来的需求后, 也不会自己处理, 而是交给合适的Context来处理。
  比如:
  
  前者交给foo这个Context来处理, 后者交给bar这个Context来处理。
  很明显吧! context的意思其实就是一个web app的意思。
  我们通常都会在server.xml里面做这样的配置
  
  这个context容器,就是用来干我们该干的事儿的地方的。

页: [1]
查看完整版本: 解析TOMCAT框架 .