`
ayufox
  • 浏览: 273353 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

[Tomcat源码系列]结构解析 1)总体结构预览

阅读更多

一、从范例开始
    在开始分析之前,我们先使用Tomcat组件来组装一个完整的WebContainer。
1)准备好目录结构
    准备好如下目录结构

BaseDir(C:/tomcattest/)
                    --conf
                    --webapps
  • 从{tomcat目录}/conf目录下的拷贝web.xml到如上的conf目录(可选,支持JSP和welcome file)
  • 拷贝tomcat的examle应用到如上的webapps目录作为范例

2)范例(注意如下的代码说明部分)

package ray.tomcat.test;

import org.apache.catalina.connector.Connector;
import org.apache.catalina.core.StandardEngine;
import org.apache.catalina.core.StandardHost;
import org.apache.catalina.core.StandardService;
import org.apache.catalina.startup.HostConfig;

public class TomcatMainV5
{
    public static void main(String[] args) throws Exception
    {
        // 设置基目录,使用这种方式貌似不够幽雅
        System.setProperty("catalina.base", "C:/tomcattest/");

        // Connector
        Connector connector = new Connector("HTTP/1.1");
        connector.setPort(8080);

        // 请求处理器(Engine+Host)
        // Host
        StandardHost standardHost = new StandardHost();
        standardHost.setName("localhost");
        standardHost.setAppBase("webapps");
        // HostConfig负责解析Context配置,并将Context加入到Host中,
        standardHost.addLifecycleListener(new HostConfig());
        // Engine
        StandardEngine standardEngine = new StandardEngine();
        standardEngine.setName("Catalina");
        //此处可以看到Host是Engine的Child
        standardEngine.addChild(standardHost);
        standardEngine.setDefaultHost("localhost");

        // Connector+请求处理器 组装成webserver
        StandardService standardService = new StandardService();
        standardService.setName("Catalina");
        //设置接收请求Connector,可支持多个Connector
        standardService.addConnector(connector);
        //设置请求处理器
        standardService.setContainer(standardEngine);

        // 开始初始化
        standardService.start();

        while (true)
        {
            Thread.sleep(60000);
            System.out.println("still active");
        }
    }
}

 

3)访问http://localhost:8080/examples,可以看到examples应用生效了
二、总体结构预览
    从如上的范例,我们大概可以对Tomcat的主要组成有了基本的了解,包括其他一些在如上无法反映出来的组件,Tomcat由如下组件组成
1)请求连接接收和分发组件

  • Connector(org.apache.catalina.connector.Connector):包括我们在上一篇 中了解的各种Protocol

2)请求处理组件

  • Engine(org.apache.catalina.Engine):Engine是请求处理的入口,一个Engine会包含多个Host,我们看看Tomcat中关于Engine的定义
An Engine is a Container that represents the entire Catalina servlet engine.
  • Host(org.apache.catalina.Host):Host代表了一个虚拟主机(virtual host),一个Host会包含多个Context,我们看看Tomcat关于Host的定义
A Host is a Container that represents a virtual host in the Catalina servlet engine.
  •  Context:Context代表了一个独立的应用,一个Context会包含多个请求处理器(Wrapper),我们看看Tomcat关于Context的定义
A Context is a Container that represents a servlet context, and therefore an individual web application, in the Catalina servlet engine.
  •  Wrapper:Wraper代表了一个Servlet,我们看看Tomcat关于Wrapper的定义
A Wrapper is a Container that represents an individual servlet definition from the deployment descriptor of the web application.

 

3)组合组件

  • Service:Service通过管理多个Connector和请求处理引擎,处理各Connector进入的请求,并由同一个请求处理引擎进行处理

三、结束语
    本篇通过一个范例对Tomcat的主体结构做一个预览,具体的细节我们在后面的篇章《生命期控制结构》、《请求处理结构》中更详细地分析。

2
0
分享到:
评论
1 楼 diecui1202 2011-01-06  
没想到tomcat还可以这样启动,学习了~

相关推荐

Global site tag (gtag.js) - Google Analytics