您的位置 首页 java

三分钟看图学习 快速理解javaweb中转发和重定向

前言:

大家在学 javaweb 的时候,有个很重要的知识点,就是通过转发和重定向来实现我们的共享信息与页面跳转。 那为什么需要跳转和数据共享?

  1. 跳转:需要做责任分离( Servlet 擅长写代码即处理业务逻辑, jsp 擅长展示页面)通过后台经过代码的逻辑处理后跳转到对应的显示界面。如:点击登录按钮,经过后台代码验证跳转到登录成功或者失败的界面;
  2. 共享:Http是无状态的,我们跳转的时候数据无法传递,因此需要做数据共享;

我们先看下转发和重定向在代码中是如何应用的

转发的方式:

 req.get Request Dispatcher("要跳转的路径").forward(request, response);  

重定向跳转的方式:

 resp.send Redirect ("要跳转的路径");  

请求转发(RequestDispatcher)的过程:

客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的jsp页面,整个流程都是在服务器端完成的。

而且是在同一个请求里面完成的,因此servlet和jsp共享的是同一个request,在servlet里面放的所有东西,在jsp中都能取出来,因此,jsp能把结果getAttribute()出来,getAttribute()出来后执行完把结果返回给客户端。整个过程是一个请求,一个响应。

重定向(sendRedirect)的工作原理:

客户发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样,servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以,当这个servlet处理完之后,看到response.senRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个请求,去访问jsp页面。

紧接着客户端收到这个请求后,立刻发出一个新的请求,去请求jsp页面,这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。可见,在sendRedirect()里面是两个请求,两个响应。

我们再用一张图片快速理解转发和重定向

转发和重定向大家都知道他们的区别是不同的请求次数,地址栏中的地址是否发生变化,是否能访问web-inf下面的资源和能否访问外部资源。最重要的一点是是否能共享数据,很多人对此表示疑惑,转发是如何实现数据共享或者重定向为什么不支持数据共享的。

下面我们对图片进行举例解析

我向班长借是15元钱,班长说没有(其实是不想借我),班长说小王有,让我去向小王借钱。没办法我只能去找小王借钱,小王很大方直接借我100,说不够再找他。其实这里这就是我们讲的重定向,大家可以看到,我们是发送了两次请求的,一次是和班长借钱一次是和小王借钱。

而转发不同的是我去找班长借钱,班长虽然没有钱,但是班长说我去给你借钱去,班长去找小王借钱,并把借到的钱给我。相对我来说我只发了一次请求,是发送给班长的,而班长把请求进行了转发,但是班长和小王都是在本次请求中的。

那何为数据共享呢,大家可以看到,我向班长发送了一个15元的请求数据,班长把15元的请求数据转发给小王。最后我还钱的时候,我是直接把钱还给班长的,班长再把这一百元发送给小王,而不是我直接还给小王。

班长相当于中间人,起到的作用就是数据的共享和交互。而重定向为什么不能实现数据共享呢?

首先我向班长发送借钱请求,班长说没有,请求到这里就结束了,并没有发生数据的共享,而我和小王借钱只是简单的数据交互,不是数据的共享因为和班长没有任何关系。

这就是我对重定向和转发内容的总结,希望可以帮助大家理解。

文章来源:智云一二三科技

文章标题:三分钟看图学习 快速理解javaweb中转发和重定向

文章地址:https://www.zhihuclub.com/168873.shtml

关于作者: 智云科技

热门文章

网站地图