servlet-4(请求转发与重定向)

请求转发与重定向

  通过HttpServletRequest 获取到的RequestDispatcher 对象的forward()方法,可以完成请求转发功能。而通过HttpServletResponse 的sendRedirect()方法,可以完成重定向功能。

请求转发与重定向均是指的请求的跳转方式。用户提交请求需要访问服务端的资源1,
而资源1 又需要访问资源2,那么由资源1 向资源2 的跳转,具有两种方式:请求转发与重
定向。

(1)请求转发

  请求转发是指资源1在服务器内部直接跳转到资源2,所以请求转发也称为服务期内跳转。整个过程中浏览器只发出一次请求,服务器只发出一次响应,所以无论是资源1还是资源2,整个过程中只存在一次请求,即用户所提交的请求。所以无论是用户1还是用户2都可以获得用户提交请求时所携带的数据

(2)重定向

  重定向是指,资源1需要访问资源2,但并未在服务器内直接访问,而是向浏览器自动发送一个响应,浏览器在自动提交一个请求访问资源2。所以对于资源2的访问,是先跳出了服务器,跳转到了客户端浏览器,再跳转回服务器。所以重定向又称为服务器外跳转。

  整个过程浏览器提交了两次请求,服务器端发送了两次响应,但是在用户看来只提交了一次请求且只收到了一次响应 。但实际上产生了两次请求,那么资源2中是无法获取到用户提交请求的数据的。它只能获取第二次请求中所携带的数据。

 

注1:因为重定向时无法拿到第一次提交的参数,我们可以在重定向的请求地址后携带参数。 携带的参数形式为 :    请求路径?参数名=值&参数名=值&。。。

注2:重定向可以跳转到别的应用,而请求转发只能在当前应用内跳转

请求转发与重定向的选择
(1)若需要跳转到其它应用,则使用重定向。
(2)若是处理表单数据的Servlet 要跳转到其它Servlet,则需要选择重定向。为了防止表单
重复提交。
(3)若对某一请求进行处理的Servlet 的执行需要消耗大量的服务器资源(CPU、内存),此
时这个Servlet 执行完毕后,也需要重定向。
(4)其它情况,一般使用请求转发。

 

posted @ 2017-11-22 17:17  昵称什么的都不重要  阅读(521)  评论(0编辑  收藏  举报