一、基本概念
1. Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器
2. 尽管Tomcat可以作为独立Java Web服务器,但对静态资源(HTML、图像文件等)的处理速度,Web服务器管理都不如Apache、IIS服务器等其他专业的HTTP服务器,可以通过Tomcat服务器来运行Servelt/JSP组件
3. Tomcat作为Servlet容器,负责处理客户请求,把请求传送给Servlet并把结果返回给客户
4. tomcat是由java开发的,所以它目录的lib下面还会有jar包
二、目录结构
1. tomcat目录结构
1)bin
(1)主要用来存放Tomcat的命令,很多环境变量也在此处设置
2)conf
(1)存放tomcat服务器全局配置的各种配置文件
3)lib
(1)存放Tomcat服务器所需要的所有Jar包
(2)我们在连接数据库时常常烦恼每创建一个项目就要引入一个对应的oracle的Jar包或MySQL的Jar。但是如果你把这两个Jar包放在此目录下,就可以引入一次,以后再创建项目时不需要每次都引入Jar包
4)logs
(1)logs目录用来存放tomcat在运行过程中产生的日志文件,非常重要的是在控制台输出的日志。(清空不会对tomcat运行带来影响)
5)temp
(1)temp目录用户存放tomcat在运行过程中产生的临时文件。(清空不会对tomcat运行带来影响)
6)webapps
(1)tomcat默认部署路径
(2)目录用来存放应用程序,当Tomcat启动时会加载webapps目录下的应用程序
(3)当然可以以war包、Jar包、普通文件夹三种形式发布应用。你也可以把应用程序存放在电脑磁盘的任意一个位置,但是在配置文件中要配置好,使其映射好
7) work
(1)work目录用来存放tomcat在运行时的编译后文件,例如JSP编译后的文件
(2)清空work目录,然后重启tomcat,可以达到清除缓存的作用
2. JavaWeb应用目录结构
三、tomcat的组件
1. 顶层类元素
1)Server
(1)Tomcat中最顶层的容器是Server,代表着整个服务器,一个Server可以包含至少一个Service,用于具体提供服务
(2)Server掌管着整个Tomcat的生死大权
2)Service
(1)Service主要包含两个部分:Connector和Container
(2)Service主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收入站请求交将其转发至关联的引擎进行处理。困此,Service要包含一个引擎、一个或多个连接器
2. 连接器类元素
连接器类元素代表了介于客户与服务之间的通信接口,负责将客户的请求发送给服务器,并将服务器的响应传递给客户
1)connetor
(1)Tomcat应该考虑工作情形并为相应情形下的请求分别定义好需要的连接器才能正确接收来自于客户端的请求。一个引擎可以有一个或多个连接器,以适应多种请求方式
(2)Connector最底层使用的是Socket来进行连接的,Request和Response是按照HTTP协议来封装的,所以Connector同时需要实现TCP/IP协议和HTTP协议
(3)定义连接器可以使用多种属性,有些属性也只适用于某特定的连接器类型。一般说来,常见于server.xml中的连接器类型通常有4种:
a. HTTP连接器
b. SSL连接器
c. AJP 1.3连接器
d. proxy连接器
3. 容器类元素(Container)
容器类元素代表处理客户请求并生成响应结果的组件,有三种容器类元素:Engine、Host和Context
1)engine
(1)Engine是Servlet处理器的一个实例,即servlet引擎,默认为定义在server.xml中的Catalina。Engine需要defaultHost属性来为其定义一个接收所有发往非明确定义虚拟主机的请求的host组件
(2)一个Engine元素中可以包含多个Host元素,每个Host元素定义了一个主机,它可以包含一个或者多个Web应用
2)host
(1)位于Engine容器中用于接收请求并进行相应处理的主机或虚拟主机
3)context
(1)Context在某些意义上类似于apache中的路径别名,一个Context定义用于标识tomcat实例中的一个Web应用程序
(2)Context是使用得最频繁的元素,每个Context元素代表了运行在虚拟机上的单个Web应用,一个Host元素中可以包含多个Context元素
4. 嵌套类元素
嵌套类元素代表了可以添加到容器中的组件,比如<Logger>元素、<Valve>元素和<Realm>元素
1)realm
(1)一个Realm表示一个安全上下文,它是一个授权访问某个给定Context的用户列表和某用户所允许切换的角色相关定义的列表
(2)因此,Realm就像是一个用户和组相关的数据库。定义Realm时惟一必须要提供的属性是classname,它是Realm的多个不同实现,用于表示此Realm认证的用户及角色等认证信息的存放位置
2)valve
(1)Valve类似于过滤器,它可以工作于Engine和Host/Context之间、Host和Context之间以及Context和Web应用程序的某资源之间。一个容器内可以建立多个Valve,而且Valve定义的次序也决定了它们生效的次序
四、Tomcat处理一个http请求的过程
假设来自客户的请求为:http://localhost:8080/wsota/wsota_index.jsp
1. 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
1)Connector的主要任务是负责接收浏览器的发过来的 tcp 连接请求,创建一个 Request 和 Response 对象分别用于和请求端交换数据,然后会产生一个线程来处理这个请求并把产生的 Request 和 Response 对象传给处理这个请求的线程
2. Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
3. Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
4. Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
5. localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
6. Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为”"的Context去处理)
7. path=”/wsota”的Context获得请求/wsota_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
参考网址
JavaWeb学习总结(二)——Tomcat服务器学习和使用(一)
注:文章是经过参考其他的文章然后自己整理出来的,有可能是小部分参考,也有可能是大部分参考,但绝对不是直接转载,觉得侵权了我会删,我只是把这个用于自己的笔记,顺便整理下知识的同时,能帮到一部分人。
ps : 有错误的还望各位大佬指正,小弟不胜感激