Tomcat项目部署和Tomcat四大容器介绍

本文详细介绍了Tomcat的四种部署方式:描述符部署、war包部署、文件夹部署及通过server.xml配置部署。深入探讨了Tomcat作为Servlet容器的工作原理,包括其内部的Engine、Host、Context和Wrapper四大容器组件的作用与配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Tomcat的部署方式:

在部署的时候Tomcat是并行部署项目
可以参照:https://www.cnblogs.com/honger/p/10362774.html
描述符部署
deployDescriptors(configBase,configBase.list())
从configBase部署发布XML描述文件
war包部署
deployWARs(appBase, filteredAppPaths);
.war可以全部是class文件。其中web.xml也是可以删除的。
但是将其打包为.jar包放在Tomcat文件夹下是无法生效的,因为在Java中一般.jar包是一个依赖包而且源码中也有文件类型判断。
用.war包结尾的就被Tomcat视为一个项目。
在Tomcat的代码中有一个判断,只有当程序为.war结尾时才会去走以下的逻辑。
文件夹部署
deployDirectories(appBase, filteredAppPaths);
可以通过指定地址部署,不用复制到Tomcat下。
在部署Tomcat项目的时候可以在server.xml文件中的目录下定义一个节点。path代表应用名(访问的时候的名字,http的地址),docBase代表项目的地址

Tomcat是一个Servlet容器

public class MyServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
         response.getWriter().println("hello")
    }
}

在实现该功能的时候肯定要执行myServlet.doGet()方法,该方法是由Tomcat实现的。
处理请求的大致流程。

开始请求--->Request--->RequestFacade--->myServlet.doGet(RequestFacade) 
//Tomcat最后调用的是myServlet.service(RequestFacade)方法,在方法中使用doGet方法

Tomcat四大容器
Engine,Host,Context,Wrapper
Tomcat相当于一个虚拟主机:一个虚拟主机下可以部署多个项目。也可以说多个项目属于一个虚拟主机。
Engine—>Host—>Context—>Wrapper—>Servlet
Engine,Host,Context,Wrapper都是servlet容器。
Engine,Host都是集群管理器。
Wrapper:对servlet进行区分。类似于,有多个类包含servlet,每个类中有 多个servlet(List),在Wrapper层将每个类中的servlet封装在一起,Context层将所有类的servlet封装在一起(LIst)。
普通的servlet在Tomcat中是所有的请求线程共享一个实例。(可以理解为单例)

public class MyServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
         response.getWriter().println("hello")
    }
}

如果实现了SingleThreadModel接口。每个请求都单独有一个servlet实例。

public class MyServlet extends HttpServlet implements SingleThreadModel{
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
         response.getWriter().println("hello")
    }
}

如下的nameproject是属于name.com主机的。下面的所有name必须保证是同一个IP地址,这样才能保证Tomcat能接收到请求。
在进行Host配置的时候一定要加上项目路径。例如
Host的优点:

  1. 可以针对每一个Host进行不同的配置。比如:单独记录日志。
  2. 当同一个机器上有多个不同类型的项目时容易区分。
  3. 相互之间的影响减少,解耦。
server.xml

<Host name="name.com" appBase="webappss">
    <Contest path="/nameproject" docBase="D:\IDEA\spring" >
    <!-- 所有访问name.com的日志文件都放在localhost_access_log下 -->
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
        prefix="localhost_access_log" suffix=".txt"
        pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>

<Host name="baidu.com" appBase="webappss2">
</Host>

<Host name="localhost" appBase="webappss2">
</Host>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值