【Java学习笔记】—— Servlet的转发与重定向

来源:互联网 发布:数据库表之间的关系图 编辑:程序博客网 时间:2024/05/22 14:41

    转发和重定向都能让浏览器获得另外一个URL所指向的资源,但是两者的内部运行机制有着很大的区别。


转发



      客户端(浏览器)首先发送一个请求到服务器端,服务器端发现匹配的Servlet(组件1),并指定它去执行。当Servlet执行完之后,将request和response对象传递给组件2,由组件2继续处理,然后输出响应。整个流程都是在服务器端完成的,而且是在同一个请求里面完成的。这个传递的过程,称为“转发”。


       转发的意义在于可以实现组件的“分工”。在基于MVC的多层结构的Web应用中,经常需要多个组件协同完成一次“请求-响应”工作,例如:用户需要获取考试信息,提交请求至控制器组件(Servlet),该Servlet调用适当的JavaBean获取“考试信息表”的数据,在转发到JSP页面显示信息。


       RequestDispatcher对象封装了转发的操作。通过request的getRequestDispatcher(String path)方法获得转发对象,其中path是需要转发的地址。调用Dispatcher对象的forward对象(request,response)方法实现转发


[java] view plain copy
 print?
  1. //转发到Demo.jsp页面  
  2. request.getRequestDispatcher (“Demo.jsp"). forward(request, response);  

关于转发的具体操作,需要注意:

1、转发只能在同一个应用的组件之间进行,不可以转发给其他应用的地址。

2、转发的地址可以用”相对地址“的方式,也可以用”绝对地址“的方式。

3、组件之间通过转发来分工协作,势必会涉及到数据的传递,可以通过Request对象传递数据。


重定向


       客户端(浏览器)向服务器端发送请求信息,组件1向浏览器发回一个重定向的响应信息,该信息中不包含具体的数据内容,只包含了需要重定向到的地址信息,该地址可以是任何有效的URL。浏览器收到该重定向响应后会自动响应信息中所指示的地址然后发出请求。整个重定向的过程涉及两次”请求-响应“。


      重定向可以通过response中的sendRedirect(String path)方法来实现,这里的path表示需要重定向到的地址。





两者之间的区别


      转发是服务器端的行为,重定向是客户端的行为。


      转发过程:客户端浏览器发送HTTP请求——>Web服务器接受此请求——>调用内部的方法完成请求处理和转发动作——>将信息返回给客户端。

      在这里,转发的路径必须是在同一个Web容器下的URL,不能转向到其他的Web路径上去。浏览器不知道中间的转发动作,它只知道发送了一个请求,然后得到了一个响应。浏览器的URL地址栏不变!

   

      重定向过程:客户端浏览器发送HTTP请求——>Web服务器接受此请求——>发送新的URL地址给客户端浏览器——>客户端浏览器进行响应,并请求新的URL地址——>Web服务器根据请求返回相应的信息。

      在这里,Web服务器可以重定向到任意的URL。返回新的URL地址后,客户端浏览器需要重新进行请求,所以客户端浏览器URL地址栏的地址是变化的。

0 0
原创粉丝点击