`
liebaorun
  • 浏览: 22792 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

Tomcat源码分析(阀门)

阅读更多
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源码分析(启动框架).pdf

    ### TOMCAT源码分析——启动框架详解 #### 一、前言 TOMCAT作为一款广泛使用的开源Java Servlet容器,其内部实现复杂且强大。本文旨在深入剖析TOMCAT的启动框架及其整体架构,帮助读者更好地理解其工作原理。...

    深入剖析Tomcat源码

    《深入剖析Tomcat源码》是一本专注于解析Apache Tomcat服务器内部工作原理的书籍,而提供的压缩包文件正是这本书中的源代码示例。Tomcat作为一款广泛应用的开源Java Servlet容器,其源码对于理解Web应用服务器的工作...

    Tomcat7 核心包 catalina包源码

    通过深入学习和分析,开发者不仅可以了解Web服务器的工作原理,还能更好地定制和优化Tomcat,提升应用的性能和安全性。对于希望深入理解Java Web开发和服务器底层逻辑的开发者来说,这是一份不可或缺的学习资料。

    apache-tomcat-7.0.14-src.zip

    此外,源码分析还可以帮助我们理解Tomcat的安全机制,如如何配置和使用Realm(认证域)来管理用户身份验证,以及如何通过Valve(阀门)接口插入自定义的请求处理逻辑。Valve是Tomcat中的一个关键组件,可以拦截和...

    tomcat 6.0源码

    通过分析Tomcat 6.0的源码,开发者不仅可以学习到Servlet和JSP的运行机制,还可以了解到Web服务器的设计模式、性能优化以及安全性控制等方面的知识。这对于提升Java Web开发技能和理解服务器底层运作至关重要。

    apache-tomcat-8.5.68-src

    Tomcat的插件式架构允许开发者通过编写Valve(阀门)组件,插入到请求处理链中,实现自定义的功能。源码中可以看到Valve的生命周期管理和配置。 9. **性能优化**: 通过对源码的研究,可以了解到Tomcat如何缓存...

    Apache-tomcat6

    开发者可以通过分析源码来深入理解Tomcat的工作原理,进行定制化开发,或者对Tomcat进行调试和优化。源码包含了服务器的核心组件,如Catalina(核心引擎)、Coyote(连接器)和Jasper(JSP编译器)等,以及相关的...

    how tomcat works——(5)容器

    五、容器与源码分析 了解了容器的基本概念后,对于开发者来说,阅读Tomcat的源码可以帮助更深入地理解容器的工作原理。Tomcat的源码组织清晰,通过跟踪ContainerBase、StandardEngine、StandardHost、...

    tomcat7-research:tomcat原始码学习

    【标题】"Tomcat7研究:Tomcat源码探索" 【描述】深入研究Apache Tomcat 7源码,是理解这个流行的开源Java Servlet容器内部工作原理的重要步骤。Tomcat作为一个轻量级应用服务器,广泛应用于各种Web应用程序部署,...

    my_Tomcat_7042:学习tomcat_7042源码时候的工程

    【标题】"my_Tomcat_7042:学习tomcat_7042源码时候的工程"指的是...通过深入学习Tomcat源码,开发者不仅可以了解HTTP服务器的工作原理,还能掌握JavaEE应用服务器的核心技术,为构建和优化自己的Web应用打下坚实基础。

    WEB服务器工作机制由浅至深(8):【How Tomcat Works】第14章Server和Service

    9. **源码分析** 对于希望深入了解Tomcat工作原理的开发者,阅读源码是必不可少的步骤。Tomcat的源码清晰地展示了各个组件的交互过程,对于学习Servlet容器的实现机制非常有帮助。 10. **工具支持** 在调试和监控...

    tomcat6:tomcat6的所有源码,自己在里面添加注释和阅读文案,作为学习服务器的资料

    Tomcat6允许开发者通过JMX(Java Management Extensions)和自定义Valves(阀门)进行扩展。源码中展示了这些机制的实现,为定制化服务器功能提供了可能。 10. **部署与热更新**: Tomcat6支持自动部署和热更新,...

    cat connectors 4.1.24源代码

    深入学习Tomcat Connectors源代码,可以帮助我们了解Web服务器和Servlet容器间的通信细节,优化性能瓶颈,甚至定制自己的协议处理器或阀门。使用IDE(如Eclipse或IntelliJ IDEA)导入源代码,结合API文档,可以方便...

    基于Java的校园智慧节水管理系统的设计与实现(论文+源码)-kaic.doc

    - 源码+论文:提供的资源不仅有系统的源代码,还有相关的学术论文,提供全面的实现细节和理论分析。 【部分内容】提到了研究的章节,包括研究背景、意义、文献综述、研究内容和方法。第一章阐述了项目的研究背景、...

Global site tag (gtag.js) - Google Analytics