• http访问tomcat server的一个流程


    Tomcat Server处理一个http请求的过程

    假设来自客户的请求为:

    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

      1 <?xml version='1.0' encoding='utf-8'?>
      2 <!--
      3   Licensed to the Apache Software Foundation (ASF) under one or more
      4   contributor license agreements.  See the NOTICE file distributed with
      5   this work for additional information regarding copyright ownership.
      6   The ASF licenses this file to You under the Apache License, Version 2.0
      7   (the "License"); you may not use this file except in compliance with
      8   the License.  You may obtain a copy of the License at
      9 
     10       http://www.apache.org/licenses/LICENSE-2.0
     11 
     12   Unless required by applicable law or agreed to in writing, software
     13   distributed under the License is distributed on an "AS IS" BASIS,
     14   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     15   See the License for the specific language governing permissions and
     16   limitations under the License.
     17 -->
     18 <!-- Note:  A "Server" is not itself a "Container", so you may not
     19      define subcomponents such as "Valves" at this level.
     20      Documentation at /docs/config/server.html
     21  -->
     22 <Server port="8005" shutdown="SHUTDOWN">
     23   <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
     24   <!-- Security listener. Documentation at /docs/config/listeners.html
     25   <Listener className="org.apache.catalina.security.SecurityListener" />
     26   -->
     27   <!--APR library loader. Documentation at /docs/apr.html -->
     28   <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
     29   <!-- Prevent memory leaks due to use of particular java/javax APIs-->
     30   <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
     31   <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
     32   <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
     33 
     34   <!-- Global JNDI resources
     35        Documentation at /docs/jndi-resources-howto.html
     36   -->
     37   <GlobalNamingResources>
     38     <!-- Editable user database that can also be used by
     39          UserDatabaseRealm to authenticate users
     40     -->
     41     <Resource name="UserDatabase" auth="Container"
     42               type="org.apache.catalina.UserDatabase"
     43               description="User database that can be updated and saved"
     44               factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
     45               pathname="conf/tomcat-users.xml" />
     46   </GlobalNamingResources>
     47 
     48   <!-- A "Service" is a collection of one or more "Connectors" that share
     49        a single "Container" Note:  A "Service" is not itself a "Container",
     50        so you may not define subcomponents such as "Valves" at this level.
     51        Documentation at /docs/config/service.html
     52    -->
     53   <Service name="Catalina">
     54 
     55     <!--The connectors can use a shared executor, you can define one or more named thread pools-->
     56     <!--
     57     <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
     58         maxThreads="150" minSpareThreads="4"/>
     59     -->
     60 
     61 
     62     <!-- A "Connector" represents an endpoint by which requests are received
     63          and responses are returned. Documentation at :
     64          Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
     65          Java AJP  Connector: /docs/config/ajp.html
     66          APR (HTTP/AJP) Connector: /docs/apr.html
     67          Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
     68     -->
     69     <Connector port="8080" protocol="HTTP/1.1"
     70                connectionTimeout="20000"
     71                redirectPort="8443" />
     72     <!-- A "Connector" using the shared thread pool-->
     73     <!--
     74     <Connector executor="tomcatThreadPool"
     75                port="8080" protocol="HTTP/1.1"
     76                connectionTimeout="20000"
     77                redirectPort="8443" />
     78     -->
     79     <!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
     80          This connector uses the NIO implementation that requires the JSSE
     81          style configuration. When using the APR/native implementation, the
     82          OpenSSL style configuration is required as described in the APR/native
     83          documentation -->
     84     <!--
     85     <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
     86                maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
     87                clientAuth="false" sslProtocol="TLS" />
     88     -->
     89 
     90     <!-- Define an AJP 1.3 Connector on port 8009 -->
     91     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
     92 
     93 
     94     <!-- An Engine represents the entry point (within Catalina) that processes
     95          every request.  The Engine implementation for Tomcat stand alone
     96          analyzes the HTTP headers included with the request, and passes them
     97          on to the appropriate Host (virtual host).
     98          Documentation at /docs/config/engine.html -->
     99 
    100     <!-- You should set jvmRoute to support load-balancing via AJP ie :
    101     <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
    102     -->
    103     <Engine name="Catalina" defaultHost="localhost">
    104 
    105       <!--For clustering, please take a look at documentation at:
    106           /docs/cluster-howto.html  (simple how to)
    107           /docs/config/cluster.html (reference documentation) -->
    108       <!--
    109       <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
    110       -->
    111 
    112       <!-- Use the LockOutRealm to prevent attempts to guess user passwords
    113            via a brute-force attack -->
    114       <Realm className="org.apache.catalina.realm.LockOutRealm">
    115         <!-- This Realm uses the UserDatabase configured in the global JNDI
    116              resources under the key "UserDatabase".  Any edits
    117              that are performed against this UserDatabase are immediately
    118              available for use by the Realm.  -->
    119         <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
    120                resourceName="UserDatabase"/>
    121       </Realm>
    122 
    123       <Host name="localhost"  appBase="webapps"
    124             unpackWARs="true" autoDeploy="true">
    125 
    126         <!-- SingleSignOn valve, share authentication between web applications
    127              Documentation at: /docs/config/valve.html -->
    128         <!--
    129         <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    130         -->
    131 
    132         <!-- Access log processes all example.
    133              Documentation at: /docs/config/valve.html
    134              Note: The pattern used is equivalent to using pattern="common" -->
    135         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    136                prefix="localhost_access_log" suffix=".txt"
    137                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    138 
    139       </Host>
    140     </Engine>
    141   </Service>
    142 </Server>
  • 相关阅读:
    Response.Redirect引起的性能问题分析
    Html5中 视频 音频标签 进度条问题
    GIS 地理坐标分类
    函数指针理解最透彻的文章
    python安装第三方包之后无法导入相应模块(一个容易忽略的bug)
    git使用入门
    OpenSSL中HMAC,MD5以及对称加密算法的应用
    OpenSSL库中加密组件使用的相关链接
    Ubuntu 12.04LTS下配置OpenSSL和gmp环境
    编程写作注意事项!
  • 原文地址:https://www.cnblogs.com/hoojjack/p/7055455.html
Copyright © 2020-2023  润新知