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。