还是觉得该细整下tomcat源码执行的一个过程,先上自己画的图:
tomcat的容器container有四种:engine,host, context, wrapper,它们的标准实现分别是StandardEngine, StandardHost, StandardContext, StandardWrapper。上面仅是以connect直接调用从context开始的一个调用过程,如果画全了,则是从connector起调用StandardEngine,然后依照图的相似调用engine->host->context->wrapper顺序,而每种container的具体运行依赖pipeline,valve。各容器的标准实现都是继承ContainerBase,里面有pipeline,初始化都是一个标准实现StandardPipeline,即容器初始化时已经有StandardPipeline,而valve每种容器都有自己的实现StandardEngineValve,StandardHostValve,StandardContextValve,StandardWrapperValve。StandardPipeline里有一个valve的数组,还有一个单独的valve属性作为basic,在各容器初始化时,会(以StandardEngine构造函数为例):
public StandardEngine() {
super();
pipeline.setBasic(new StandardEngineValve());
}
其他的容器类似。
在容器调用invoke时,是通用ContainerBase里的invoke方法,其调用pipeline的invoke()方法,在StandardPipeline中的invoke实现则是通过内部类StandardPipelineValveContext实现,直接调用他的invokeNext方法,
protected class StandardPipelineValveContext
implements ValveContext {
protected int stage = 0;
public String getInfo() {
return info;
}
public void invokeNext(Request request, Response response)
throws IOException, ServletException {
int subscript = stage;
stage = stage + 1;
if (subscript < valves.length) {
valves[subscript].invoke(request, response, this);
} else if ((subscript == valves.length) && (basic != null)) {
basic.invoke(request, response, this);
} else {
throw new ServletException
(sm.getString("standardPipeline.noValve"));
}
}
}
其实现思路很清晰,先按顺序执行pipeline里valve数组中各invoke,各valve的invoke先执行自己要执行的动作,然后通过带过去的StandardPipelineValveContext对象,再调用其invokeNext,这样变量stage由于加一了,所以继续调用下一个valve的invoke,一直这样下去,最后valve数组全部执行完毕,会执行basic的valve,所有container类型的valve实现中的invoke方法中最后一个参数pipelineValveContext,都不会起作用,因为到basic表示所有的阀门已经结束,之所以要带这个参数,只是为了跟其他valve共用相同的接口罢了。
- 大小: 142.5 KB
分享到:
相关推荐
1.tomcat源码文件 2.tomcat程序文件 3.Ant程序文件 4.tomcat源码在eclipse运行,重新编译,重新打包步骤文件 5.一个tomcat源码在eclipse上运行的java工程 作用: 1.用于学习tomcat源码和了解tomcat运行机制 2.学习...
MyEclipse导入Tomcat源码.wps文档说明 apache-tomcat-6.0.37-src.zip源码
Tomcat源码Tomcat源码Tomcat源码Tomcat源码Tomcat源码Tomcat源码Tomcat源码
tomcat的源码解析资料,加上tomcat的pdf解析中文版的,tomcat的源码。 挺不错的资源,大家可以学习下。
Tomcat源码剖析 : 整体架构 层层分析 源码解析 架构分析 (Http服务器功能:Socket通信(TCP/IP)、解析Http报文 Servlet容器功能:有很多Servlet(自带系统级Servlet+自定义Servlet),Servlet处理具体的业务逻辑...
how tomcat work源码及中文翻译
tomcat7源码下载tomcat7源码下载tomcat7源码下载tomcat7源码下载tomcat7源码下载tomcat7源码下载tomcat7源码下载tomcat7源码下载
手把手教你搭建Tomcat7源码开发环境,如果有了如下说明还搭建不成功,建议考虑下自己的理解能力,能不能走编码这条路。附近包括Tomcat源码、Tomcat源码开发环境依赖的包、Tomcat的环境编译工具ant 1、建立如下...
java源码:Tomcat 安装apr 支持 Tomcat Native.zip
NULL 博文链接:https://pirate4444.iteye.com/blog/2076706
tomcat 源码分析系列文档 http深入分析,tomcat中类的加载,tomcat的启动,tomcat的容器思想,
tomcat的源码包
Java毕业设计项目源码:基于SSM框架的教务管理系统 软件架构 项目框架我采用的是:Spring+springMVC+Mybatis+Shiro+Layui+Tomcat 操作系统:Windows 数据库:Mysql8.0.16 服务器:Tomcat8.5.38 开发工具:IntelliJ ...
tomcat 源码tomcat 源码tomcat 源码tomcat 源码tomcat 源码tomcat 源码tomcat 源码tomcat 源码tomcat 源码tomcat 源码tomcat 源码tomcat 源码tomcat 源码tomcat 源码tomcat 源码
tomcat源码导入myeclipse,里面包括所支持的jar文件与详细的导入说明
tomcat源码解析
tomcat7的源码项目,可以导入到eclipse,自己编译运行tomcat。
Tomcat源码研究.pdf
Tomcat 源码研究 全面解析Tomcat源码