Tomcat-学习目录
1、Tomcat-目录结构介绍
1.1、Tomcat主目录介绍
]# ll /usr/local/tomcat/
drwxr-x--- 2 root root 4096 May 3 14:13 bin # 主要包含启动和关闭tomcat脚本,以及依赖jar文件
drwx------ 3 root root 254 May 3 14:15 conf # tomcat配置文件目录
drwxr-x--- 2 root root 4096 May 3 14:13 lib # tomcat运行需要加载的jar包
drwxr-x--- 2 root root 197 May 3 14:15 logs # tomcat在运行过程中产生的日志文件#tomcat存放临时文件
drwxr-x--- 2 root root 30 May 3 14:13 temp # 临时文件存放位置
drwxr-x--- 7 root root 81 Apr 13 16:10 webapps # tomcat默认站点目录
drwxr-x--- 3 root root 22 May 3 14:15 work # tomcat运行时产生的缓存文件
1.2、【conf】目录介绍
【conf】目录主要是用来存放tomcat的一些配置文件。
server.xml可以设置端口号、设置域名或IP、默认加载的项目、请求编码
web.xml可以设置tomcat支持的文件类型
context.xml可以用来配置数据源之类的
tomcat-users.xml用来配置管理tomcat的用户与权限
在Catalina目录下可以设置默认加载的项目
2、server.xml 【Tomcat主配置文件解析】
]# cat /usr/local/tomcat/conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- server表示一个tocmat实例,通过8005远程调用可以关闭tomcat-->
<Server port="8005" shutdown="SHUTDOWN">
<!-- 监听器 -->
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<!-- 全局资源 -->
<GlobalNamingResources>
<!--base认证模块->所有站点都能使用 -> conf/tomcat-users.xmL文件定义-->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<!-- http连接器->处理请求与响应-->
<Service name="Catalina">
<! --http连接器->处理请求与响应-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
/>
<!-- 共享线程池-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
/>
-->
<!-- 定义 SSL/TLS HTTP/1.1,证书格式:jks -->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true"
maxParameterCount="1000"
>
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
-->
<!-- 定义 SSL/TLS HTTP/1.1 证书格式:pem-->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true"
maxParameterCount="1000"
>
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
certificateFile="conf/localhost-rsa-cert.pem"
certificateChainFile="conf/localhost-rsa-chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
-->
< ! --ajp连接器 -> apache代理tomcat使用mod_jk需要该协议 -->
<!--
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443"
maxParameterCount="1000"
/>
-->
<!-- Engine引擎 -->
<Engine name="Catalina" defaultHost="localhost">
<!--多个tomcat配置相同Cluster进行session共享的一种解决方案 -->
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
<!-- 调用认证配置,引入UserDatabase资源定义的用户名及密码进行base认证 -->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<!--默认网站站点-->
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
3、server.xml 【Tomcat主配置文件【图解】】
3.1、请求流程图

3.2、Tomcat的HTTP请求过程
1、用户发出一个请求,如http://tomcat.cyc.com:8080/index.jsp
2、Connector发现是http/1.1协议,而且还是8080端口,于是就把请求接收后交给符合条件的Engine
3、Engine通过请求中的主机名tomcat.oldxu.com查找满足条件的虚拟主机(Host)
4、找到后就去此虚拟主机指定的appBase (代码存放的目录)最后将解析产生的结果返回给用户。
3.3、解析说明
一个server表示一个tomcat实例(当然也可以有多个实例)
一个server中包含多个Connector连接器,Connector的主要功能是接受、响应用户请求。
service的作用是∶将connector关联至engine(catalina引擎)
一个host就是一个站点,类似于nginx的多站点
context类似于nginx中location的概念