tomcat一次完整请求流程


1 首先通过域名查找IP地址
    顺序是从 浏览器缓存-主机缓存-hosts-路由缓存-DNS服务器-根域名服务器,得到域名的真实IP地址

2 开始TCP/IP 三次握手

        主要数据包括
                    (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 
                    (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。 
                    (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下: 
                    (A)URG:紧急指针(urgent pointer)有效。 
                    (B)ACK:确认序号有效。 
                    (C)PSH:接收方应该尽快将这个报文交给应用层。 
                    (D)RST:重置连接。 
                    (E)SYN:发起一个新连接。 

                    (F)FIN:释放一个连接。

                            标记为ACK 

1.客户端发起请求,将SYN=1,seq=x(第一次连接,x随机生成,后面以1递增),进入SYN_SENT状态
            2.服务器收到后,若在空闲状态,就接收请求,并发回确认数据包,SYN=1,ACK= 1, seq=随机数y,ack=x+1发完进入SYN-RCVD状态
3.客户端接到服务器确认后,检查ack是否为x+1,ACK是否为1,如果是连接建立成功,将ACK=1,ack=y+1发回服务器,都进入ESTABLISHED状态

tomcat一次完整请求流程

3 tomcat

 1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
                2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应 
                3) Engine获得请求localhost/项目/页面.jsp,匹配它所拥有的所有虚拟主机Host 
                4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机) 
                5) localhost Host获得请求/项目/页面.jsp,匹配它所拥有的所有Context 
                6) Host匹配到路径为/项目的Context(如果匹配不到就把该请求交给路径名为””的Context去处理) 
                7) path=”/项目”的Context获得请求/页面.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