天天看点

Tomcat源码解析8——Context容器

8. Context容器

Context容器代表一个WebApp。

8.1Context的配置文件

Context在解析server.xml文件的时候就会被创建,然后在web应用的/META-INF/context.xml文件中进行属性的添加。

而Tomcat源码自带的conf/下的context.xml是配置所有context容器的属性。

Tomcat源码解析8——Context容器
8.2 Wrapper——包装器

Wrapper是最小的容器,一个Wrapper对应一个Servlet。

8.3 Realm,AccessLog

在Engine和Host中讲过。

8.4 Manager——会话管理器

用于管理Web容器会话的。

8.5 DirContext 目录上下文
JNDI:(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,

DireContext能让Tomcat更快的访问到想要的文件。

8.6 安全认证

查看后续笔记(TODO)

8.7 JarScanner——Jar扫描器

用来扫描Jar包的工具

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDjNaHpN-1619271987286)(image-20210422163057119.png)]

8.8 过滤器

在Web应用的web.xml文件中配置过滤器只会在此Web应用中有效,在tomcat的conf/下的web.xml中配是全部的web应用都有这个过滤器。

过滤器是在Context中存在的,但是是Wrapper去执行的

1.FilterDef类

这个类是对应xml文件中的属性的。

<!-- Filter,过滤器 -->
    <filter>
        <!-- filter名,随便起 -->
        <filter-name>AdminFilter</filter-name>
        <!-- 实现类所在目录 -->
        <filter-class>cn.kihyou.b2c.filter.AdminFilter</filter-class>
        <!-- 初始化参数 -->
        <!-- 设置字符集,charset:UTF-8 -->
        <init-param>
            <!-- 参数名 -->
            <param-name>charset</param-name>
            <!-- 参数值 -->
            <param-value>UTF-8</param-value>
        </init-param>

        <!-- 设置内容类型及其字符集,contentType:text/html;charset=UTF-8 -->
        <init-param>
            <param-name>contentType</param-name>
            <param-value>text/html;charset=UTF-8</param-value>
        </init-param>
    </filter>

    <!-- filter的映射 -->
    <filter-mapping>
        <!-- 对应的filter名 -->
        <filter-name>AdminFilter</filter-name>
        <!-- 要进行拦截过滤的目录 -->
        <url-pattern>/web/admin/*</url-pattern>
    </filter-mapping>

    <session-config>
        <!-- 超时时间,单位:分钟 -->
        <session-timeout>30</session-timeout>
    </session-config>
           

2.ContextFilterMaps

这个类是StandardContext的内部类。

用于保存过滤器映射关系,里面有个private FilterMap[] array ,这个是用来存储映射关系的。

3.ApplicationFilterConfig

用于管理web应用程序首次启动时实例化的过滤器实例。

以上三个是Context容器的过滤器模块所包含的。

8.9 Mapper——映射器

具体内容请看后续笔记

8.10 webappLoader ——Web应用载入器

利用各自独立的Web应用载入器可以使不同的Web应用之间做到相互隔离。

8.11 ApplicationContext

它实现了ServletContext接口

构建了一个Context容器环境。 可以通过Servlet访问Context的各种资源,如获取上下文getServlet Context()

实际上所用的是 ApplicationContextFacade外观类。防止重要的运行属性和内部方法暴露给Web开发人员。被修改后可能会出现运行bug。

8.12 InstanceManager实例管理器
8.13 ServletContainerInitializer——初始化器

等等。。。

说个最重要的,Context监听器

8.14 监听器

Context有四个监听器

ContextConfig,

TldConfig, 负责对TLD标签配置文件的相关处理

NamingContextListener,负责管理命名资源

MemoryLeakTrackingListener.防止内存泄露的。

继续阅读