How Tomcat works之第十一章之Parent and Child
来源:互联网 发布:淘宝美工要会什么 编辑:程序博客网 时间:2024/06/11 04:01
一个wrapper表示一个容器,这个容器盛放了每个单独的Servlet。因此,一个wrapper不能有一个子容器,它的addChild方法不应该被调用。如果调用了,将获得一个java.lang.IllegalStateException。下面是StandardWrapper类中addChild方法的实现。
public void addChild(Container child) {
throw new IllegalStateException
(sm.getString("StandardWrapper.notChild"));
}
一个wrapper的父类必须是一个上下文的实现。如果传递的不是一个上下文的容器给它,它的setParent方法将抛出一个java.lang.IllegalStateException.
public void setParent(Container container) {
if ((container != null) && !(container instanceof Context))
throw new IllegalArgumentException
(sm.getString("standardWrapper.notContext"));
super.setParent(container);
}
StandardWrapperFacade
StandardWrapper实例调用它要加载的Servlet的init方法。init方法需要一个ServletConfig和实现了ServletConfig接口的StandardWrapper类,因此本质上,一个StandardWrapper对象可以将自身传递给init方法。然而,StandardWrapper类需要对Servlet隐藏起public方法。为了完成这个,StandardWrapper类封装自身为一个StandardWrapperFacade的实例。图11.2显示了StandardWrapperFacade与StandardWrapper之间的关系。两者都实现了ServletConfig接口。
这里将StandardWrapper对象传递给StandardWrapperFacade类的构造器。
private StandardWrapperFacade facade = new StandardWrapperFacade(this);
StandardWrapperFacade类有类型为ServletConfig的成员变量。
private ServletConfig config=null;
当一个StandardWrapperFacade的实例在StandardWrapperr对象中创建的时候,StandardWrapperFacade的构造方法被传入这个包含的StandardWrapper对象,随后构造方法将传入的参数赋值给config变量。
之后,当StandardWrapper类调用这个Servlet实例的init方法的时候,它传递了一个StandardWrapperFacade的实例。从servlet内部调用ServletConfig的上述四个方法仅仅是调用StandardWrapper类中对应实现的四个方法。
public String getServletName() {
return config.getServletName();
}
public String getInitParameter(String name) {
return config.getInitParameter(name);
}
public Enumeration getInitParameterNames() {
return config.getInitParameterNames();
}
调用getServletContext方法有点复杂
public ServletContext getServletContext() {
ServletContext theContext = config.getServletContext();
if ((theContext != null) && (theContext instanceof
ApplicationContext))
theContext = ((ApplicationContext) theContext).getFacade();
return (theContext);
}
这个方法调用了StandardWrapper类的getServletContext方法,却返回了ServletContext的门面实例而不是ServletContext对象本身。
- How Tomcat works之第十一章之Parent and Child
- How Tomcat works之第十一章之The ServletConfig 对象
- How Tomcat works 之第十一章之StandardWrapperValue
- How tomcat works 之第十一章之 FilterDef
- How Tomcat works之第十一章之ApplicationFilterChain
- How Tomcat works之第十一章之ApplicationFilterChain
- How Tomcat works之第十一章 Allocate The Servlet
- How Tomcat works之 Host and Engine
- How Tomcat Works之第十二章之invoke方法
- How Tomcat works 之第十二章之重新载入支持
- How Tomcat works 之第十三章之 StandardHostMapper
- How Tomcat works之第六章:Lifecycle生命周期
- How Tomcat works之第九章 会话管理
- How Tomcat works 之第九章 BootStrap类
- How Tomcat works 之第十章 Security 安全
- How Tomcat works 之The Application 应用
- How Tomcat works 之 StandardWrapper 标准包装
- How Tomcat works之StandardContext 标准上下文
- poj 2774 lcp
- 操作系统ucore实验_lab2_debug
- 缺训傥督凡窖植境盘釉酶赋黑诙谓
- U-BOOT环境变量实现
- C# 读取Excel的一些问题
- How Tomcat works之第十一章之Parent and Child
- 对ATDD的理解
- MFC制作简单的图片按钮
- 写一个自动备份的脚本
- 实例化Class类对象几种方式
- vimrc
- linux
- u-boot环境变量的设置与使用
- direct-insert 用nologging时是否会减少undo