1

request dispatcher 的 forward 方法和 servlet chaining 的概念有什么区别?

例子

RequestDispatcher rd= req.getRequestDispatcher("pathToServlet");
rd.forward(req,resp);

这样做是在不涉及客户端(浏览器)交互的情况下转发请求。但是我们可以使用Servlet Chaining实现相同的目标吗?如果我们可以那么有什么区别?

4

2 回答 2

6

这没有什么不同。“Servlet 链接”只是在不存在 servlet 过滤器的黑暗 J2EE 1.1/1.2 时代创造的一个术语。实际上,它基本上是使用RequestDispatcher#forward()从一个 servlet 转发到另一个 servlet 的方法(并确保响应尚未提交,否则会导致IllegalStateException)。

自 J2EE 1.3(Servlet 2.3,多年前!)以来,引入了servlet 过滤器,这使得该过程变得更加干净和容易。从那时起,“Servlet 链接”就被人们所反对,通常被标记为“糟糕的设计”。这些天来,您最终希望只得到一个前端控制器 servlet 和几种业务模型。

于 2012-12-12T16:56:08.267 回答
0

我认为“链接”的概念,因为它与配置服务器而不是使用forward()方法有关,是您可以配置某些类型的请求来激活特定的 servlet 链。

例如,如果请求来自 Intranet,您可能希望用户看到一些内部广告。所以你可以让所有这些请求AddInternalBanner首先作为 servlet 进行。

如果特定的 servlet 决定它应该传递请求,则该forward()方法很有用。

于 2012-12-12T17:00:49.347 回答