tomcat 实例

来源:互联网 发布:华南师范网络教育证书 编辑:程序博客网 时间:2024/05/22 06:49

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

假设来自客户的请求为: http://localhost:8080/macy/index.jsp

1) 请求发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得。

2) Connector把该请求交给它所在Service的Engine来处理,并等待来自Engine的响应。

3) Engine获得请求localhost/macy/index.jsp,匹配它所拥有的所有虚拟主机Host。

4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认虚拟主机)。

5) localhost Host获得请求/macy/index.jsp,匹配它所拥有的所有Context。

6) Host匹配到路径为/macy的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)。

7) path="/macy"的Context获得请求/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。

 

2.该文件描述了如何启动Tomcat Server

<!---------------------------------------------------------------------------------->

<!-- 启动Server

     在端口8005处等待关闭命令

     如果接受到"SHUTDOWN"字符串则关闭服务器 -->

<Server port="8005"shutdown="SHUTDOWN" debug="0"> 

  <!-- Listener  -->

 <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"debug="0"/>

 <ListenerclassName="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"debug="0"/> 

  <!-- Global JNDI resources   -->

 <GlobalNamingResources>

    ... ... ... ...

 </GlobalNamingResources> 

  <!-- TomcatStandalone ServiceService是一组Connector的集合,它们共用一个Engine来处理所有Connector收到的请求      -->

 <Service name="Tomcat-Standalone"> 

    <!-- Coyote HTTP/1.1 Connector

         className: Connector的实现类是

org.apache.coyote.tomcat4.CoyoteConnector

         port : 在端口号8080处侦听来自客户browserHTTP1.1请求。

         minProcessors : Connector先创建5个线程等待客户请求,每个请求由一

个线程负责。

         maxProcessors : 当现有的线程不够服务客户请求时,若线程总数不足75个,则创建新线程来处理请求。

         acceptCount : 当现有线程已经达到最大数75时,为客户请求排队

                      当队列中请求数超过100时,后来的请求返回Connection refused错误

         redirectport : 当客户请求是https时,把该请求转发到端口8443      -->

    <ConnectorclassName="org.apache.coyote.tomcat4.CoyoteConnector"

               port="8080"

               minProcessors="5"maxProcessors="75" acceptCount="100"

               enableLookups="true"

               redirectPort="8443"

               debug="0"

              connectionTimeout="20000"

              useURIValidationHack="false"

              disableUploadTimeout="true" /> 

    <!-- Engine用来处理Connector收到的Http请求

         它将匹配请求和自己的虚拟主机,并把请求转交给对应的Host来处理

         默认虚拟主机是localhost        -->

    <Engine name="Standalone"defaultHost="localhost" debug="0"> 

      <!-- 日志类 -->

      <LoggerclassName="org.apache.catalina.logger.FileLogger" .../> 

      <!—Realm  -->

      <RealmclassName="org.apache.catalina.realm.UserDatabaseRealm" .../> 

      <!-- 虚拟主机localhost

          appBase :该虚拟主机的根目录是webapps/

          它将匹配请求和自己的Context的路径,并把请求转交给对应的Context来处理          -->

      <Host name="localhost"debug="0" appBase="webapps" unpackWARs="true"autoDeploy="true">     

        <!-- 日志类 -->

        <LoggerclassName="org.apache.catalina.logger.FileLogger" .../>     

        <!-- Context,对应于一个Web应用程序

            path :Context的路径名是"",故该Context是该Host的默认Context

            docBase :Context的根目录是webapps/macy/              -->

        <Context path=""docBase="macy" debug="0"/>       

        <!-- 另外一个Context,路径名是/cute -->

        <Context path="/cute"docBase="d:\tly\cute" debug="0"/>

      </Host>

    </Engine>

 </Service>

</Server>

<!---------------------------------------------------------------------------------->

 

0 0