Tomcat原理学习---StandardContext
来源:互联网 发布:搞笑吐槽动漫 知乎 编辑:程序博客网 时间:2024/04/29 07:33
在前面的章节中已经看到,一个上下文容器(Context)代表一个web应用,每一个上下文包括多个包装器(Wrapper),每个包装器代表一个Servlet。但是,上下文还需要其它的一些组件如加载器和管理器。本章要介绍 Catalina中Context接口的标准实现,org.apache.catalina.core.StandardContext类.
我们首先介绍StandardContext对象的初始化和配置,然后讨论跟其相关的类StandardContextMapper(Tomcat 4)和ContextConfig类。接下来看,当容器接受到HTTP请求的时候方法调用顺序。然后,在讨论该类几点重要特性,最后一节讨论Tomcat5中的backgroundProcess方法
StandardContext 配置 :
创建一个StandardContext实例之后,必须调用它的start方法,这样它就能为受到的HTTP请求服务了。一个StandardContext对象可能启动失败,这时候属性available被设置为false,所以属性available表示了StandardContext对象的可用性。
如果start方法启动成功,StandardContext 对象需要配置它的属性。在一个Tomcat部署中,StandardContext的配置过程做了以下事情:准备读取和解析%CATALINA_HOME%/conf 目录下面的web.xml,部署所有应用程序,确保StandardContext实例可以处理应用级别的web.xml。另外,配置需要添加一个验证器阀门和证书阀门。
StandardContext的属性之一是它属性configured,用来表示该StandardContext是否已经配置了。StandardContext使用一个事件监听器来作为它的配置器。当StandardContext实例的start方法被调用的时候,首先触发一个生命周期事件。该事件唤醒一个监听器来配置该StandardContext实例。配置成功后,该监听器将configured属性设置为true。否则,StandardContext对象拒绝启动,这样就不能对HTTP请求进行服务了。
StandardContext 构造函数 :
public StandardContext() {
super();
pipeline.setBasic(new StandardContextValve());
namingResources.setContainer(this);
}
在构造函数中,最重要的事情是在StandardContext的流水线上添加了一个类型
为org.apache.catalina.core.StandardContextValve的基本阀门,该阀门用于
裁判美国连接器获得HTTP请求
启动 StandardContext:
Start方法初始化StandardContext对象并让生命周期监听器配置该StandardContext实例。如果配置成功,生命周期监听器会将configured属性设置为true。最后start方法,将available 属性设置为true或者false。如果是true的话表示该StandardContext属性配置完毕并且所有相关子容器和组件已经成功启动,这样就能对HTTP请求进行服务了,如果是false则表示出现了错误。
StandardContext类将configured的值初始化为false,如果生命周期监听器的配置过程成功,则将该值设置为true。在start方法的最后,它检查StandardContext对象的configured属性,如果该值为true,则启动该StandardContext成,否则调用stop方法停止所有已经启动的组件。
start方法该做的:
· 触发BEFORE_START事件
· 设置availability属性为false
· 设置configured属性为false
· 设置源(resources)
· 设置加载器
· 设置管理器
· 初始化属性map
· 启动跟该上下文相关的组件
· 启动子容器(包装器)
· 启动流水线
· 启动管理器
· 触发START事件。监听器(ContextConfig)会进行一系列配置操作,配置成功后,将StandardContext实例的configured属性设置为true。
· 检查configured属性的值,如果为true:调用postWelcomPages方法,加载子包装器,并将available属性设置为true。如果configured属性为false调用stop方法
· 触发AFTER_START事件
Invoke方法:
在Tomcat4中,StandardContext's方法由相关联的连接器调用,如果该上下文是一个主机(host)的子容器,有该主机的invoke方法调用。StandardContext的invoke方法首先检查是否正在重加载该应用程序,是的话,等待知道加载完毕。然后调用它的父类ContainerBase的invoke方法
在Tomcat5中,StandardContext并没有提供 invoke方法的实现,因此它会执行ContainerBase的invoke方法。检查应用程序加载的任务在StandardContextValve类的invoke方法中完成。
对于每一个请求,invoke方法都会调用StandarContext流水线基本阀门的invoke方法。StandarContext的基本阀门用org.apache.catalina.core.StandardContextValve类表示
StandardContextMapper :
在Tomcat4中,StandardContextValve实例查找包含它的StandardContext。
StandardContextValve使用上下文容器的map 来查找合适的包装器。一旦它得到一个合适的包装器,调用该包装器的invoke方法。
在介绍StandardContextValve的做法的时候,本节先介绍该map组件。
在一个映射器(mapper)中最重要的方法是map方法,它获得一个HTTP请求返回一个子容器,该方法的签名如下:
public Container map(Request request, boolean update)
在StandardContextMapper中map方法返回一个包装器来处理请求。如果找不到合适的包装器,方法返回null。
StandardContextValve调用上下文容器的map方法来处理HTTP请求,传递的参数是org.apache.catalina.Request对象。map方法(ContainerBase类中)返回一个对应相应协议的映射器,然后调用该映射器的map方法。
StandardContextMapper的map方法首先识别上下文的相关URL映射
然后通过匹配方法尝试获得一个包装器
你可能会问,上下文容器时如何获得Servlet 映射的,回头看第十一章中的Bootstrap类,它添加了两个Servlet映射到 StandarContext。
context.addServletMapping("/Primitive", "Primitive");
context.addServletMapping("/Modern", "Modern");
它还将包装器作为子容器添加到上下文容器中。
context.addChild(wrapper1);
context.addChild(wrapper2);
Tomcat 5删除了Mapper接口及其相关类。实际上StandardContextValve的invoke方法就能得到请求的合适包装器。
Wrapper wrapper = request.getWrapper();
这表示映射信息已经包装在请求对象中了。
重加载支持 :
StandardContext定义了reloadable属性来标识是否支持应用程序的重加载。当允许重加载的时候,当web.xml或者WEB-INF/classes目录下的文件被改变的时候会重加载。
StandardContext用它的加载器来加载应用程序。在Tomcat4中,StandardContext 中Loader接口的标准实现WebappLoader类,有一个单独线程来检查WEB-INF目录下面所有类和JAR文件的时间戳。你需要做的是启动该线程,将 WebappLoader关联到StandardContext,使用setContainer方法即可。
backgroundProcess 方法 :
在Tomcat5中,类的时间戳是由backgroundProcess方法调用的。
一个上下文容器需要其它组件如加载器和管理器的支持。这些组件通常需要一个单独的线程来处理后台过程(background processing)。例如,加载器通过一个线程检查类文件和JAR文件的时间戳来支持自动重载。管理器需要一个线程来检查它管理的Session对象过期时间。
在Tomcat4中,这些组件都有自己的线程。 为了节省资源,Tomcat使用了一种不同的方式来处理。所有的后台过程都分享同一个线程。如果一个组件或者是容器需要定期的来执行操作,它需要做的是将这些代码写入到backgroundProcess方法即可。
我们首先介绍StandardContext对象的初始化和配置,然后讨论跟其相关的类StandardContextMapper(Tomcat 4)和ContextConfig类。接下来看,当容器接受到HTTP请求的时候方法调用顺序。然后,在讨论该类几点重要特性,最后一节讨论Tomcat5中的backgroundProcess方法
StandardContext 配置 :
创建一个StandardContext实例之后,必须调用它的start方法,这样它就能为受到的HTTP请求服务了。一个StandardContext对象可能启动失败,这时候属性available被设置为false,所以属性available表示了StandardContext对象的可用性。
如果start方法启动成功,StandardContext 对象需要配置它的属性。在一个Tomcat部署中,StandardContext的配置过程做了以下事情:准备读取和解析%CATALINA_HOME%/conf 目录下面的web.xml,部署所有应用程序,确保StandardContext实例可以处理应用级别的web.xml。另外,配置需要添加一个验证器阀门和证书阀门。
StandardContext的属性之一是它属性configured,用来表示该StandardContext是否已经配置了。StandardContext使用一个事件监听器来作为它的配置器。当StandardContext实例的start方法被调用的时候,首先触发一个生命周期事件。该事件唤醒一个监听器来配置该StandardContext实例。配置成功后,该监听器将configured属性设置为true。否则,StandardContext对象拒绝启动,这样就不能对HTTP请求进行服务了。
StandardContext 构造函数 :
public StandardContext() {
super();
pipeline.setBasic(new StandardContextValve());
namingResources.setContainer(this);
}
在构造函数中,最重要的事情是在StandardContext的流水线上添加了一个类型
为org.apache.catalina.core.StandardContextValve的基本阀门,该阀门用于
裁判美国连接器获得HTTP请求
启动 StandardContext:
Start方法初始化StandardContext对象并让生命周期监听器配置该StandardContext实例。如果配置成功,生命周期监听器会将configured属性设置为true。最后start方法,将available 属性设置为true或者false。如果是true的话表示该StandardContext属性配置完毕并且所有相关子容器和组件已经成功启动,这样就能对HTTP请求进行服务了,如果是false则表示出现了错误。
StandardContext类将configured的值初始化为false,如果生命周期监听器的配置过程成功,则将该值设置为true。在start方法的最后,它检查StandardContext对象的configured属性,如果该值为true,则启动该StandardContext成,否则调用stop方法停止所有已经启动的组件。
start方法该做的:
· 触发BEFORE_START事件
· 设置availability属性为false
· 设置configured属性为false
· 设置源(resources)
· 设置加载器
· 设置管理器
· 初始化属性map
· 启动跟该上下文相关的组件
· 启动子容器(包装器)
· 启动流水线
· 启动管理器
· 触发START事件。监听器(ContextConfig)会进行一系列配置操作,配置成功后,将StandardContext实例的configured属性设置为true。
· 检查configured属性的值,如果为true:调用postWelcomPages方法,加载子包装器,并将available属性设置为true。如果configured属性为false调用stop方法
· 触发AFTER_START事件
Invoke方法:
在Tomcat4中,StandardContext's方法由相关联的连接器调用,如果该上下文是一个主机(host)的子容器,有该主机的invoke方法调用。StandardContext的invoke方法首先检查是否正在重加载该应用程序,是的话,等待知道加载完毕。然后调用它的父类ContainerBase的invoke方法
在Tomcat5中,StandardContext并没有提供 invoke方法的实现,因此它会执行ContainerBase的invoke方法。检查应用程序加载的任务在StandardContextValve类的invoke方法中完成。
对于每一个请求,invoke方法都会调用StandarContext流水线基本阀门的invoke方法。StandarContext的基本阀门用org.apache.catalina.core.StandardContextValve类表示
StandardContextMapper :
在Tomcat4中,StandardContextValve实例查找包含它的StandardContext。
StandardContextValve使用上下文容器的map 来查找合适的包装器。一旦它得到一个合适的包装器,调用该包装器的invoke方法。
在介绍StandardContextValve的做法的时候,本节先介绍该map组件。
在一个映射器(mapper)中最重要的方法是map方法,它获得一个HTTP请求返回一个子容器,该方法的签名如下:
public Container map(Request request, boolean update)
在StandardContextMapper中map方法返回一个包装器来处理请求。如果找不到合适的包装器,方法返回null。
StandardContextValve调用上下文容器的map方法来处理HTTP请求,传递的参数是org.apache.catalina.Request对象。map方法(ContainerBase类中)返回一个对应相应协议的映射器,然后调用该映射器的map方法。
StandardContextMapper的map方法首先识别上下文的相关URL映射
然后通过匹配方法尝试获得一个包装器
你可能会问,上下文容器时如何获得Servlet 映射的,回头看第十一章中的Bootstrap类,它添加了两个Servlet映射到 StandarContext。
context.addServletMapping("/Primitive", "Primitive");
context.addServletMapping("/Modern", "Modern");
它还将包装器作为子容器添加到上下文容器中。
context.addChild(wrapper1);
context.addChild(wrapper2);
Tomcat 5删除了Mapper接口及其相关类。实际上StandardContextValve的invoke方法就能得到请求的合适包装器。
Wrapper wrapper = request.getWrapper();
这表示映射信息已经包装在请求对象中了。
重加载支持 :
StandardContext定义了reloadable属性来标识是否支持应用程序的重加载。当允许重加载的时候,当web.xml或者WEB-INF/classes目录下的文件被改变的时候会重加载。
StandardContext用它的加载器来加载应用程序。在Tomcat4中,StandardContext 中Loader接口的标准实现WebappLoader类,有一个单独线程来检查WEB-INF目录下面所有类和JAR文件的时间戳。你需要做的是启动该线程,将 WebappLoader关联到StandardContext,使用setContainer方法即可。
backgroundProcess 方法 :
在Tomcat5中,类的时间戳是由backgroundProcess方法调用的。
一个上下文容器需要其它组件如加载器和管理器的支持。这些组件通常需要一个单独的线程来处理后台过程(background processing)。例如,加载器通过一个线程检查类文件和JAR文件的时间戳来支持自动重载。管理器需要一个线程来检查它管理的Session对象过期时间。
在Tomcat4中,这些组件都有自己的线程。 为了节省资源,Tomcat使用了一种不同的方式来处理。所有的后台过程都分享同一个线程。如果一个组件或者是容器需要定期的来执行操作,它需要做的是将这些代码写入到backgroundProcess方法即可。
0 0
- Tomcat原理学习---StandardContext
- tomcat解析(十三)StandardContext
- tomcat中StandardContext
- Tomcat从零开始(十八)——StandardContext
- tomcat org.apache.catalina.core.StandardContext startInternal
- How Tomcat works之StandardContext 标准上下文
- How tomcat works 读书笔记十二 StandardContext 上
- How tomcat works 读书笔记十二 StandardContext 下
- Tomcat源码解析(三):StandardContext
- How tomcat works——12 StandardContext
- Tomcat原理学习---生命周期
- Tomcat原理学习---安全
- Tomcat原理学习---StandardWrapper
- tomcat解析(十五)StandardContext.start的其它内容
- tomcat(12)org.apache.catalina.core.StandardContext源码剖析
- Tomcat 8/7 无法启动 [StandardEngine[Catalina].StandardHost[localhost].StandardContext
- tomcat启动报错org.apache.catalina.core.StandardContext listenerStart
- Tomcat原理学习---Socket类
- Tomcat原理学习---安全
- 添加新maven 公共repository
- Tomcat原理学习---StandardWrapper
- C#中的Form,textBox,Bitmap,PictureBox,Button,WebBrowser
- IOS7系统最新漏洞
- Tomcat原理学习---StandardContext
- java压缩和解压文件
- 笔记41--Dialog和Popupwindow
- 关于套接字
- Tomcat原理学习---主机(host)和引擎(engine)
- 多线程和同步的实现方法
- 设计模式-多例模式
- sizeof(class)
- 怎样用matlab实现do-while