`
- 浏览:
116547 次
- 性别:
- 来自:
苏州
-
Host和Engine
1. Host
1)StandardHost类
catalina中org.apache.catalina.core.StandardHost类是Host接口的标准实现。该类继承自the org.apache.catalina.core.ContainerBase类,实现了Host和Deployer接口。
与StandardContext和StandardWrapper类似,StandardHost的构造函数会将basic valve(org.apache.catalina.core.StandardHostValve)添加到其pipeline中。
每当接收到一个http请求,会调用host的invoke方法。在StandardHost类并没有提供invoke方法的实现,因此,它会调用其父类ContainerBase的invoke方法。而会ContainerBase的invoke方法调用StandardHostValve的invoke方法。此外,StandardHostValve的invoke方法会调用StandardHost的map方法来获取一个context处理http请求。
2)StandardHostMapper类
3)StandardHostValve类
org.apache.catalina.core.StandardHostValve类是StandardHost的basic valve。
在tomcat4中,invoke方法通过调用StandardHost的map方法来获取合适的context。
最后,invoke方法调用context的invoke来处理http请求。
2. Engine
1)Engine接口
org.apache.catalina.Engine接口表示了一个engine对象,也就是tomcat整个的servlet引擎。当部署tomcat时要使用多个虚拟机的话,就需要使用engine。事实上,部署的tomcat都会是使用一个engine。
2)StandardEngine类
org.apache.catalina.core.StandardEngine类是Engine接口的标准实现。相比与StandardContext类和StandardHost类,StandardEngine类相对小一些。在实例化的时候,StandardEngine会添加一个basic valve
作为一个顶层container,engine的子container只能是host,所以,若是给它设置以了一个非host的container,会抛出异常。
3)StandardEngineValve类
org.apache.catalina.core.StandardEngineValve类是StandardEngine的basic valve。
在验证了request和response对象的类型后,invoke方法会获取host对象,用来处理请求。
3. Server与Service
1)server
org.apache.catalina.Server接口表示了整个catalina的servlet引擎,囊括了所有的组件。server使用一种优雅的方法来启动/停止整个系统,不需要对connector和container分别启动/关闭。
当启动server时,server会负责启动其所有的组件,然后就等待关闭命令。server使用service来获取组件,如connector和container。
shutdown属性保存了发送给server的关闭命令。port属性保存了server会从哪个端口获取关闭命令。addService方法用于为server添加service,removeService方法则可以删除某个service。initialize方法会在启动之前执行。
2)StandardServer
org.apache.catalina.core.StandardServer类是Server接口的标准实现。其中的shutdown方法是最重要的,用于关闭server。该类中的许多方法用于将server配置信息保存为一个新的server.xml文件。
与StandardServer的生命周期有关的方法有:initialize,start,stop和await。与其他组件类似,initialize用于初始化,start用于启动,然后调用await等待关闭命令,最后,调用stop关闭server。调用await方法后,server会被阻塞,直到总8085端口(或其他端口,自定)收到了关闭命令。当await命令返回后,stop方法会关闭所有的子组件。
3)Service接口
org.apache.catalina.Service接口表示了一个service。一个service可以持有一个container和多个connector,所有的connector都会与这个container相关联。
4)StandardService类
org.apache.catalina.core.StandardService类是Service接口的标准实现。StandardService的initialize方法用于初始化添加到其中的connector。StandardService类还实现Lifecycle接口,因此,它也可以启动connector和container。
connector和container
StandardService对象中有两种组件:connector和container。其中container只有一个,connector可以有多个。多个connector使用tomcat可以多种不同的请求协议。例如,一个处理http请求,一个处理https请求。
4.Bootstrap类
Bootstrap类的main方法会创建一个engine,一个host,一个context,两个wrapper和一个connector。然后,将它们进行关联。但,需要注意的是,connector并没有与顶层container(engine)相关联。相反,main方法创建了一个service对象,和一个server对象,将service添加到server中:
Service service = new StandardService();
service.setName("Stand-alone Service");
Server server = new StandardServer();
server.addService(service);
然后,main方法将connector和engine添加到service中:
service.addConnector(connector);
service.setContainer(engine);
这样,connector就和container关联起来了。然后,main方法调用server的initialize和start方法,初始化connector,并将connector和container启动:
if (server instanceof Lifecycle) {
try {
server.initialize();
((Lifecycle) server).start();
接下来,main方法调用server的await方法,进入循环等待,监听8085端口。注意,此时connector已经其中,但监听的是另一个端口8080。当await返回时,说明接收到了关闭命令,此时,main方法调用server的stop方法,关闭其所有组件。
Stopper类
Stopper类通过socket向server发送一个关闭命令,从而关闭server。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
【标题】"Tomcat5.0+6.0" 指的是Apache Tomcat服务器的两个不同版本,分别是5.0版和6.0版。Apache Tomcat是一款开源的...学习和了解这两个版本有助于深入理解Tomcat的历史演进,以及如何根据项目需求选择合适的版本。
Java Web开发是软件行业中一个广泛讨论的话题,涵盖了诸如Servlet、JSP、JDBC、MVC框架、企业级组件以及各种工具和技术。...通过学习和参考这些笔记,可以提升Java Web开发技能,更好地应对实际项目中的挑战。
3. Tomcat配置:Tomcat是常用的Java应用服务器,配置过程可能会遇到问题,包括设置classpath、创建Web应用等。正确配置是确保服务器能够正确运行Servlet和JSP的关键。 4. 查询用户名和密码的URL:在Android应用中,...
确保安装的是JDK 8或更高版本,因为Liferay DXP(当前稳定版)需要这个版本的Java。同时,安装一个合适的IDE,例如Eclipse或IntelliJ IDEA,并配置好JDK路径。 接下来,你需要获取Liferay Portal的源码。Liferay...
8. **部署与调试**:学会在Tomcat、GlassFish、WebLogic等J2EE服务器上部署Flex应用,并使用Flex SDK的调试工具进行问题排查。 通过阅读和分析这个博客文章,开发者可以获得关于如何在实际项目中结合Flex和J2EE的...