组件分类

在Apache Tomcat中,有几个顶级组件,它们是Tomcat的核心组件,负责整个服务器的运行和管理。这些顶级组件包括: Server(服务器):Tomcat的server.xml配置文件中的<Server>元素代表整个Tomcat服务器实例。每个Tomcat实例通常只有一个Server元素,它是Tomcat的最高级别组件,表示整个Tomcat服务器。 Service(服务):Service元素是Tomcat的server.xml文件中的子元素,表示Tomcat服务器上的一个服务。每个Service元素都有一个唯一的名称,并包含一个或多个Connector元素。一个Tomcat实例可以包含多个Service,每个Service都可以包含多个Connector。 Connector(连接器):Connector元素是Tomcat的server.xml文件中Service元素的子元素,它表示Tomcat服务器与客户端之间的连接器,负责处理客户端请求和响应。每个Connector元素定义了不同的传输协议和端口,例如HTTP、HTTPS、AJP等。Tomcat支持多种类型的连接器。 Container(容器):Container是Tomcat的一个重要概念,它代表一个可以处理请求的组件。Tomcat中有两种主要类型的容器: Engine(引擎):Engine是Tomcat的server.xml文件中Service元素的子元素,代表一个虚拟主机。每个 Service可以有多个Engine,每个Engine代表一个虚拟主机,用于处理来自客户端的请求。 Host(主机):Host是Tomcat的server.xml文件中Engine元素的子元素,代表一个具体的Web应用程序。每个Engine可以有多个Host,每个Host代表一个Web应用程序,可以是单独的域名或虚拟主机。 这些顶级组件共同构成了Tomcat的架构,并负责处理来自客户端的请求、处理连接和管理Tomcat服务器的服务。它们之间有着紧密的关联,形成一个完整的服务器体系结构。通过在server.xml文件中配置这些组件,可以对Tomcat服务器进行灵活的定制和配置,以满足不同的需求和场景。 集群类组件:有一些集群类组件可以帮助实现Tomcat服务器的集群部署,以提高性能和可靠性。这些组件允许多个Tomcat服务器协同工作,共享负载和会话数据。 image.png Server(服务器):<Server>元素是整个Tomcat服务器的最顶级组件,代表整个Tomcat实例。一个server.xml文件中通常只有一个Server元素。Server元素包含一个或多个Service元素。

Service(服务):<Service>元素是Tomcat的server.xml文件中Server元素的子元素,代表Tomcat服务器上的一个服务。每个Service元素都有一个唯一的名称,并包含一个或多个Connector元素以及其他组件。一个Tomcat实例可以包含多个Service。

Connector(连接器):<Connector>元素是Tomcat的server.xml文件中Service元素的子元素,代表Tomcat服务器与客户端之间的连接器,负责处理客户端请求和响应。每个Connector元素定义了不同的传输协议和端口,例如HTTP、HTTPS、AJP等。

Engine(引擎):<Engine>元素是Tomcat的server.xml文件中Service元素的子元素,代表一个虚拟主机(Virtual Host)。每个Service可以有多个Engine,每个Engine代表一个虚拟主机,用于处理来自客户端的请求。

Host(主机):<Host>元素是Tomcat的server.xml文件中Engine元素的子元素,代表一个具体的Web应用程序。每个Engine可以有多个Host,每个Host代表一个Web应用程序,可以是单独的域名或虚拟主机。

Context(上下文):<Context>元素是Tomcat的server.xml文件中Host元素的子元素,代表Web应用程序的上下文。Context元素用于配置特定Web应用程序的上下文环境,例如数据库连接池、数据源等。

Web应用程序:Web应用程序是部署在Tomcat服务器上的实际应用程序,通常是一个WAR文件或一个目录。每个Host可以部署多个Web应用程序,每个Web应用程序都由一个Context元素表示。 假设我们有一个简单的Tomcat服务器配置,其中包含一个Service,一个Connector,一个Engine,一个Host和一个Context。以下是该配置的server.xml片段:

<Server port="8005">
  <Service name="myService">
    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" />
    <Engine name="myEngine" defaultHost="localhost">
      <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Context path="" docBase="mywebapp" />
      </Host>
    </Engine>
  </Service>
</Server>

现在,让我们来解释一下用户访问Tomcat服务时这些元素之间的关系:

1、用户发起请求:假设用户在浏览器中输入URL http://localhost:8080/,并按下回车,发起一个HTTP请求。

2、Connector处理请求:Connector元素监听在端口8080上,它负责处理HTTP请求和响应。当用户的请求到达端口8080时,Connector会接收并解析该请求。

3、Engine处理请求:Engine元素代表虚拟主机,负责处理接收到的请求。在本例中,Engine名称为"myEngine"。Connector将请求转发给Engine进行处理。

4、Host处理请求:Engine会根据请求中的域名或虚拟主机名(在这里为"localhost")选择一个Host进行处理。在本例中,Host名称为"localhost"。Engine将请求转发给选择的Host。

5、Context处理请求:Host代表一个Web应用程序(在这里为"mywebapp")。当Host接收到请求后,它会根据请求的URL路径选择相应的Context进行处理。在本例中,Context的路径为"",表示根路径。Host将请求转发给选择的Context。

6、Web应用程序处理请求:Context代表一个Web应用程序(在这里为"mywebapp"),它包含Web应用程序的内容。当Context接收到请求后,它会处理该请求并返回相应的内容给用户。

7、用户接收响应:最后,用户的浏览器接收到来自Tomcat服务器的响应,它可能是一个HTML页面、图片、文本文件等,然后显示在用户的浏览器中。

这样,用户的请求经过Connector、Engine、Host和Context的处理,最终被Web应用程序处理并返回响应给用户。这些元素之间的关系形成了Tomcat服务器的请求处理流程,确保请求能够正确地路由到相应的Web应用程序进行处理。

应用部署

在Apache Tomcat中,应用部署是将Web应用程序(通常以WAR文件或目录形式存在)部署到Tomcat服务器,使其可以在服务器上运行。以下是在Tomcat中进行应用部署的一般步骤:

准备Web应用程序:首先,您需要准备一个Web应用程序,它通常是一个包含Web资源(例如HTML、JSP、CSS、JavaScript等)和Servlet类的WAR文件。或者,您也可以将Web应用程序的内容放在一个目录中。

停止Tomcat服务器(可选):在部署新的应用程序之前,建议停止Tomcat服务器。这可以确保在部署过程中没有正在运行的应用程序。

部署Web应用程序:将Web应用程序(WAR文件或目录)复制到Tomcat服务器的webapps目录中。在这个目录下,每个子目录或WAR文件都代表一个Web应用程序。Tomcat将在启动时自动部署这些应用程序。

启动Tomcat服务器:一旦Web应用程序被复制到webapps目录中,您可以启动Tomcat服务器。Tomcat将自动检测到新部署的应用程序并将其部署到服务器中。

访问Web应用程序:一旦Tomcat服务器启动并成功部署了应用程序,您可以通过URL来访问它。默认情况下,如果您将Web应用程序部署为myapp.war或myapp目录,可以通过http://localhost:8080/myapp来访问它

特殊根目录

omcat中默认网站根目录是CATALINA_BASE/webapps/ 在Tomcat中部署主站应用程序和其他应用程序,和之前WEB服务程序不同 在Tomcat的webapps目录中,有个非常特殊的目录ROOT,它就是网站默认根目录。

在Apache Tomcat中,ROOT是指Web应用程序的根目录,也称为默认上下文(Default Context)。当用户通过根路径(/)访问Tomcat服务器时,Tomcat将自动将请求映射到ROOT目录下的Web应用程序。通常,将Web应用程序放置在webapps目录下并命名为ROOT.war或ROOT目录,即可使其成为默认上下文。

例如,如果您将一个名为myapp.war的Web应用程序部署到Tomcat的webapps目录下,则可以通过http://localhost:8080/myapp来访问该应用程序。但是,如果您将Web应用程序命名为ROOT.war或将其放置在名为ROOT的目录下,那么它将成为默认上下文,您可以通过http://localhost:8080/来访问该应用程序,而无需在URL中指定应用程序的名称。

使用ROOT作为默认上下文对于将某个Web应用程序设置为网站的主页非常有用。如果您想要让Tomcat中的某个Web应用程序成为默认的主页,只需将该应用程序部署为ROOT.war或将其放置在名为ROOT的目录下,这样用户在访问服务器的根路径时将会自动访问该应用程序。

请注意,只能有一个Web应用程序作为ROOT目录,即使在Tomcat的webapps目录下放置了多个名为ROOT.war的文件或ROOT目录,Tomcat只会选择一个作为默认上下文。因此,在部署多个Web应用程序时,请确保只有一个应用程序具有ROOT名称,以避免冲突。
JSP WebApp目录结构

WEB-INF目录:这是Web应用程序的重要目录之一,它通常放在Web应用程序的根目录下。WEB-INF目录中的内容不可直接被客户端访问,只能通过后台代码访问。它包含以下子目录和文件:

WEB-INF/lib:用于存放Web应用程序所需的第三方JAR文件。 WEB-INF/classes:用于存放编译后的Java类文件和其他资源。 web.xml:是Web应用程序的部署描述文件,其中包含Servlet、过滤器、监听器等配置信息。 META-INF目录:该目录通常位于Web应用程序的根目录下,用于存放一些应用程序级别的配置文件和清单文件(manifest)。

index.jsp:这是Web应用程序的默认首页文件,当用户访问根路径时会自动显示该文件。

css、js、images目录:这些目录用于存放网页所需的CSS样式表、JavaScript文件和图片资源。

WEB-INF/lib目录:用于存放Web应用程序所需的第三方JAR文件,例如数据库驱动、工具库等。

WEB-INF/classes目录:用于存放编译后的Java类文件和其他资源,例如配置文件等 image.png image.png

webapp归档格式

.war:WebApp打包 .jar:EJB类打包文件 .rar:资源适配器类打包文件 .ear:企业级WebApp打包 传统应用开发测试后,通常打包为war格式,这种文件部署到了Tomcat的webapps下,还可以自动展开

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
Context配置

Context作用: 路径映射 应用独立配置,例如单独配置应用日志、单独配置应用访问控制

<Context path="/test" docBase="/data/test" reloadable="false" />

path指的是访问的路径 docBase,可以是绝对路径,也可以是相对路径(相对于Host的appBase) reloadable,true表示如果WEB-INF/classes或META-INF/lib目录下.class文件有改动,就会将WEB应用 重新加载,性能消耗很大。生成环境中,会使用false来禁用。 将~/projects/myapp/下面的项目文件复制到/data/下