次のコードがあります。
@WebServlet(urlPatterns="/Servlet1", asyncSupported=true)
public class Servlet1 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Servlet1 doGet ..");
AsyncContext ac = request.startAsync();
System.out.println(request.isAsyncStarted());
ac.dispatch("/Servlet2");
System.out.println("Servlet1 doGet after dispatch ..");
}
}
@WebServlet("/Servlet2")
public class Servlet2 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Servlet2 doGet ..");
}
}
次の出力に注意してください。
Servlet1 doGet ..
true
Servlet1 doGet after dispatch ..
Servlet2 doGet ..
最後の 2 行の出力に注目してください。
私は期待していました(転送リクエストディスパッチャのように)
Servlet2 doGet
Servlet1 doGet after dispatch ..
ac.dispatch が新しいスレッドを作成したようです。
これについて何か考えはありますか?
ありがとう。