Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 请求分派器转发和servlet链接之间的区别_Java_Servlets_Request_Response - Fatal编程技术网

Java 请求分派器转发和servlet链接之间的区别

Java 请求分派器转发和servlet链接之间的区别,java,servlets,request,response,Java,Servlets,Request,Response,请求调度器的转发方法和servlet链接的概念有什么区别 范例 RequestDispatcher rd= req.getRequestDispatcher("pathToServlet"); rd.forward(req,resp); 这样做的目的是在不涉及客户端(浏览器)交互的情况下转发请求。但是我们可以使用Servlet链接实现同样的功能吗?。如果可以,那么有什么区别呢?没有区别。“Servlet链接”只是在黑暗的J2EE1.1/1.2时代创造的一个术语,当时Servlet过滤器不存在。

请求调度器的转发方法和servlet链接的概念有什么区别

范例

RequestDispatcher rd= req.getRequestDispatcher("pathToServlet");
rd.forward(req,resp);
这样做的目的是在不涉及客户端(浏览器)交互的情况下转发请求。但是我们可以使用Servlet链接实现同样的功能吗?。如果可以,那么有什么区别呢?

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

自从J2EE1.3(Servlet2.3,十多年前就已经有了!)被引入以来,这个过程变得更加干净和简单。从那时起,“Servlet链接”就不受欢迎,通常被标记为“糟糕的设计”。现在,您最终只希望得到一个前端控制器servlet和几个业务模型。

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


自从J2EE1.3(Servlet2.3,十多年前就已经有了!)被引入以来,这个过程变得更加干净和简单。从那时起,“Servlet链接”就不受欢迎,通常被标记为“糟糕的设计”。现在,您最终只希望得到一个前端控制器servlet和几个业务模型。

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

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


如果特定的servlet决定它应该传递请求,那么
forward()
方法非常有用

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

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


如果特定的servlet决定它应该传递请求,那么
forward()
方法非常有用

Dispatcher forward是实现servlet链接的一种方法Dispatcher forward是实现servlet链接的一种方法,这意味着使用RequestDispatcher的forward方法是最好的方法,对吗?更重要的是,它是唯一的方法。然而,如果您已经使用了支持Servlet 2.3的容器(如果您没有,我会非常惊讶),那么您应该绝对更喜欢使用Servlet过滤器来完成任务,因为您基本上滥用Servlet作为错误的工具来完成任务。这意味着最好的方法是使用RequestDispatcher的forward方法,对吗?更重要的是,这是唯一的方法。但是,如果您已经使用了支持Servlet2.3的容器(如果您没有,我会非常惊讶),那么您应该绝对喜欢使用ServletFilters进行作业,因为您基本上滥用servlets作为作业的错误工具。