重定向和转发

重定向

  1、什么是重定向?

    在服务器为浏览器提供响应时,回传的数据包中的状态行里面是302状态码,同时在消息头内会增加一个键值对,名称为Location,值是一个新的URL地址。当这个响应到达浏览器的时候,这一次的请求响应过程并未结束,浏览器遇见302状态码之后,会立即按照Location头信息中指定的URL地址发送新的一个请求,这样一个在接到响应后又立即发出请求的过程叫做重定向。对于客户端用户来讲,中间的变化过程不会被察觉,因为这个过程是由浏览器自动完成的。

  2、重定向的特点

    重定向地址任意

    重定向之后浏览器的地址会发生变化

    重定向之前,容器会清空response对象上存放的所有数据。也就是说实体内容内是没有任何数据的。

  3、如何实现 重定向?

    response.sendRedirect(String url),resoponse调用是因为发回的响应信息是由response对象控制

    

转发

 1、什么是转发?

    在Web服务器端处理用户请求的时候,会有需要多个Web组件配合才能完成的情况。一个Web组件(Servlet/JSP)将未完成的处理通过容器转交给另外一个Web组件继续完成,这个转交的过程叫做转发。

    常见情况是Servlet负责获取数据,然后将数据转交给JSP进行展现。
 
  2、如何实现转发?
    a.绑定数据到request对象
      在转交的过程中一定会有数据的传递,并且涉及到的Web组件都是针对同一个请求,所以利用request来保存共同处理的数据不仅仅能让数据共享,也能够随着请求响应的结束而销毁,不会占用服务器更多的资源

      request.setAttribute(String name,Object obj);

    b.获得转发器
      说明转交下一个组件的路径 
      RequestDispatcher rd = request.getRequestDispatcher(String uri);
    c.实现转发
      使用转发器完成转发的动作,因下一个Web组件要针对同一个请求和响应继续完成后续的工作,所以在转发时要将本次的请求和响应对象作为参数传给下一个Web组件。
      rd.forward(request,response);
 
  3、转发和重定向的区别

      共享request和response:转发可以,重定向不行。因为请求和响应对象的生存时间是一次请求与响应。

      目的地有无限制:转发有限制(同一个应用),重定向无限制

      浏览器地址栏:转发无变化,重定向有变化。


作者:danielJinyu

本文版权归作者和博客园共有,欢迎转载,但未经作者同意请保留此段声明,请在文章页面明显位置给出原文连接
Github:https://github.com/DanielJinyu

原文地址:https://www.cnblogs.com/danielJinyu/p/11394574.html