JAVAWEB学习(5) — 转发和重定向

转发和重定向

1. 转发

1.1 什么是转发

一个web组件将未完成的处理通过容器交给另外一个web组件继续做

web组件指的是servlet或者是jsp

通常是一个servlet获得数据之后转发给一个jsp来展现

1.2 如何转发

  1. 绑定数据到请求对象上

    //name:绑定名
    //obj:绑定值
    request.setAttribute(String name,Object obj);
    String request.getAttribute(String name);
    
  2. 获得转发器

    //url是转发地址,通常是一个jsp
    RequestDispatcher rd = request.getRequestDispatcher(String url);
    
  3. 转发

    rd.forward(request,response);
    

    在这里插入图片描述

1.3 转发的特点

  • 转发的地址是有限制的,要求属于同一个web应用。
  • 转发之后,浏览器地址栏的地址不变

2. 重定向

2.1 什么是重定向

服务器通知浏览器向某个地址发送请求。

服务器可以通过发送302状态码及Location消息头(该消息头的值是一个地址,一般称之为重定向地址)给浏览器,浏览器收到之后,会立即向重定向地址发送请求

在这里插入图片描述

2.2 如何重定向

//url用来指定重定向地址
response.sendRedirect(String url);

2.3 重定向的一个细节

重定向之前,容器会先清空response对象上存放的所有数据

实体内容为空

3. 转发和重定向的区别

在这里插入图片描述

两种跳转获得对象的方式

//获得转发对象getRequestDispatcher()
HttpServletRequest(httpServletRequest).getRequestDispatcher
ServletContext.getRequestDispatcher();
 
//获得重定向对象sendRedirect()
HttpServletResponse(httpServletResponse).sendRedirect();
  • 转发使用的是getRequestDispatcher()方法;重定向使用的是sendRedirect()
  • 转发:浏览器URL的地址栏不变。重定向:浏览器URL的地址栏改变
  • 转发是服务器行为,重定向是客户端行为
  • 转发更高效。转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求的
  • 转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)
  • 请求转发的path只能是当前项目中的path,而重定向location可以是项目外的地址

4. 转发和重定向的选择

  1. 重定向的速度比转发慢,因为浏览器还得发出一个新的请求,所以如果在使用转发和重定向都无所谓的时候建议使用转发
  2. 因为转发只能访问当前WEB的应用程序,所以不同WEB应用程序之间的访问,特别是要访问到另外一个WEB站点上的资源的情况,这个时候就只能使用重定向了

猜你喜欢

转载自blog.csdn.net/yisany_Q/article/details/83268139