How Tomcat Works之第十二章之invoke方法
来源:互联网 发布:生化危机人工智能红后 编辑:程序博客网 时间:2024/06/02 20:18
在Tomcat 4中,StandardContext的invoke方法由相关联的连接器调用或者如果StandardContext是一个主机的子容器,由host的invoke方法调用。StandardContext的invoke方法先检查应用的重载是否发生。如果是的,就等到应用的重新载入完成为止。之后调用它父类invoke方法,Containerbase。下面显示了StandardContext类的invoke方法。
getPaused方法返回paused属性的返回值,如果应用正在重新载入,这个属性值为true。应用重新载入在下一部分讨论。
在Tomcat 5 中,StandardContext不提供invoke方法的实现而是调用父类ContainerBase的invoke方法。应用重载的检查由StandardContextValue的invoke方法完成。
StandardContextMapper
对于每个到来的请求,将调用StandardContext的pipeline的基本值的invoke方法。StandardContext的基本值由StandardContextValue类表示。StandardContextValue的invoke方法的首先需要做的是获取处理这个请求的wrapper。
在 Tomcat 4中,StandardContextValue实例在维护的StandardContext中搜索。StandardContextValue使用上下文的mapper来找到一个合适的wrapper。一旦获取了wrapper,就调用wrapper的invoke方法。在找出StandardContextValue做什么之前,这一部分展示了mapper组件的介绍。
ContainerBase类,StandardContext的父类,定义了addDefaultMapper方法来添加一个默认的额mapper。
StandardContext类在start方法中调用addDefaultMapper方法,并传递了mapperClass变量。
Public synchronized void start() throws lifecycleException{
If(ok){
Try{
addDefaultMapper(this.mapperClass);
}
}
StandardContext类定义了mapperClass变量,
Private String mapperClass = “org.apache.catalina.core.StandardContextMapper”;
稍后你必须调用mapper的setContainer方法使一个mapper与一个容器关联。StandardContextMapper类是org.apache.catalina.Mapper接口的实现类。StandardContextMapper只能与一个context关联,用setContainer方法指定。
在一个mapper中最重要的事情是一个map,将返回一个子容器来处理一个HTTP请求。方法签名如下:
Public Container map(Request request,Response response);
在StandardContextMapper中,map返回一个处理请求的wrapper。如果没有合适的wrapper返回,map方法返回为null。
StandardContextValue实例为每个到来的请求调用context的mapper方法,并传递一个org.apache.catalina.Request对象。Map方法(在父类ContainerBase中)首先为一个特别的协议获取一个mapper,这里通过调用findMapper方法,之后调用mapper的map方法。
StandardContextMapper的map方法首先指定了要被映射的上下文关联的URI:
之后获取一个wrapper,并要满足以下规则:
你可能会问,上下文为何有这样的信息作为servlet映射。回顾第十一章的BootStrap类添加了两个servlet映射给StandardContext。
它也添加了wrapper作为context的子容器
Tomcat 5移除了Mapper接口及其相关类。实际上,实际上,StandardContextValue类的invoke方法从请求对象中获取了适合的wrapper。
指明了mapper信息封装在request对象中。
- How Tomcat Works之第十二章之invoke方法
- How Tomcat works 之第十二章之重新载入支持
- How Tomcat works之第十一章之The ServletConfig 对象
- How Tomcat works之第十一章之Parent and Child
- How Tomcat works 之第十一章之StandardWrapperValue
- How tomcat works 之第十一章之 FilterDef
- How Tomcat works之第十一章之ApplicationFilterChain
- How Tomcat works 之第十三章之 StandardHostMapper
- How Tomcat works之第十一章之ApplicationFilterChain
- How Tomcat works之第六章:Lifecycle生命周期
- How Tomcat works之第九章 会话管理
- How Tomcat works 之第九章 BootStrap类
- How Tomcat works 之第十章 Security 安全
- How Tomcat works之第十一章 Allocate The Servlet
- How Tomcat works 之The Application 应用
- How Tomcat works 之 StandardWrapper 标准包装
- How Tomcat works之StandardContext 标准上下文
- How Tomcat works之 Host and Engine
- OCP 1Z0 052 V9.02 201
- How Tomcat works之StandardContext 标准上下文
- MySQL与一些简单查询命令
- Array of Strings to Convert to Mixed Array
- 基于Atmel128A单片机的工业以太网卡设计(实现uip1.0协议)
- How Tomcat Works之第十二章之invoke方法
- web.xml之load-on-startup
- 【OJ】---R---复数类--重载运算符+
- validation插件忽略校验
- 人生领悟
- GDB
- asp.net向自定义控件传递参数-两个例子
- Ubuntu安装二:在VM中安装Ubuntu
- 深入理解Linux内存映射机制