总体结构

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

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

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

Java代码
  1. package  ray.tomcat.test;  
  2.   
  3. import  org.apache.catalina.connector.Connector;  
  4. import  org.apache.catalina.core.StandardEngine;  
  5. import  org.apache.catalina.core.StandardHost;  
  6. import  org.apache.catalina.core.StandardService;  
  7. import  org.apache.catalina.startup.HostConfig;  
  8.   
  9. public   class  TomcatMainV5  
  10. {  
  11.     public   static   void  main(String[] args)  throws  Exception  
  12.     {  
  13.         // 设置基目录,使用这种方式貌似不够幽雅   
  14.         System.setProperty("catalina.base" "C:/tomcattest/" );  
  15.   
  16.         // Connector   
  17.         Connector connector = new  Connector( "HTTP/1.1" );  
  18.         connector.setPort(8080 );  
  19.   
  20.         // 请求处理器(Engine+Host)   
  21.         // Host   
  22.         StandardHost standardHost = new  StandardHost();  
  23.         standardHost.setName("localhost" );  
  24.         standardHost.setAppBase("webapps" );  
  25.         // HostConfig负责解析Context配置,并将Context加入到Host中,   
  26.         standardHost.addLifecycleListener(new  HostConfig());  
  27.         // Engine   
  28.         StandardEngine standardEngine = new  StandardEngine();  
  29.         standardEngine.setName("Catalina" );  
  30.         //此处可以看到Host是Engine的Child   
  31.         standardEngine.addChild(standardHost);  
  32.         standardEngine.setDefaultHost("localhost" );  
  33.   
  34.         // Connector+请求处理器 组装成webserver   
  35.         StandardService standardService = new  StandardService();  
  36.         standardService.setName("Catalina" );  
  37.         //设置接收请求Connector,可支持多个Connector   
  38.         standardService.addConnector(connector);  
  39.         //设置请求处理器   
  40.         standardService.setContainer(standardEngine);  
  41.   
  42.         // 开始初始化   
  43.         standardService.start();  
  44.   
  45.         while  ( true )  
  46.         {  
  47.             Thread.sleep(60000 );  
  48.             System.out.println("still active" );  
  49.         }  
  50.     }  
  51. }  

 

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的主体结构做一个预览,具体的细节我们在后面的篇章《生命期控制结构》、《请求处理结构》中更详细地分析。

 

你可能感兴趣的:(总体结构)