Tomcat
Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选
tomcat是web服务,类似于apache,Apache是提供html静态的web服务,只有集成了lamp的架构Apache才可以通过PHP和MySQL提供动态页面,而Tomcat不是,Tomcat是由Java编写的服务程序,运行在jdk(java环境)下,主要应用APP(或者说java的服务端)的服务端,为APP提供服务,本身即可提供动态页面(.jsp)的请求,当有html时也可以处理静态页面
tomcat是Apache的服务的扩展,但是tomcat是作为独立于Apache的一个独立进程运行的,可以单独使用Tomcat
另外tomcat也是可以与Apache进行架构,组合使用,Apache作为tomcat的代理,用户访问请求由Apache接受,如果是静态页面Apache进行处理,如果是动态页面则交给tomcat处理
jdk介绍 (Java运行环境)
安装tomcat需要安装jdk环境 本身自带jdk环境 但是里面的命令不完整 所以需要自己安装一个
jdk(java development kit)是java语言的软件开发工具包
主要组件:
Tomcat主要组件:服务器Server,服务Service,连接器Connector、容器Container。连接器Connector和容器Container是Tomcat的核心
一个Container容器和一个或多个Connector连接器组合在一起,加上其他一些支持的组件共同组成一个Service服务,有了Service服务便可以对外提供能力了,但是Service服务的生存需要一个环境,这个环境便是Server,Server组件为Service服务的正常使用提供了生存环境,Server组件可以同时管理一个或多个Service服务
三种工作模式
tomcat目录下文件:
- bin 存放tomcat常用的脚本文件 启动/关闭等
- lib 存放tomcat的依赖库文件
- webapps 存放tomcat的站点根目录默认访问到下面的root目录,加载的index.jsp文件,包括需要部署的war包 当用户访问tomcat时默认访问此位置下的ROOT目录下的jsp文件
- conf 存放tomcat的配置文件
- server.xml 服务配置文件 /usr/local/tomcat/conf/server.xml
- web.cml 站点配置文件 /usr/local/tomcat/conf/web.cml
- logs 存放tomcat的日志文件
- catalina.out 错误日志 标准输出和标准出错,此日志不会自动分割,大于2G时会受到影响,具体见-解疑释难
- catalina.2021-11-20.log 运行日志,启动和暂停时的运行日志
- localhost_access_log.2021-11-20.txt 访问日志
- temp 存放tomcat的临时生成的文件
- work 存放tomcat运行时所需的.class文件,所有java编写的文件需要编译成.class文件才能使用
tomcat的架构
-
server(服务器)(就是tomcat)
提供一个接口让其他程序能够访问到service集合、同时要维护它所包含的所有service的生命周期,包括如何初始化、如何结束服务、如何找到别人要访问的service
-
service(服务,由一个或多个service对外提供服务)
Service是server下一个集合,service包含多个接收请求的connector并有一个处理所有连接的容器container
-
connector(连接器)
Connector作用是监听客户端请求,并将请求封装提交container处理,然后将处理结果返回客户端。
Tomcat有两个典型的connector,一个用来监听浏览器的http请求,通过8080端口侦听来自客户browser(浏览器)的http请求,另一个是用来监听来自其他服务器的请求,通过8009端口侦听其他服务的请求
-
container(容器,一个service只能有一个容器,其实就是engine)
engine(引擎)
Engine下可以配置多个virtual host(虚拟主机),每个虚拟主机都有一个域名,当engine获得一个请求时,它把该请求匹配到某个host(主机)上,然后把该请求交给host来处理。
Engine 有一个默认虚拟主机,当请求无法匹配到任何一个host上的时候,将交给该默认host来处理
host
代表一个virtual host(虚拟主机),每个虚拟主机和某个网络域名domain name相匹配(绑定)。
每个虚拟主机下都可以deploy(部署)一个或者多个web app(或者说站点),每个web app对应一个context(上下文或者说页面),有一个context path(上下文路径或者说页面文件路径位置)。
当host获得一个请求时,将把该请求匹配到某个context上,然后把该请求交给该context来处理。
所有无法和其他context的路径名匹配的请求都将最终和该默认context匹配
-
context
一个context对应于一个web application(web应用程序),其实一个context就是一个jsp页面,在host下和有多个页面,多个页面组成了一个网站,简单来说就是一个虚拟主机对应了一个网站后台或者一个app的后台,而这个网站或者app需要多个页面时就需要编写多个对应jsp页面文件和context配置信息,多个页面利用类似超链接的技术进行页面切换
Tomcat顶层架构小结
Tomcat中只有一个Server,一个Server可以有多个Service,一个Service可以有多个Connector和一个Container;
Server掌管着整个Tomcat的生死大权;
Service 是对外提供服务的;
Connector用于接受请求并将请求封装成Request和Response来具体处理;
Container用于封装和管理Servlet,以及具体处理request请求
关于端口和连接器
tomcat可以用到的大概有4个端口8080/8009/8005/8443
-
8080端口负责监听客户端http请求,进行响应
-
8009端口负责监听其他服务端ajp请求,进行响应,比如Apache+tomcat时监听Apache
-
8005端口负责监听关闭服务命令
-
8443端口负责监听客户端的https的请求
-
特殊情况:当使用Apache+tomcat时,客户端通过443端口请求jsp页面,Apache通过8443端口相tomcat转发请求
端口和连接器关系:
第一个connector连接器监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。当使用的https时,重定向的8443端口
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
第二个connector连接器监听8009端口,负责使用ajp协议接受其他HTTP服务器的请求连接。当与其他服务合作时使用的是https,重定向到8443端口
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
访问流程描述:
- 客户端通过8080端口向服务端发送请求,被监听8080端口Connector(使用http协议的连接器)获得,然后转交Container容器(Engine)处理等待回应,Engine对所有host虚拟主机进行匹配,匹配到host虚拟主机以后,则匹配对应虚拟主机的context页面进行处理(这个处理过程较为复杂,无需深究),context处理完毕后返还host,host返还Engine,Engine返还Connector,Connector通过http对客户端进行响应。若是没有host虚拟主机匹配成功,则最后转交给默认虚拟主机处理
- 当有其他服务请求tomcat时,被监听8009端口的Connector(使用ajp协议的连接器)获得,然后转交Container容器(Engine)处理等待回应。。。。。。。。。同1
- 关闭服务时,执行shutdown.sh关闭tomcat时就是连接8005端口执行“SHUTDOWN”命令
- 当客户端使用https协议连接时,被监听8443端口的Connector(使用http协议的连接器)获得,然后转交Container容器(Engine)处理等待回应。。。。。。。。。同1
业务访问流程图
配置文件
Tomcat 的配置文件由4个 xml 文件组成,分别是 context.xml、web.xml、server.xml、tomcat-users.xml 文件组成
注释后的配置文件
配置文件结构图
组成,分别是 context.xml、web.xml、server.xml、tomcat-users.xml 文件组成
注释后的配置文件
[外链图片转存中…(img-eNUjE1qy-1663486191841)]