Tomcat容器详解

tomcat文件目录:

bin:tomcat的所有可执行文件的存放目录(windows,linux系统的操作)
windows系统环境启动与关闭tomcat所使用文件:startup.bat,shuodown.bat
linux系统环境启动与关闭tomcat所使用文件starup.sh,shuodown.sh
catalina.sh,catalina.bat都是设置Tomcat内存参数
conf:tomcat配置文件目录
lib:tomcat运行需要的依赖jar文件
logs:tomcat运行操作过程中产生的日志信息
temp:临时文件存储目录
webapps:web项目发布的目录
work:jsp文件运行时编译文件存放目录

测试运行:
1.启动tomcat>startup.bat
最后出现Catalina.start Server startup in 707 ms字样就是启动成功
登陆http://localhost:8080

在tomcat中的webapps中发布一个项目
1.在webapps中新建一个myweb下新建一个123.html

2.访问http://localhost:8080/myweb/123.html

Tomcat 组成如下图:
主要有 Container 和 Connector 以及相关组件构成。

Server:指的就是整个 Tomcat 服 务器,包含多组服务,负责管理和 启动各个 Service,同时监听 8005 端口发过来的 shutdown 命令,用 于关闭整个容器 ;
Service:Tomcat 封装的、对外提 供完整的、基于组件的 web 服务, 包含 Connectors、Container 两个 核心组件,以及多个功能组件,各 个 Service 之间是独立的,但是共享 同一 JVM 的资源 ;
Connector:Tomcat 与外部世界的连接器,监听固定端口接收外部请求,传递给 Container,并 将 Container 处理的结果返回给外部;
Container:Catalina,Servlet 容器,内部有多层容器组成,用于管理 Servlet 生命周期,调用 servlet 相关方法。

由上图可看出Tomca的心脏是两个组件:Connecter和Container。一个Container可以选择多个Connecter,多个Connector和一个Container就形成了一个Service。Service可以对外提供服务,而Server服务器控制整个Tomcat的生命周期。

Engine:Servlet 的顶层容器,包含一 个或多个 Host 子容器;
Host:虚拟主机,负责 web 应用的部 署和 Context 的创建;
Context:Web 应用上下文,包含多个 Wrapper,负责 web 配置的解析、管 理所有的 Web 资源;
Wrapper:最底层的容器,是对 Servlet 的封装,负责 Servlet 实例的创 建、执行和销毁。

Container是容器的父接口,该容器的设计用的是典型的责任链的设计模式,它由四个自容器组件构成,分别是Engine、Host、Context、Wrapper。这四个组件是负责关系,存在包含关系。通常一个Servlet class对应一个Wrapper,如果有多个Servlet定义多个Wrapper,如果有多个Wrapper就要定义一个更高的Container,如Context。

Engine 容器
Engine 容器比较简单,它只定义了一些基本的关联关系
Host 容器
Host 是 Engine 的字容器,一个 Host 在 Engine 中代表一个虚拟主机,这个虚拟主机的作用就是运行多个应用,它负责安装和展开这些应用,并且标识这个应用以便能够区分它们。它的子容器通常是 Context,它除了关联子容器外,还有就是保存一个主机应该有的信息。
Context 容器
Context 代表 Servlet 的 Context,它具备了 Servlet 运行的基本环境,理论上只要有 Context 就能运行 Servlet 了。简单的 Tomcat 可以没有 Engine 和 Host。Context 最重要的功能就是管理它里面的 Servlet 实例,Servlet 实例在 Context 中是以 Wrapper 出现的,还有一点就是 Context 如何才能找到正确的 Servlet 来执行它呢? Tomcat5 以前是通过一个 Mapper 类来管理的,Tomcat5 以后这个功能被移到了 request 中,在前面的时序图中就可以发现获取子容器都是通过 request 来分配的。
Wrapper 容器
Wrapper 代表一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。Wrapper 是最底层的容器,它没有子容器了,所以调用它的 addChild 将会报错。
Wrapper 的实现类是 StandardWrapper,StandardWrapper 还实现了拥有一个 Servlet 初始化信息的 ServletConfig,由此看出 StandardWrapper 将直接和 Servlet 的各种信息打交道。

tomcat执行过程

1.请求被发送到本机端口8080,被在那里侦听的CoyoteHTTP/1.1 Connector获得
2.Connector把请求交给他所在的Service的Engine来处理,并等待Engine的回应
3.Engine获取请求localhost:8080/test/index.jsp,匹配它所有虚拟主机Host
4.Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该host处理,因为该Host被定为Engine默认主机)
5.localhost Host获得请求/test/index.jsp,匹配它所拥有的Context
6.Host匹配到路径为/test的Context(如果匹配不到就把请求交给路径为“”的Context去处理)
7.path="test"的Context获取请求/index.jsp,在他的mapping table中寻找对应的servlet
8.Context匹配到URL PATTERN为*。jsp的servlet,对应与JspServlet类
9.构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法。
10.Context把执行完了之后的HttpServletResponse对象返回给Host
11.Host把HttpServletResponse对象返回给Engine
12.Engine把HttpServletResponse对象返回给Connector
13.Connector把HttpServletResponse对象返回给客户browser

posted @ 2019-03-05 16:45  小小短腿儿  阅读(2786)  评论(0编辑  收藏  举报