RequestDispatcherが一番大事
大抵のAPサーバがリクエストを処理する実行スレッドを持っているところまでは,それとなく分かっていたが,実際にスレッドの中で何が起きているかまでは理解しきれてなかった。
winstoneも例に漏れず実行スレッド(RequestHandlerThread)を持っているワケなんだが,そこで何が行われているかというと,だいたいこんな(↓)ことが行われている。
RequestHandlerThread.run() → RequestHandlerThread.processRequest() → WebAppConfiguration.getInitialDispatcher() → RequestDispatcher.forward() → ServletConfiguration.execute() → Servlet.service()
日本語で簡単に言うと,
- URIに相当するRequestDispatcherを取得(大抵はServletかJSP)
- 取得したRequestDispatcherにフォワードする(ここでServlet.service()が呼ばれる)。
となる。
つまり,ふつーにServletやJSPが呼ばれてるのも,コンテナ内で相当のRequestDispatcherを作っているに他ならないって事だ。
普段,あんまり気にしないで使っていたRequestDispatcherが実は処理の中核だったというワケか。
#あくまでwinstoneの実装の話だけど,他のAPサーバも似たり寄ったりだと思う。