标签:java name 发布 配置文件 start 适应 bsp sources extc
Servlet 不能够独立运行,需要在它的容器中运行,容器管理着它创建到销毁的整个过程。在看 Servlet 之前,我们先看下 Servlet 的我们最熟悉的一个容器——Tomcat。
一、Tomcat 体系结构
Tomcat 有两个重要组件:连接器(Connector)和容器(Engine容器及其子容器),我们结合 server.xml 配置文件来看一下这两个组件。
1 连接器(Connector)
首先向 Tomcat 发送的请求可以分为两类:
这些不同的请求需要不同的连接器来接收,在 Service 中有一个引擎和多个连接器,以适应不同情况。常见的连接器有四种:HTTP连接器、SSL连接器、AJP连接器、proxy连接器。在定义连接器时可以配置的属性有很多,连接器公用属性如下:
HttpConnector 的属性:
JkConnector 的属性:
2 容器(Engine容器及其子容器)
在 Tomcat 中有 Engine、Host、Context 及 Wrapper 四种容器,它们的包含关系如下图所示
上述的包含并不是继承关系,而是当子容器创建好后会放入到父容器中。Servlet 被包装成 Wrapper,然后真正管理 Servlet 的是 Context 容器,一个 Context 对应一个 Web 应用。
我们再来看一下它们的继承关系,这些容器的接口都继承自 Container 接口,为什么要按层次分别封装一个对象呢?为了方便统一管理,在不同层次的配置其作用域是不一样的。
2.1 Engine
Engine 下面拥有多个 Host,即虚拟主机,它的责任就是将用户的请求分配给一个虚拟主机处理。为什么要使用虚拟主机呢?当我们有两个应用时,如下图的 Love 应用和 SDJTU 应用。我们想访问“倪培.我爱你”域名时直接达到 Love 应用,访问“www.sdjtu.net.cn”域名时直接到达 SDJTU 应用,但是如果不设置虚拟主机是无法在一个 Tomcat中做到的。那么,我们可以设置两个虚拟主机,并指定请求到达这个虚拟主机后要去访问的目录。
在 Engine 标签中有几个属性可以填写
在 Engine 标签里还可以包含以下几个元素
2.2 Host
Host 代表一个虚拟主机,在它下面有多个 Context,一个 Context 代表一个 Web 应用。
在 Host 标签中的几个属性
在 Host 标签中还可以包含以下几个元素
2.3 Context
Context 代表运行在虚拟主机上的单个 Web 应用。
在 Context 标签中的几个属性
在 Context 标签中的元素
2 Tomcat 启动过程
Tomcat 从 7.0 开始增加了一个启动类 org.apache.catalina.startup.Tomcat。通过这个类的实例调用 start() 方法就可以启动 Tomcat,还可以通过这个对象增加和修改 Tomcat 的配置参数,来动态的添加 Context、Servlet 等。
当 Context 容器初始化状态为 init 时,添加到 Context 容器的 Listener 将会被调用。ContextConfig 继承了 LifecycleListener 接口,它是在调用了 Tomcat.addWebapp 时被加入到 StandardContext 容器的,这个类将会负责整个 Web 应用的配置解析工作。ContextConfig 的 init 方法将会主要完成以下工作:
当 ContextConfig 的 init 方法完成后,Context 容器会执行 startInternal 方法,主要包括以下工作
Web 应用的初始化是在 ContextConfig 的 configureStart 方法中实现的,应用初始化主要是解析 web.xml 文件。web.xml 文件中的配置会被解析成 WebXml 对象,然后这些配置会放入 Context 中,并且 Servlet 配置会被包装成 StandardWrapper 并作为子容器添加到 Context 中。
[Java]Servlet工作原理之一:Servlet的容器
标签:java name 发布 配置文件 start 适应 bsp sources extc
原文地址:http://www.cnblogs.com/tengyunhao/p/7481324.html