request dispatcher的forward方法和servlet chaining的概念有什么区别?
例子
RequestDispatcher rd= req.getRequestDispatcher("pathToServlet");
rd.forward(req,resp);
这样做是在不涉及客户端(浏览器)交互的情况下转发请求。但是我们可以使用 Servlet Chaining 实现同样的效果吗?如果可以,那有什么区别?
最佳答案
没有什么不同。 “Servlet 链接”只是在黑暗的 J2EE 1.1/1.2 时代创造的一个术语,当时 servlet 过滤器还不存在。事实上,它基本上是使用 RequestDispatcher#forward()
从一个 servlet 转发到另一个 servlet 的方法(并确保响应尚未提交,否则会导致 IllegalStateException
).
自从 J2EE 1.3(Servlet 2.3,已经超过 十年 了!)servlet filters被引入,这使得这个过程变得更加干净和容易。从那时起,“Servlet chaining”就不受欢迎了,通常被标记为“糟糕的设计”。如今,您最终希望只拥有一个前端 Controller servlet 和多个业务模型。
关于java - 请求调度器转发和 servlet 链接之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13844481/