forward/redirect重定向

想要从一个Servlet转向另外一个Servlet,可以使用两种方法进行重定向:

forward(或称dispatch)-服务器端重定向

redirect–客户端重定向

forward

服务器端从一个Servlet转向另外一个Servlet,在一个Servlet中可以通过setAttribute往request中传递一些值

在另外一个Servlet中,可以通过getAttribute从request中取值

在两个Servlet中访问到的request的数据是一样的(同一个request)

redirect

服务器实际上已经向客户端产生了响应(302号响应)

客户端(即浏览器)根据响应的HTTPHEAD中包含的redirect地址,向服务器重新发起一个请求(用GET方式)

后面这个请求与一开始那个请求不是同一个请求,所以,在前一个请求中调用setAttribute放进去的数据已经丢失!

浏览器发起请求->服务器响应->浏览器解释响应,可以称为一个请求周期!

forward

浏览器请求Servlet1->Servlet1forward到Servlet2->Servlet2forward到Servlet3->Servlet3响应,浏览器解释响应。这是一个请求周期,在这个请求周期中,request中的数据不会丢失!

redirect

浏览器请求Servlet1 -> Servlet1 redirect到Servlet2(实际过程是:Servlet1向浏览器响应 ->浏览器根据响应自动的再次向服务器发起请求到Servlet2 ->Servlet2向浏览器响应->浏览器解释响应)。所以,这是两个请求周期。这意味着,在服务器端,是两个完全不同的request,所以request中的数据自然也就丢失了!

相关推荐