Tomcat学习之Tomcat架构

来源:互联网 发布:python服务器端开发 编辑:程序博客网 时间:2024/05/16 23:40

以Tomcat5.5.33为例:

 

以上为Tomcat里面的所有文件;

下面来讲讲tomcat的整个架构(主要分为以下几大类):

Server:

Server,顾名思义就是服务器的意思,那么它的用处就是用来启动,监听,关闭服务器的功能,在Tomcat的标配文件夹config/server.xml,里面就有Tomcat一些启动,端口,关闭的配置信息。

org.apache.catalina.Server:

  是一个接口,规定了Server需要做的上述的基本事情:

org.apache.catalina.core.StandardServer:

  是Server接口的默认实现;我们最熟悉的starup.bat和shutdown.bat两个命令本至少就是调用该类的start()和stop()方法。

 

Service:

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来处理。

  context就是一个webapp,比如我们在tomcat里部署两个web项目,一个叫做baidu,一个叫做google,在tomcat启动后就可以说tomcat有两个context。

这个context容器,就是用来干我们该干的事儿的地方的。

Component:

接下来,我们继续讲讲component是干什么用的。
   我们得先理解一下容器和组件的关系。
   需求被传递到了容器里面,在合适的时候,会传递给下一个容器处理。
   而容器里面又盛装着各种各样的组件,我们可以理解为提供各种各样的增值服务。
   manager:当一个容器里面装了manager组件后,这个容器就支持session管理了,事实上在tomcat里面的session管理,就是靠的在context里面装的
manager component.
   logger:当一个容器里面装了logger组件后,这个容器里所发生的事情,就被该组件记录下来啦!我们通常会在logs/ 这个目录下看见 catalina_log.time.txt 以及 localhost.time.txt 和localhost_examples_log.time.txt。这就是因为我们分别为:engin, host以及context(examples)这三个容器安装了logger组件,这也是默认安装,又叫做标配:)

   loader:loader这个组件通常只会给我们的context容器使用, loader是用来启动context以及管理这个context的classloader用的。
   pipline:pipeline是这样一个东西,当一个容器决定了要把从上级传递过来的需求交给子容器的时候,他就把这个需求放进容器的管道(pipeline)里面去。而需求傻呼呼得在管道里面流动的时候,就会被管道里面的各个阀门拦截下来。比如管道里面放了两个阀门。第一个阀门叫做“access_allow_vavle”,也就是说需求流过来的时候,它会看这个需求是哪个IP过来的,如果这个IP已经在黑名单里面了, sure, 杀!第二个阀门叫做“defaul_access_valve”它会做例行的检查,如果通过的话,OK,把需求传递给当前容器的子容器。就是通过这种方式,需求就在各个容器里面传递,流动,最后抵达目的地的了。
   valve:就是上面所说的阀门啦。

总结: 

1.Tomcat启动,通过server类进行启动,初始化;

2.用户访问,connector将从SOCKET传过来的数据封装成Request

3.传递给Service处理

4.Service将需求传给Container(容器,有三种)

5.首先传给的是engin容器

6.Engin容器不处理,传给Host容器,Host容器会找到对应的主机,本机是localhost:8080

7.Host再传递给Context,Context可以理解为我们自己写的应用

8.经过容器处理后,通过Engin返回给Service

9.service处理返回信息,解析JSP页面

10.显示给用户

 

0 0
原创粉丝点击