Tomcat で HTTP リクエストを処理する主なプロセスは次のとおりです。

  1. Tomcat はクライアント要求を受信すると、処理のためにその要求を渡しますCoyoteAdapter
  2. CoyoteAdapterリクエスト メソッド (GET、POST など) と URL に基づいて、対応するConnector合計を見つけますProcessor
  3. Processorこれは、サーブレット オブジェクトの作成と維持、HTTP リクエストの処理、生成された応答のクライアントへの返しを担当するサーブレット コンテナです。
  4. Processor呼び出されるときにサーブレット インスタンスが作成および初期化されStandardWrapperValve、対応するライフサイクル メソッドが呼び出されてリクエストを処理し、レスポンスを生成します。

以下は、StandardWrapperValveサーブレット リクエストを処理するコード スニペットです。

public final class StandardWrapperValve extends ValveBase {

    public void invoke(Request request, Response response) throws IOException, ServletException {

        ......
        // 在这里获取到对应的Servlet对象
        Servlet servlet = wrapper.allocate();
        
        try {
            // 初始化Servlet并调用相应的生命周期方法
            request.setServletPath(wrapper.getServletPath());
            request.setAttribute(Globals.SERVLET_MAPPING_ATTR, wrapper.getServletMapping().getMatchValue());
            support.fireInstanceEvent(InstanceEvent.BEFORE_INIT_EVENT, servlet);
            servlet.init(config);
            support.fireInstanceEvent(InstanceEvent.AFTER_INIT_EVENT, servlet);
            pipeline.invoke(request, response);
            support.fireInstanceEvent(InstanceEvent.BEFORE_DESTROY_EVENT, servlet);
        } finally {
            // 销毁Servlet实例
            if (servlet != null) {
                wrapper.deallocate(servlet);
            }
            request.recycle();
            response.recycle();
        }
        
    }
}

このコード スニペットでは、次のことがわかります。

  1. StandardWrapperValveTomcatのリクエスト処理プロセスにおいてサーブレットリクエストを処理するために使用される実装クラスですValve
  2. invokeこのメソッドでは、StandardWrapperValveまずServletリクエストに含まれる URL パス情報 (サーブレット パス) に基づいて、対応するオブジェクトを検索します。
  3. 次に、 HTTP リクエストが処理され、ライフサイクル メソッド (など)StandardWrapperValveを呼び出してレスポンスが生成されます。Servletinit()service()
  4. 最後に、finallyブロック内で、サーブレット コンテナはサーブレット インスタンスを破棄するメソッドをservlet呼び出します。destroy()

これは、Tomcat のサーブレット要求処理ロジックの簡単な例にすぎないことに注意してください。実際のコード実装はこれより複雑になる場合があり、複数のモジュールとクラスが連携して動作する必要があります。

おすすめ

転載: blog.csdn.net/samsung_samsung/article/details/130267523