一.核心组件

1.组件分层分类

顶级组件
Server,代表整个Tomcat容器一台主机可以启动tomcat实例需要确保端口不要产生冲突

服务类组件
Service实现组织Engine和Connector,建立两者之间关联关系, service 里面只能包含一个Engine

连接器组件
Connector,有HTTP(默认端口8080/tcp)、HTTPS(默认端口8443/tcp)、AJP(默认端口8009/tcp协议连接器,AJP(Apache Jserv protocol)是一种基于TCP的二进制通讯协议

容器
Engine、Host虚拟主机)、Context(上下文件,解决路径映射)都是容器类组件,可以嵌入其它组件,内部配置如何运行应用程序

内嵌
可以内嵌到其他组件内,valve、loggerrealmloadermanager等。以logger举例,在不同容器组件内分别定义

集群类组件
listener、cluster

2. Tomcat 内部组成

上述组件就构成了Tomcat,如下图

image-20220713141144180

名 称 说 明
Server 服务器Tomcat 运行进程实例一个Server中可以有多个service,但通常就一个
Service 服务就是一个容器,用来组织Engine和Connector的对应关系一个service中只有一个Engine,多个 Connector
Connector 连接器,相当于端口号负责客户端的HTTP、HTTPS、AJP等协议连接一个Connector只属于一个Engine
Engine 引擎用来响应处理用户请求。一个Engine上可以绑定多个Connector,一个引擎中包好多个host主机
Host 虚拟主机,可以实现虚拟主机,例如使用不同主机头区分
Context 应用上下文配置特定url路径映射目录映射关系url => directory

每一个组件都由一个Java“类”实现,这些组件大体可分为以下几个类型

顶级组件:Server
服务类组件:Service
连接器组件:http, https, ajpapache jserv protocol)
容器类:Engine, Host, Context嵌套类:valve, logger, realm, loader, manager, ...
集群类组件:listener, cluster, ...

范例: 查看

[root@centos8:/usr/local/tomcat/conf]#
grep className /usr/local/tomcat/conf/server.xml
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.security.SecurityListener" />
  <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" />
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

3.核心组件

范例:多个组件关系 conf/server.xml这个文件提现了这些组件的关系,

一个tomcat有一个server,最外层是server,对应一个实例,server中包含services,services对应的是connectorconnectorengine当中connectorengine进行了关联(catalina进行关联),当用户通过某个接口发过来请求,应该对应engine进行处理,而engine中可以包含多个虚拟主机,下文中的hostlocalhostappsbaceapps目录webapps是/usr/local/tomcat/webapps文件夹,虚拟主机目录就在此文件夹下,(表示用户访问connector port8080的时候,请求就是对应引擎engine进行处理,虚拟主机对应的为default指定localhost虚拟主机)

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"
			  redirectPort="8443" />
	<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
	<Engine name="Catalina" defaultHost="localhost">
		<Host name="localhost" appBase="webapps" unpackWARs="true"  autoDeploy="true">
		<Context >
		<Context />
	  </Host>
	</Engine>
  </Service>
</Server>

4. tomcat 处理请求过程

假设来自客户的请求为:http://localhost:8080/test/index.jsp

二.根目录结构

1.tomcat根目录结构

Tomcat中默认网站根目录是$CATALINA_BASE/webapps/
在Tomcat中部署主站应用程序和其他应用程序,和之前WEB服务程序不同。

nginx
假设nginx部署2个网站应用eshop、forum,假设网站根目录是/data/nginx/html,那么部署可以是这样的。
eshop解压缩所有文件放到 /data/nginx/html/ 目录下,forum 的文件放在 /data/nginx/html/forum/ 下。

最终网站链接有以下对应关系

http://localhost/ 对应于eshop应用,即 /data/nginx/html/
http://localhost/forum/ 对应于forum的应用,即/data/nginx/html/forum/

Tomcat
Tomcat中默认网站根目录是$CATALINA_BASE/webapps/
在Tomcat的webapps目录中,有个非常特殊的目录ROOT,它就是网站默认根目录,在根目录/usr/local/tomcat/webapps/中多一层ROOT目录,访问时候不添加。根目录/usr/local/tomcat/webapps/下的文件夹都认为不同的应用文件夹,默认是root,访问的时候root可以省略,但是其他应用访问的时候就不能省略应用文件夹,必须写全部uri

将eshop解压后的文件放到这个$CATALINA_BASE/webapps/ROOT中
bbs解压后文件都放在$CATALINA_BASE/webapps/forum目录下。

$CATALINA_BASE/webapps下面的每个目录都对应一个Web应用,即WebApp
最终网站链接有以下对应关系  
http://localhost/ 对应于eshop应用WebApp,即$CATALINA_BASE/webapps/ROOT/目录,
http://localhost/forum/ 对应于forum的应用WebApp,即$CATALINA_BASE/webapps/forum/
如果同时存在$CATALINA_BASE /webapps/ROOT/forum ,仍以 $CATALINA_BASE/webapps/forum/ 优先生效
每一个虚拟主机都可以使用appBase指令配置自己站点目录,使用appBase目录下的ROOT目录作为
主站目录。  
1.路径测试
[root@centos8:/usr/local/tomcat/conf]#
cd /usr/local/tomcat/webapps/
[root@centos8:/usr/local/tomcat/webapps]#
mkdir blog
[root@centos8:/usr/local/tomcat/webapps]#
vim blog/index.html
/usr/local/tomcat/webapps/blog/index.html

#测试
[root@centos8:/usr/local/tomcat/webapps]#
curl 10.0.0.18:8080/blog/
/usr/local/tomcat/webapps/blog/index.html

2.JSP WebApp目录结构

原文地址:https://blog.csdn.net/aa896517050/article/details/125783561

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_37080.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注