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

举报
SHQ5785 发表于 2024/03/11 09:11:46 2024/03/11
【摘要】 ​ 假设来自客户的请求为:http://localhost:8080/wsota/wsota_index.jsp1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应3) Engine获得请求localhost/wsota/wsota_...


 

假设来自客户的请求为:

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


<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:如果这个属性设为true, Tomcat服务器在运行状态下会监视在WEB-INF/classes和Web-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有一个名称,和一个默认的虚拟主机名。

附:

Tomcat 是一款优秀的JSP/Servlet容器,最初由SUN开发,后来被贡献给了Apache社区。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。