tomcat的架构中有这样一个接口 org.apache.catalina.ContainerServlet 只要在配置的servlet上实现这个接口,tomcat的web容器在启动初始化servlet的时候就会调用 public void setWrapper(Wrapper wrapper) 接口将 org.apache.catalina.Wrapper 注入到Servlet类中。
tomcat中已经有org.apache.catalina.manager.ManagerServlet 这个类实现了这个接口
public class ManagerServlet
extends HttpServlet implements ContainerServlet {
//。。。。
通过Wrapper对象可以取得到web容器中其他几个非常重要的容器级别的对象,如下:
public void setWrapper(Wrapper wrapper) {
this.wrapper = wrapper;
if (wrapper == null) {
context = null;
host = null;
oname = null;
} else {
context = (Context) wrapper.getParent();
host = (Host) context.getParent();
Engine engine = (Engine) host.getParent();
try {
oname = new ObjectName(engine.getName()
+ ":type=Deployer,host=" + host.getName());
} catch (Exception e) {
// ?
}
}
// Retrieve the MBean server
mBeanServer = Registry.getRegistry(null, null).getMBeanServer();
}
- org.apache.catalina.Context
- org.apache.catalina.Wrapper
- org.apache.catalina.Host
- org.apache.catalina.Engine
这几个对象都能得到,这几个层次关系是 engine包含host,host包含context,context包含wrapper,每一个wrapper对应了一个单独的servlet。