Tomcatコンテナはservice(ServletRequest req, ServletResponse res)
メソッドをどのように呼び出しますか? どこでこの呼び出しの実装を探すことができますか?
req
とres
のオブジェクト(service()メソッドに渡されたもの)がどのように作成されているかを確認するにはどうすればよいですか?Tomcatコンテナはservice()メソッドをどのように呼び出しますか?
答えて
Tomcat ArchitectureページはTODOステータスですが、少なくともリクエスト処理のUML sequence diagramへのリンクがあります。 Tomcatのソースコードと組み合わせることは、良い出発点です。
ありがとう、それは私が必要としたものです。 – Warp
サーブレットのライフサイクルは、基本となるコンテナによって制御されます。サーブレットが初期化され、要求があると、Tomcatはサーブレットのサービスメソッドを呼び出してリクエストを処理します。 サービスメソッドは、サーブレットクラスに要求を委任します。ここで、doGetメソッドまたはdoPostメソッドのreqオブジェクトおよびresオブジェクトにアクセスできます。
public void doGet(HttpServletRequest req, HttpServletResponse res){
}
アップデート:クライアントからの要求に応じて 1、コンテナは、2つのオブジェクトを作成します。HttpServletRequestのとHttpServletResponseの。 2.リクエストに基づいて、コンテナは正しいサーブレット(URLマッピングに従って)を見つけ、その特定のリクエスト用の新しいスレッドを作成し(1対1マッピング - リクエストごとに新しいスレッド)、作成されたServletのサービスメソッドを呼び出しますHttpServletRequestおよびHttpServletResponseオブジェクトを引数として使用します。 3.要求メソッド(GETまたはPOST)に基づいてservice()メソッドはServletでdoGet()またはdoPost()メソッドを呼び出し、同じHttpServletRequestおよびHttpServletResponseオブジェクトを引数として渡します。
これは一言で言えば、サーブレットの仕様です。 Tomcatの動作は実装固有のものであり、仕様によって制御されるものではありません。 Tomcatでどのように実装されているかを知る必要がある場合は、ソースコードを確認することができます。
あなたがそれを知りたい場合は、最初のクローンApache Tomcatのソースコード
git clone https://github.com/apache/tomcat.git
その後クローン化されたリポジトリ内で、それはservice
メソッドが呼び出される場所検索するには、このコマンドを起動します。
grep -H -n -r "\.service(" --include=*.java
ます短いファイルリストが見つかります:
java/javax/servlet/jsp/PageContext.java:107: * in this PageContext until the return from the current Servlet.service()
java/org/apache/catalina/connector/Request.java:3128: // that set towards the start of CoyoyeAdapter.service()
java/org/apache/catalina/core/ApplicationFilterChain.java:231: servlet.service(request, response);
java/org/apache/catalina/servlets/DefaultServlet.java:411: super.service(req, resp);
java/org/apache/catalina/servlets/WebdavServlet.java:349: super.service(req, resp);
java/org/apache/coyote/ajp/AjpProcessor.java:403: getAdapter().service(request, response);
java/org/apache/coyote/AsyncStateMachine.java:41: * been called during a single Servlet.service() method. The
java/org/apache/coyote/AsyncStateMachine.java:58: * been called during a single Servlet.service() method. The
java/org/apache/coyote/http11/Http11Processor.java:498: getAdapter().service(request, response);
java/org/apache/coyote/http2/StreamProcessor.java:257: adapter.service(request, response);
java/org/apache/jasper/Constants.java:41: * HttpJspBase.service(). This is where most of the code generated
java/org/apache/jasper/servlet/JspServlet.java:385: wrapper.service(request, response, precompile);
java/org/apache/jasper/servlet/JspServletWrapper.java:440: servlet.service(request, response);
java/org/apache/jasper/servlet/JspServletWrapper.java:443: servlet.service(request, response);
最もintresting 1つはjava/org/apache/catalina/core/ApplicationFilterChain.java
です。より多くの偶然が見つかるだろうが、Tomcatのソースコードには非常に似たメソッドを持っている別のインタフェースがあるので、その多くはそうである。java/org/apache/coyote/Adapter.java
無視する。
java/org/apache/catalina/core/ApplicationFilterChain.java
を取得すると、行231を編集してサービスメソッドの呼び出し場所を確認できます。
ただし、req
とres
のオブジェクトは、その場所には作成されません。それらがどのように作成されているかを見つけることは、もう少し複雑で時間がかかるようです。
- 1. eclipseとは別にメソッド呼び出しをどのように呼びますか?
- 2. メインアクティビティからFirebase Messaging Serviceのメソッドを呼び出す
- 3. ActiveRecordはどのように 'where'を呼び出しますか?
- 4. #{ManagedBean.all}はManagedBean.getAll()をどのように呼び出しますか
- 5. メソッド呼び出しをどのようにチェーンできますか?
- 6. 他のオブジェクトからメソッドを呼び出すメソッド呼び出し
- 7. 'startActionMode'メソッドはどのように呼び出す必要がありますか?
- 8. displayAd()メソッドはどのように呼び出すことができますか?
- 9. このJavaメソッドはどのように呼び出されていますか?
- 10. このメソッドはどのように呼び出されますか?
- 11. 呼び出し元メソッドは、呼び出し先メソッドによってスローされている例外をどのように知っていますか?
- 12. C++どのように正しいメソッドが呼び出されますか?
- 13. Jade Agent:setup()メソッドはどのように呼び出されますか?
- 14. 別のクラスの呼び出しメソッドはどうですか?
- 15. ActiveRecordはチェーン内の最後のメソッド呼び出しをどのように検出しますか?
- 16. どのようにワードプレスのストアドプロシージャを呼び出しますか?
- 17. ajax呼び出しのイベントバインド - どのようにしますか?
- 18. Twilio JavaScriptソフトフォンクライアントをどのように呼び出しますか?
- 19. SSISでどのようにストアドプロシージャを呼び出しますか?
- 20. どのようにgetItemを呼び出しますか?
- 21. 2時間ごとにTomcatのメソッドを呼び出す
- 22. コンテナは、子がInvalidateArrangeを呼び出したときをどのように知っていますか?
- 23. C#でメソッド/呼び出しを別のメソッドから呼び出す方法は?
- 24. application_controllerでメソッドを呼び出すにはどうすればよいですか?
- 25. JRubyのメソッドをJavaコードにどのように呼び出すのですか?
- 26. オブジェクトのメソッドをどのように動的に呼び出すのですか?
- 27. ArrayList.add()メソッドを呼び出すとどうなりますか?
- 28. iOSコントロールセンターは、どのUIApplicationメソッドも呼び出しますか?
- 29. プロジェクトを取得し、メソッド内から "コンパイル"メソッドを呼び出すにはどうすればよいですか?
- 30. Servletのdestroy()メソッドからservice()メソッドを呼び出すことはできますか?
https://github.com/apache/tomcat – PeterMmm