Tomcat学习之Tomcat架构
2015-01-21 16:10
169 查看
以Tomcat5.5.33为例:
![](https://img-blog.csdn.net/20150121161015765?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTI3NjAxMjEwNQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
以上为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.显示给用户
以上为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.显示给用户
相关文章推荐
- Tomcat6.0源码学习--架构概述
- Tomcat6.0源码学习--架构概述
- Tomcat6.0源码学习--架构概述
- Tomcat6.0源码学习--Connector架构
- 【Todo】Tomcat与Jetty的比较 以及Tomcat架构的学习
- Tomcat学习2_Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析
- 分布式架构学习之:使用Redis3.0集群实现Tomcat集群的Session共享
- Tomcat6.0源码学习--Connector架构
- Tomcat学习1_Tomcat 系统架构与设计模式,第 1 部分: 工作原理
- Tomcat 学习进阶历程之Tomcat架构与核心类分析
- Tomcat6.0源码学习--架构概述
- 分布式架构学习之:032--使用Redis3.0集群实现Tomcat集群的Session共享
- Tomcat学习之Tomcat架构
- Tomcat 学习进阶历程之Tomcat架构与核心类分析
- Tomcat 学习进阶历程之Tomcat架构与核心类分析
- ASP.NET2.0学习--2程序架构
- petshop3.0-jcc学习笔记(一)系统架构
- NHibernate学习手记(2) - NH的系统架构
- shtml学习,Tomcat配置SSI,及语法指令小记
- MOM2005基础架构设计学习笔记1