1.Tomcat组件及关系
Server
--Service
--Connector
--Engine
--Host
--Context
--Wrapper(Servlet)
Server代表Tomcat应用服务器,它可以包含多个Service服务;一个Service服务包含多个Connector和一个Engine;一个Engine可以包含多个虚拟主机Host;一个Host可以包含多个Web应用Context,而每个Web下有可以包含多个Wrapper(Servlet的包装器)
组件及其关系可以参考Tomcat的Server.xml及Web.xml文件
2.当一个请求到达时,Connector会把它包装成Request对象,同时生成Response对象;然后Connector会调用Engine的invoke方法,它又会调用Host的invoke 方法,Host的invoke方法又会调用Context的invoke方法,最后,Context的invoke方法调用Wrapper的invoke方法,至此,责任链调用结束。
接口及实现:
a.Pipeline , 此接口的实现主要用于维护阀门及先后关系,实现见 org.apache.catalina.core.StandardPipleline
public interface Pipeline {
//获取最后一个阀门
public Valve getBasic();
//设置最后一个阀门
public void setBasic(Valve valve);
//添加阀门
public void addValve(Valve valve);
public Valve[] getValves();
public void removeValve(Valve valve);
//获取第一个阀门
public Valve getFirst();
}
b.Valve , 阀门接口,主要用于做过滤工作
public interface Valve {
public String getInfo();
//获取下一个阀门
public Valve getNext();
//设置下一个阀门
public void setNext(Valve valve);
public void backgroundProcess();
//阀门过滤
public void invoke(Request request, Response response)
throws IOException, ServletException;
}
c.下面是与责任链有关的实现代码,以Engine的标准实现StandardEngine为例
StandardEngine{
public StandardEngine() {
super();
//设置StandardEngineValve为Engine的最后一个阀门
pipeline.setBasic(new StandardEngineValve());
}
//添加阀门
public synchronized void addValve(Valve valve) {
pipeline.addValve(valve);
}
//此方法被Connector调用
public void invoke(Request request, Response response)
throws IOException, ServletException {
pipeline.getFirst().invoke(request, response);
}
}
d.StandardEngine简单阀门的实现
SimpleValve implements Valve{
....
//阀门过滤方法
public void invoke(Request request, Response response)
throws IOException, ServletException{
//do something
//调用下一个阀门的invoke方法
getNext().invoke(Request request, Response response);
//do something
}
}
e.StandardEngine最后一个阀门(StandardEngineValve)的实现
StandardEngineValve extends ValveBase{
...
public void invoke(Request request, Response response)
throws IOException, ServletException{
Host host = request.getHost();
//至此,StandardEngine中的阀门都已处理完毕,下面把request、
//response对象交给host处理
host.getPipeline().getFirst().invoke(request, response);
}
c,d,e代码即为StandardEngine责任链调用的主要代码,Host、Context、Wrapper的责任链调用相关代码与其类似,阀门可以在Server.xml及Web.xml中配置
分享到:
相关推荐
### TOMCAT源码分析——启动框架详解 #### 一、前言 TOMCAT作为一款广泛使用的开源Java Servlet容器,其内部实现复杂且强大。本文旨在深入剖析TOMCAT的启动框架及其整体架构,帮助读者更好地理解其工作原理。...
《深入剖析Tomcat源码》是一本专注于解析Apache Tomcat服务器内部工作原理的书籍,而提供的压缩包文件正是这本书中的源代码示例。Tomcat作为一款广泛应用的开源Java Servlet容器,其源码对于理解Web应用服务器的工作...
通过深入学习和分析,开发者不仅可以了解Web服务器的工作原理,还能更好地定制和优化Tomcat,提升应用的性能和安全性。对于希望深入理解Java Web开发和服务器底层逻辑的开发者来说,这是一份不可或缺的学习资料。
此外,源码分析还可以帮助我们理解Tomcat的安全机制,如如何配置和使用Realm(认证域)来管理用户身份验证,以及如何通过Valve(阀门)接口插入自定义的请求处理逻辑。Valve是Tomcat中的一个关键组件,可以拦截和...
通过分析Tomcat 6.0的源码,开发者不仅可以学习到Servlet和JSP的运行机制,还可以了解到Web服务器的设计模式、性能优化以及安全性控制等方面的知识。这对于提升Java Web开发技能和理解服务器底层运作至关重要。
Tomcat的插件式架构允许开发者通过编写Valve(阀门)组件,插入到请求处理链中,实现自定义的功能。源码中可以看到Valve的生命周期管理和配置。 9. **性能优化**: 通过对源码的研究,可以了解到Tomcat如何缓存...
开发者可以通过分析源码来深入理解Tomcat的工作原理,进行定制化开发,或者对Tomcat进行调试和优化。源码包含了服务器的核心组件,如Catalina(核心引擎)、Coyote(连接器)和Jasper(JSP编译器)等,以及相关的...
五、容器与源码分析 了解了容器的基本概念后,对于开发者来说,阅读Tomcat的源码可以帮助更深入地理解容器的工作原理。Tomcat的源码组织清晰,通过跟踪ContainerBase、StandardEngine、StandardHost、...
【标题】"Tomcat7研究:Tomcat源码探索" 【描述】深入研究Apache Tomcat 7源码,是理解这个流行的开源Java Servlet容器内部工作原理的重要步骤。Tomcat作为一个轻量级应用服务器,广泛应用于各种Web应用程序部署,...
【标题】"my_Tomcat_7042:学习tomcat_7042源码时候的工程"指的是...通过深入学习Tomcat源码,开发者不仅可以了解HTTP服务器的工作原理,还能掌握JavaEE应用服务器的核心技术,为构建和优化自己的Web应用打下坚实基础。
9. **源码分析** 对于希望深入了解Tomcat工作原理的开发者,阅读源码是必不可少的步骤。Tomcat的源码清晰地展示了各个组件的交互过程,对于学习Servlet容器的实现机制非常有帮助。 10. **工具支持** 在调试和监控...
Tomcat6允许开发者通过JMX(Java Management Extensions)和自定义Valves(阀门)进行扩展。源码中展示了这些机制的实现,为定制化服务器功能提供了可能。 10. **部署与热更新**: Tomcat6支持自动部署和热更新,...
深入学习Tomcat Connectors源代码,可以帮助我们了解Web服务器和Servlet容器间的通信细节,优化性能瓶颈,甚至定制自己的协议处理器或阀门。使用IDE(如Eclipse或IntelliJ IDEA)导入源代码,结合API文档,可以方便...
- 源码+论文:提供的资源不仅有系统的源代码,还有相关的学术论文,提供全面的实现细节和理论分析。 【部分内容】提到了研究的章节,包括研究背景、意义、文献综述、研究内容和方法。第一章阐述了项目的研究背景、...