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.显示给用户
- Tomcat学习之Tomcat架构
- Tomcat学习之Tomcat架构
- Tomcat架构学习总结
- tomcat架构之-----基本概念
- LAMP架构之Tomcat
- Tomcat 学习进阶历程之Tomcat架构与核心类分析
- 【tomcat】tomcat架构
- Tomcat学习之前言
- Tomcat学习之配置文件
- Tomcat学习之ClassLoader
- Tomcat学习之Connector
- Tomcat学习之Acceptor
- Tomcat学习之Container
- Tomcat学习之Engine
- Tomcat学习之Host
- Tomcat学习之Context
- Tomcat学习之HostConfig
- Tomcat学习之ContextConfig
- UVa 211 - The Domino Effect (DFS)
- JDK自带工具之jstack
- 【ACM打卡】ZOJ 3019
- debian sendmail安装
- 函数实现-memcpy-strcpy-memmove-memset
- Tomcat学习之Tomcat架构
- 解决adb not responding you can wait more
- XML解析器——DOM
- mysql 如何设置自动增长序列 sequence(二) 在实际中调用
- 国内 repo 拉取android源码
- Android如何在初始化的时候获取加载的布局的宽高
- vim查看函数原型
- 最短路算法学习总结和感悟
- Customer Form Issue: Automatic Matching Rule Set Defaults Value AutoRuleSet-1