Servlet-请求转发与重定向解释及实现

请求转发和重定向是Servlet中的两种路径跳转的方法,我们一定要区分开它们。

请求转发

请求转发,见名知义,就是把Servlet接收到的请求转发到其他地方。

请求转发就相当于你找我,我帮你找他,比如下面,客户端请求Servlet1,Servlet1帮客户端转发到Servlet2,再由Servlet2为客户端做出响应(当然,请求转发不仅限于Servlet之间,还可以转发到JSP,HTML):

Servlet-请求转发与重定向解释及实现_第1张图片
在客户端浏览器访问Servlet1时,Servlet1处理完它的请求,就把请求对象和Servlet1的响应对象转发到了Servlet2,待Servlet2处理完成后,才把响应对象返回给客户端浏览器。在请求转发的时候,客户端浏览器的URL地址不会发生变化。

请求转发采用以下代码实现:

//请求转发到指定路径
request.getRequestDispatcher("转发路径").forward(request,response);

转发的路径一般来说为相对路径,如果在转发路径前添加/表示在该web应用的根路径下找对应资源,如果转发路径之前不带/,则在相对于该位置的路径去找资源。

说起来是叫请求转发,实际上把响应也发送到了转发的路径,大概是因为请求转发是请求对象来实现的吧,所以叫请求转发。

当用户访问URL指定的组件时,该组件处理完成之后,将请求对象和响应对象交给另一个组件,另一个组件处理完成之后再直接响应返回客户端,它是一个链式的连带关系,不论中途被转发过多少次,客户端浏览器始终访问的都是同一个请求地址。

请求转发的特点:

  • 客户端发出的请求被客户端请求目标和转发后的目标共享(这就可以在转发前的Servlet的请求域中存放与转发后的Servlet共享的数据)。
  • 客户端请求目标Servlet产生的响应不会被发送到客户端,客户端收到的响应是转发后的目标产生的。

重定向

重定向就是为客户端浏览器重新返回一个地址,让客户端去访问重新指定的地址,该机制是由HTTP协议所规定的。

重定向就相当于你找我,我告诉你应该去找他,然后你再去找他,如下客户端请求Servlet1,Servlet1告诉客户端需要重定向到Servlet2,客户端再去访问Servlet2,再由Servlet2向客户端做出响应:

Servlet-请求转发与重定向解释及实现_第2张图片
在客户端请求Servlet1之后,Servlet1向客户端返回需要重定向的响应结果,客户端浏览器就立即加载指定的URL路径,与此同时,浏览器的URL路径就会发生对应的改变,再由该路径为浏览器做出响应。

重定向就相当于是为客户端重新指定一个方向,让客户端浏览器去访问指定的资源,在这个过程中,客户端浏览器的URL地址会发生相应的变化。

当用户在浏览器中访问某个URL指定的组件,该组件向客户端浏览器返回状态码为302(302就表示为重定向)并且提供了另一个URL的响应结果,当浏览器接收到这种响应结果后,就会立即自动请求指定的URL,然后接收到该组件返回的响应结果。

重定向实现代码:

//重定向到指定路径
response.sendRedirect("路径");

该路径可以是绝对路径(包含协议,主机名和端口的地址),也可以是相对路径,如果在路径前添加/表示在该web服务器的根路径下找对应资源,如果路径之前不带/,则在相对于该位置的路径去找资源。

重定向特点:

  • 重定向之前的组件与重定向之后的组件不共享一个请求对象,
  • 重定向是对服务器发起的再一次请求
请求转发和重定向的区别

相同点:

  • 都能实现页面的跳转。

不同点:

请求转发 重定向
请求服务器 一次 请求服务器两次
浏览器URL不会改变 浏览器URL会改变
服务器行为 客户端行为
目标必须是本站点的网址 目标可以是任何网站资源

你可能感兴趣的:(Servlet,http)