tomcat说明
tomcat是一个servlet容器,有3个基本任务,
- 当第一次调用某个servlet时,载入该Servlet类,并调用其init方法(该方法只调用一次)
- 针对每个请求,创建一个ServletRequest对象和一个ServletResponse对象
- 调用Servlet的service方法
tomcat目录说明
- bin:存放启动和关闭Tomcat的脚本文件
- conf:存放Tomcat服务器的各种配置文件
- conf/Catalina 用于存储针对每个虚拟机的Context配置
- conf/context.xml 用于定义所有web应用均需要加载的context.xml配置,如果web应用指定了自己的context.xml,那么该文件的配置将被覆盖
- conf/catalina.properties tomcat环境配置
- conf/catalina.policy tomcat在安全模式下运行时,此文件为默认的安全策略配置
- conf/logging.properties 日志配置
- conf/server.xml 核心配置文件,用于配置链接器、监听端口、处理请求的虚拟主机等
- conf/tomcat-users.xml 定义tomcat默认用户及角色信息
- conf/web.xml 所有应用默认的部署描述文件,主要定义了基础的Servlet和MIME映射,如果应用中不包含web.xml,tomcat将使用该文件初始化部署描述,否则会进行合并
- lib:存放tomcat服务器依赖的jar包
- logs:存放Tomcat的日志文件
- temp:存放Tomcat运行时产生的临时文件
- webapps:web应用部署目录,即供外界访问的web资源的存放目录
- work:Tomcat的工作目录,web应用jsp代码生成和编译临时目录
tomcat组件说明
一个Tomcat中只有一个Server,一个Server可以包含多个Service,一个Service只有一个Container,但是有多个Contectors
Server 表示整个服务器,是最顶层的元素,是整个Tomcat启动的入口,tomcat运行环境中只有唯一一个Server实例,Server中包含至少一个Service,用于提供服务,主要任务,就是提供一个接口让客户端能够访问到这个Service集合,同时维护它所包含的所有的Service的声明周期,包括如何初始化、如何结束服务、如何找到客户端要访问的Service
Service 表示一个或多个Connector的集合,这些Connector共享同一个Container(Engine)来处理其请求。在同一个tomcat实例内可以包含任意多个Service实例,它们彼此独立,一个Service可以包含多个Connector,但是只能包含一个Container(Engine);其中Connector的作用是从客户端接收请求,Container的作用是处理接收进来的请求
Connector tomcat连接器,用于处理连接相关的事情,开启Socket并监听,同时将读取的Socket请求交由Container处理,支持不同的协议以及不同的I/O方式
Container 表示能够执行客户端请求并返回响应的一类对象,用于封装Servlet,以及具体处理request请求,Container是一个接口,针对不同级别的容器分为四个子接口:Engine、Host、Context、Wrapper
Engine 表示整个Servlet引擎,用来管理多个站点。在tomcat中,Engine为最高级别的容器对象,Engine不是直接处理请求的容器,是获得目标容器的入口,一个Service中最多只有一个Engine
Host 表示Servlet引擎(即Engine)中的虚拟主机(即一个站点),属于Egine的子容器,与一个服务器的网络名有关,如域名等。客户端可以使用这个网络名连接服务器,这个名称必须要在DNS服务器上注册,每个Host组件代表Engine中的一个虚拟主机。Host组件至少有一个,且其中一个的name必须与Engine组件的defaultHost属性相匹配。
多个虚拟主机之间的应用是隔离的
Context 表示ServletContext即一个应用程序,在Servlet规范中,一个ServletContext即表示一个独立的Web应用,直接管理Servlet在容器中的包装类Wrapper
Wrapper 表示Web应用中定义的Servlet
Executor 表示tomcat组件间可以共享的线程池
Pipeline 管道,管道中可以设置各种value(阀门),请求和响应在经由各个阀门处理,提供了一种灵活可配置的处理请求和响应的机制
Naming 命名服务,JNDI,java命名和目录接口,是一组在java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象,目录服务也是一个命名服务。可以使用JNDI定义数据源、配置信息,用于开发与部署分离