How Tomcat works 之第十三章之 StandardHostMapper

来源:互联网 发布:自动按键的软件 编辑:程序博客网 时间:2024/04/30 07:03

在Tomcat 4中ContainerBase类,StandardHost类的父类,调用start方法中addDefaultMapper方法创建一个默认的映射。默认映射的类型由mapperClass属性决定。下面是ContainerBase类中addDefaultMapper方法的实现。





StandardHost类定义了mapperClass变量:



StandardHost类的start方法调用supper.start()确保了默认mapper的创建。

 

 

注意:Tomcat 4中的StandardContext类使用一种稍微不同的方式创建默认的mapper。它的start方法不调用super.start()方法。相反,StandardContext类的start方法调用addDefaultMapper方法,并传递了mapperClass变量。

 

在StandardHostMapper类中最重要的方法是map方法。



注意这个map方法仅仅调用Host的map方法。

 

 

StandHostValue

 

此类为StandardHost的基本值。当请求来的时候调用其invoke方法。代码内容如下:





Tomcat 4 中的invoke方法通过调用StandardHost的map方法获取合适的Context。



注意 获取一个Context饶了很到一圈。上述的map方法获取两个参数。这是定义在ContainerBase类中的map方法。在ContainerBase类的map方法之后在其子对象中找到了合适的mapper。(这里是StandardHost实例)并调用其map方法。

 

 

 

Invoke方法之后获取与这个请求对象关联的会话对象并调用其access方法。Access方法更新了最后一次访问时间。这里是StandardSession类的acess方法。



最后,invoke方法调用了Context的invoke方法,让Context处理这个请求。

 

Why You Cannot Live Without A Host

 

如果每个Context使用ContextConfig来配置,一个Tomcat 部署(Tomcat 4和Tomcat 5)必须有一个主机。原因是这样的。

 

ContextConfig需要应用的web.xml文件的定位。它尝试着在它的applicationConfig方法中打开这个配置文件。下面是这个方法的代码大致:

 


Constants.ApplicationWebXml的值是/WEB-INF/web.xml,web.xml文件的相对路径,并且servletContext是一个ApplicationContext的对象(实现了ServletContext)

 

 

下面是ApplicationContext的getResource方法:





最后一行清晰的显示了一个上下文必须得有一个父类(一个主机),如果其将被ContextConfig类配置。你将学会web.xml文件如何被解析的。除非你写自己的ContextConfig类这样你就不用一个主机了。



0 0
原创粉丝点击