当我们在浏览网页或者进行相关网页操作时常常会遇到页面跳转,为了避免在页面跳转过程中发生不必要的麻烦,我们需要掌握其中的原理及其操作。这一点对于一个程序员,特别是从事java web开发方面的程序员来说尤为重要。
先来看一张图:
此图形象生动的描绘了转发的原理:转发即为请求处理器(ServletA)将请求交给另一个处理器处理(ServletB),再讲结果返回的过程。
转发过程大体为: 客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的student_list.jsp,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此servlet和jsp共享的是同一个request,在servlet里面放的所有东西,在student_list中都能取出来,因此,student_list能把结果getAttribute()出来,getAttribute()出来后执行完把结果返回给客户端。整个过程是一个请求,一个响应。
在转发过程中,用户浏览器的地址栏不会被更改,也就是说,用户访问什么地址就跳转到什么地址,和用户的输入地址一致。
特点:
- 转发是服务器行为;
- 转发是浏览器只做了一次访问请求;
- 转发浏览器地址不变;
- 转发两次跳转之间传输的信息不会丢失,所以可以通过request进行数据的传递;
- 转发只能将请求转发给同一个web应用中的组件。
那么,何为重定向呢?
如图所示,重定向即为客户端与服务器多次进行请求与响应的过程,但服务器并为对客户端发出的请求做出相应处理,而是告诉用户需要发送哪几个请求。
此过程大体为:客户发送一个请求到服务器,服务器匹配servlet,servlet处理完之后调用了sendRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个请求,去访问student_list.jsp,紧接着客户端收到这个请求后,立刻发出一个新的请求,去请求student_list.jsp,这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。由此可见,在sendRedirect()里面是两个请求,两个响应。
特点:
1.重定向是客户端行为;
2.重定向是浏览器向服务器发出不止一次请求的过程;
3.重定向浏览器地址改变;
4.重定向两次跳转之间传输的信息会丢失;
5.重定向可以指向任何的资源,包括当前应用程序中的其他资源,同一个站点上的其他应用程序中的资源,其他站点的资源。