Open5
day 1 : tomcat で受け取ったリクエストが HttpServletRequest として伝搬される迄
- "セッション生成の原点は何処か" という疑問を過去抱いた。これを起点にサーブレット周りの理解を深めたい。
- 過去に Java Silver 学習はしたけど、このあたり試験範囲に含まれてた記憶がない。学生時代に習ったかもだが、忘却済み
- 普段何気なく参照する HttpServletRequest の系譜を辿るとこから
- 調査環境は tomcat
📝 Spring とサーブレットコンテナ
過去にRLに追加してた記事、合わせて読む。
サーブレットに届くまで
tomcat が リクエストを受け、最終的に HttpServletRequest として処理されるに至る過程で、Request 自体を表すクラスは以下(ChatGPT より)
org.apache.coyote.Request:基本的なリクエストデータを表すTomcat内部のリクエストオブジェクト。
org.apache.catalina.connector.Request:HttpServletRequest に適合するラッパークラス。
coyote, catalina あたりの理解が必要そう。
coyote とか catalina とか
📝 coyote catalina 含め、tomcat のアーキテクチャがまとめられた記事
tomcat(catalina) コネクタにおけるリクエスト受信 -> サーブレットへ伝搬 フロー
tomcat 構成コンポーネントと示しつつChatGPTに解説依頼
- Connector がリクエストを受け取り、CoyoteAdapter で CoyoteRequest を Catalina Request (catalina.connector.Request) に変換します。
- Service はリクエストを Engine にルーティングし、Engine が適切な Host に振り分けます。
- Host はリクエストの Context(対象のWebアプリ)を選び、Wrapper が該当サーブレットにルーティングします。
- ApplicationFilterChain を通してフィルタを実行後、最終的にサーブレットに HttpServletRequest としてリクエストが渡され、処理が行われます。
公式がシーケンス図を提供していた。最高。
- https://tomcat.apache.org/tomcat-11.0-doc/architecture/startup.html
- https://tomcat.apache.org/tomcat-11.0-doc/architecture/requestProcess.html
コードリーディングを実践されている方の記事