写点什么

网站开发进阶 (四)Tomcat Server 处理 http 请求过程详解

  • 2022 年 5 月 02 日
  • 本文字数:1999 字

    阅读完需:约 7 分钟

网站开发进阶(四)Tomcat Server处理http请求过程详解

Tomcat Server处理http请求过程如下:

 

假设用户在浏览器输入:

http://localhost:8080/wsota/shq5785.jsp


tomcat 处理过程如下:

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

  2. Connector把该请求交给它所在的ServiceEngine来处理,并等待来自Engine的回应;

  3. Engine获得请求localhost/wsota/shq5785.jsp,匹配它所拥有的所有虚拟主机 Host;

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

  5. localhost Host 获得请求/wsota/shq5785.jsp,匹配它所拥有的所有Context;

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

  7. path="/wsota"Context获得请求/shq5785.jsp,在它的mapping table中寻找对应的servlet;

  8. Context匹配到URL PATTERN*.jspservlet,对应于JspServlet类;

  9. 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServletdoGetdoPost方法;

  10. Context把执行完了之后的HttpServletResponse对象返回给Host;

  11. HostHttpServletResponse对象返回给Engine;

  12. EngineHttpServletResponse对象返回给Connector;

  13. ConnectorHttpServletResponse对象返回给客户browser;

<Connector>元素

<Connector port="8088" protocol="HTTP/1.1" 
    connectionTimeout="20000" redirectPort="8443"
URIEncoding="GBK" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"/>
复制代码

<Connector>元素由Connector接口定义。<Connector>元素代表与客户程序实际交互的给件,它负责接收客户请求,以及向客户返回响应结果. 一个“Connector”(连接器)代表一个请求被接收和应答所需要的端点。每个连接器通过相关的“Container”(容器)处理请求。

<Host>元素

<Host name="www.weimingcloud.cn"  appBase="webapps/lmapp"
   unpackWARs="true" autoDeploy="true"
   xmlValidation="false" xmlNamespaceAware="false">
复制代码

它由Host接口定义。一个Engine元素可以包含多个<Host>元素。每个<Host>的元素定义了一个虚拟主机。它包含了一个或多个 Web 应用.。


注: name 是虚拟主机的名字,appBase是虚拟主机指向的目录,Tomcat 启动时,会自动加载appBase下的应用。 unpackWARs表示是否自动解压缩appBase下已打成WAR包的应用,autoDeploy表示在服务器运行的时候,将一个应用放入 appBase下,是否自动部署。 

<Context>元素

<Context path="" docBase="." reloadable="true" debug="0"> </Context>
<Context path="/lmapp/files" docBase="e:\webfiles_root\lmapp" reloadable="true" debug="0">
</Context>
复制代码

它由Context接口定义,是使用最频繁的元素。每个<Context>元素代表了运行在虚拟主机上的单个 Web 应用。一个<Host>可以包含多个<Context>元素。每个 web 应用有唯一的一个相对应的Context代表 web 应用自身。


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

  • docBase : 该Context的根目录是webapps/mycontext/

  • reloadable:如果这个属性设为trueTomcat服务器在运行状态下会监视在WEB-INF/classesWeb-INF/lib目录CLASS文件的改动。如果监视到有class文件被更新,服务器自重新加载 Web 应用;

  • useNaming:指定是否支持JNDI,默认值为了true

  • cookies:指定是否通过Cookies来支持Session,默认值为true

<Service>元素

 <Service name="Catalina">
   <Connector port="8088" protocol="HTTP/1.1" 
        connectionTimeout="20000" redirectPort="8443" URIEncoding="GBK" maxThreads="150"  minSpareThreads="25" maxSpareThreads="75"/>
  <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  <Engine name="Catalina" defaultHost="localhost"> </Engine>
  </Service>
复制代码

该元素由org.apache.catalina.Service接口定义,它包含一个<Engine>元素,以及一个或多个<Connector>,这些Connector元素共享用同一个Engine元素。


redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号。

   <Service name="Catalina">
   <Service name="Apache">
复制代码

第一个<Service>处理所有直接由Tomcat服务器接收的 web 客户请求。

第二个<Service>处理所有由Apahce服务器转发过来的 Web 客户请求 。


注:Server元素下可以有多个Service,端口就是在Service元素下配置的。


其中protocal制定了该端口侦听的协议类型,HTTP/1.1表示侦听客户的HTTP请求,即我们通过浏览器访问需要输入的端口,当端口号是 80 的时候,可以不用在浏览器地址栏输入端口号,这就是我们访问很多网站不需要指定端口的原因。有时候protocal没有指定,这时候默认的是HTTP/1.1。注意这个端口必须是闲置的。


Service元素下必须有一个Engine元素,Engine有一个名称,和一个默认的虚拟主机名。

发布于: 刚刚阅读数: 5
用户头像

No Silver Bullet 2021.07.09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
网站开发进阶(四)Tomcat Server处理http请求过程详解_tomcat_No Silver Bullet_InfoQ写作社区