请求调度程序转发和servlet链接之间的区别

时间:2012-12-12 16:44:01

标签: java servlets request response

请求调度程序的forward方法和servlet链接的概念有什么区别?

示例

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

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

2 个答案:

答案 0 :(得分:5)

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

自从引入J2EE 1.3(Servlet 2.3,十年之前已经!)servlet filters以来,这个过程变得更加干净和简单。从那以后,“Servlet链接”不受欢迎,通常被标记为“糟糕的设计”。现在,您最终只想拥有一个前端控制器servlet和几个商业模型。

答案 1 :(得分:0)

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

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

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