- Tomcat はクライアント要求を受信すると、処理のためにその要求を渡します
CoyoteAdapter
。 CoyoteAdapter
リクエスト メソッド (GET、POST など) と URL に基づいて、対応するConnector
合計を見つけますProcessor
。Processor
これは、サーブレット オブジェクトの作成と維持、HTTP リクエストの処理、生成された応答のクライアントへの返しを担当するサーブレット コンテナです。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();
}
}
}
このコード スニペットでは、次のことがわかります。
StandardWrapperValve
Tomcatのリクエスト処理プロセスにおいてサーブレットリクエストを処理するために使用される実装クラスですValve
。invoke
このメソッドでは、StandardWrapperValve
まずServlet
リクエストに含まれる URL パス情報 (サーブレット パス) に基づいて、対応するオブジェクトを検索します。- 次に、 HTTP リクエストが処理され、ライフサイクル メソッド (など)
StandardWrapperValve
を呼び出してレスポンスが生成されます。Servlet
init()
service()
- 最後に、
finally
ブロック内で、サーブレット コンテナはサーブレット インスタンスを破棄するメソッドをservlet
呼び出します。destroy()
これは、Tomcat のサーブレット要求処理ロジックの簡単な例にすぎないことに注意してください。実際のコード実装はこれより複雑になる場合があり、複数のモジュールとクラスが連携して動作する必要があります。