Tomcat整体结构(一)——连接器和容器

来源:互联网 发布:linux vim 复制一行 编辑:程序博客网 时间:2024/05/21 09:42

tomcat的心脏是连接器和容器


Connector

连接器等待http请求,创建request和response对象,调用容器的invoke方法,将对象传给servlet容器,servlet容器加载servlet类,调用其service方法,管理session,处理错误信息

工作流程主要创建服务器套接字监听端口,然后创建连接,转至处理线程,创建request和response对象,


Container


管道任务机制

它说明了servlet容器invoke后会发生什么事,管道是servlet容器将要执行的一系列任务,阀指具体的一个任务,类似于拦截连和拦截器,servlet容器的invoke交由管道完成

public void invoke(Resquest request,Response response){    Pipeline.invoke(request,response);}
管道遍历执行阀,tomcat使用另外的机制实现遍历,即实现一个pipeline的内部类valveContext类,该类可以访问管道的所有阀,通过invokeNext方法实现遍历

public void invokeNext(request,response){    int age = 0;    age = age+1;    if(age < valva.length)    {        valva[age].invoke(request,response)    }    else if(age == valva.length)   {        basic.invoke(request,response)   }    else{system.out.print(“ No valva")}}

每个valva调用valvaContext,valva的参数变为invoke(request,response,valvaContext)

public invoke(request,response,valvaContext){    //...    valvaContext.invokeNext(request,response,this)}

Wrapper容器

Wrapper容器表示一个servlet定义,是最底层的servlet容器,它需要负责servlet类的生命周期,即servlet的init、service、destory方法,它核心方法是load(载入并初始化一个servlet),allocate(分配一个初始化的实例)


容器通过一系列方法能够方便的接入各种组件比如载入器、阀等

一个简单的Wrapper应用程序

1、创建连接器

2、创建容器,指定servletname

3、创建载入器和阀

4、容器设置载入器和阀

5、将容器实例设置为连接器的servlet容器,初始化并启动连接器


Context容器

是一个web应用程序,基础阀使用一个映射器来查找一个自容器,由子容器负责处理接受到的请求