Tomcat请求源码流程分析(图解及源码注释) (六)

Tomcat源码系列:


本章为Tomcat请求解析流程的第二章,主要内容为在请求转交给Coyote适配器后的流程分析

紧接上文中请求交由Processor处理.

Tomcat初始化源码不适用于新手

文章内容只有部分流程的源码分析,通过代码注释的方法,仅适用于Tomcat的源码有一定的了解的同学.

目录

1.AbstractProcessorLight.process()

2. CoyoteAdapter.service()

3. Valve.inkove()

    3.1 StandardEngineValve.invoke()

    3.2 StandardHostValve.invoke()

    3.3  StandardContextValve.invoke()

    3.4 StandardWrapperValve.invoke()

4.wrapper.allocate()  构造Servlet实例

5. filterChain.doFilter(request.getRequest(),response.getResponse())

5.1 internalDoFilter(request,response);

5.2 servlet.service(request, response);

6.HttpServlet.service()

7.正式执行自定义Servlet.


1.AbstractProcessorLight.process()

当请求由Endpoint交由Processor处理时,首先经过的就是AbstractProcessorLight.process()

 public SocketState process(SocketWrapperBase<?> socketWrapper, SocketEvent status)
            throws IOException {

        SocketState state = SocketState.CLOSED;
        Iterator<DispatchType> dispatches = null;
        do {
            if (dispatches != null) {
                DispatchType nextDispatch = dispatches.next();
                if (getLog().isDebugEnabled()) {
                    getLog().debug("Processing dispatch type: [" + nextDispatch + "]");
                }
                state = dispatch(nextDispatch.getSocketStatus());
                if (!dispatches.hasNext()) {
                    state = checkForPipelinedData(state, socketWrapper);
                }
            } else if (status == SocketEvent.DISCONNECT) {
            } else if (isAsync() || isUpgrade() || state == SocketState.ASYNC_END) {
                state = dispatch(status);
                state = checkForPipelinedData(state, socketWrapper);
            } else if (status == SocketEvent.OPEN_WRITE) {
                // Extra write event likely after async, ignore
                state = SocketState.LONG;
            } else if (status == SocketEvent.OPEN_READ) {
                //调度Http11Processor.service方法
                state = service(socketWrapper);
            } else if (status == SocketEvent.CONNECT_FAIL) {
                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值