zoukankan      html  css  js  c++  java
  • tomcat组成及原理[转]

    Tomcat安装好后打开目录;可以看到如下结构:

    bin :存放服务器脚本;

    conf :存放配置文件;

    lib :存放需要的JAR文件;

    wabapps :存放需要发布的Web应用程序及其部署文件;

    work :存放jsp 文件编绎生成的class文件;

    logs :存放日志文件;

    在conf目录下可以看到 Catalina 目录,context.xml, web.xml, server.xml 等(一些不是很重要的就不列出来了)。

    server.xml被称为Tomcat的主配置文件或全局配置文件,它完成两个任务:
    1)提供Tomcat组件的初始配置
    2)说明Tomcat的结构,含义,使Tomcat通过实例化组件完成启动及构建自身。

    server.xml中描述的重要元素有 Server ,Service ,Connector ,Engine ,Host ,Context .
    结构如下:
    Tomcat-配置及原理
    它们的用处是:

    Server:
    顶层元素,整个配置文件的根元素,表示整个Servlet容器或者Tomcat服务器包含多个Listener,一个GlobalNamingResources和一个Service

    Service:
    一组Connector和一个Engine的集合,这组Connector共用一个Engine来处理所有Connector收到的请求,负责处理<Connector>所获得到的客户请求

    Listener组: 
    监听器,用来管理Tomcat生命周期和全局资源

    GlobalNamingResources:
    配置系统的JNDI(Java Naming and Directory Interface)

    Connector组:
    连接器,代表外部客户之间的接口,将在一个指定的接口上侦听客户请求,并将获得的请求交给<Engine>进行处理,然后把处理结果返回给客户

    Engine: 
    引擎,处理<Service>中的所有客户请求,具体来说,获得一个<Connectors>交给的请求后,把这个请求匹配到某个<Host>上进行处理,如果没有找到合适的<Host>来进行处理,则把这个请求交给一个默认虚拟主机处理。

    Host组:
    虚拟主机,处理一个特定主机的请求,一般来说,每个虚拟主机都可以配置一个到多个Web应用,每个Web应用对应一个<Context>,<Host>获得的请求最终匹配到某个<Context>上,由它进行处理。

    Context组: 
    Web应用组,每个Web应用由一个或多个Servlet组成,当<Context>获得一个请求后,将映射/conf/web.xml文件中的<servlet>元素,匹配一个Servlet类进行处理并返回。当一个Web应用被初始化的时候,它将用自己的ClassLoader对象载入web.xml中定义的每个Servlet类。

    我们启动Tomcat,在浏览器中输入:http://localhost:8080/ 会打开Tomcat的默认页面。实际上,这个页面是在Tomcat安装目录下的:/webapps/root/index.jsp;/webapps是Tomcat服务器用来存放Web应用的目录,每个Web应用都将在这建立各自的子目录,刚装好的Tomcat服务器虚拟主机的默认目录是/webapps/ROOT,所以默认会打开这个目录下的文件。流程如下:
    在/conf目录下的web.xml配置文件中有如下配置:
    <welcome-file-list>
            <welcome-file>index.html</welcome-file>
            <welcome-file>index.htm</welcome-file>
            <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    这里正是用来配置首页的,Tomcat将按顺序找出<welcome-file>标签中的内容作为首页。而在我们的目录下,它只找到了index.jsp,所以会显示它;
    但我们不能将所有的Web程序都放在ROOT里。所以我们需要更改Tomcat的虚拟目录;

    要设置虚拟路径,需要在server.xml文件的<Host></Host>中的Web应用添加一个<Context>子元素,实际上是配置了一个Web应用的物理存放地址到Tomcat虚拟路径的过程,使得Tomcat能够正确找到Web应用的物理存放路径;
    步骤:
    1)在server.xml的<Host></Host>中加上如下代码:
    <Context docBase="D:/myApp" path="/myapp" reloadable="true"></Context>
    2)我们把写好的Web应用中的所有文件放到下面的目录中:D:/myapp/test
    3)重启Tomcat,在浏览器中输入:http://localhost:8080/test 即可测试

    web.xml
    Tomcat目录下/conf 可为不同的应用程序配置不同的上下文环境;用来对Servlet进行映射;
    一个Web应用的根目录下的/WEB-INF目录中也有一个web.xml,当部署一个Web应用时,总是先加载/conf/web.xml,然后才加载自己Web应用的/WEB-INF/web.xml文件;但处理过程中,总是先使用自己的web.xml配置文件,如果无法处理,才把它交给Tomcat的web.xml文件。
    http://localhost:8080/wsota/wsota_index.jsp
    1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
    2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
    3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
    4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
    5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
    6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
    7) path="/wsota"的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
    8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
    9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
    10)Context把执行完了之后的HttpServletResponse对象返回给Host
    11)Host把HttpServletResponse对象返回给Engine
    12)Engine把HttpServletResponse对象返回给Connector
    13)Connector把HttpServletResponse对象返回给客户browser
  • 相关阅读:
    SpringCloud------链路追踪组件Sleuth
    SpringCloud------Zuul过滤器结合谷歌Gauva现实限流
    SpringCloud------Zuul网关
    极大团(maximal clique)算法:Born_kerbosch算法
    IDEA Cannot Resolve Symbol 问题的解决方法汇总
    idea 编译项目内存溢出OutMemoryError
    java 泛型和object比较
    java log4j 打日志到控制台同时打印到不同文件
    Java通过继承外部类来建立该外部类的protected内部类的实例(转)
    C#中的委托和事件
  • 原文地址:https://www.cnblogs.com/volare/p/3896334.html
Copyright © 2011-2022 走看看