Response、重定向与转发

应答对象response

在这里插入图片描述

  • 与request对象对应,对用户的请求做出动态响应,向客户端输出信息。(与request的不同点:request对象封装了客户端向服务器发出的HTTP请求中的所有细节信息,包括HTTP头信息、系统信息、请求方式、请求参数)
    在这里插入图片描述
  • 封装了JSP产生的响应,发送到客户端。
  • 动态响应通常包括如下3个
    • 重定向网页
    • 处理HTTP文件头(也称响应表头)
    • 设置输出缓冲

重定向网页

  • response.sendRedirect("目标路径");
重定向与转发的不同地方
  1. 实现

    转发:用request的getRequestDispatcher()方法得到ReuqestDispatcher对象,调用forward()方法

    • request.getRequestDispatcher("other.jsp").forward(request, response);

      重定向:调用response的sendRedirect()方法

    • response.sendRedirect("目标路径");
  2. 地址栏
    • 转发不会显示出转向的地址,重定向会显示出地址
  3. 请求
    • 重定向:提交两次请求 转发:提交一次请求
  4. 数据
    • 重定向操作后,request与response消失,新建request与response对象,数据全部丢失,而session根据cookies中的session_id可以重新获取原页面的session。
  5. 原理
    在这里插入图片描述
  • 请求转发:
    • 客户端打开check.jsp页面后,当代码执行到check.jsp中请求转发到success.jsp的代码后,服务器端在内部直接请求转发至succes.jsp页面,最后服务端向客户端发回响应显示success.jsp页面信息。
    • 实际上是服务器内部控制权的转移,是由服务器端的请求,客户端并不知道是怎样转移的,因此客户端浏览器的地址不会显示所转向的地址。(也就是说第二次网页的跳转并不是客户端发起的请求)

在这里插入图片描述

  • 重定向:
    • 客户端打开check.jsp页面后,当代码执行到check.jsp中请求转发到success.jsp的代码后,服务器端向客户端发回响应(告诉客户端:你应该去找success.jsp页面),于是客户端再向服务器端发出request请求(请求Success.jps页面),最后服务器发回响应显示success.jsp页面信息。
    • 是服务器告诉了客户端要转向那个地址,客户端再自己去请求转向的地址,因此会显示所转向的地址。(第一次打开页面,发出第一个request,服务器response回来,告诉客户端你应该去另一个网页,之后客户端再request另外一个网页。)

小结

  • 转发使用getRequestDispatcher()方法,重定向使用的是sendRedirect();方法
  • 转发:地址不变,重定向:地址改变、
  • 转发是服务器行为,重定向是客户端行为
  • 转发浏览器只做了一次访问请求,重定向是浏览器至少做了两次请求。
  • 转发:request信息不会丢失,重定向会丢失。

处理HTTP文件头

设置响应表头:

setHeader(String name,String value)

禁用缓存(禁止浏览器的缓存)

response.setHeader("Cache-Control","no-store");
response.setDateHeader("Expires","0");

设置页面自动刷新

response.setHeader("refresh","3"); //三秒后自动刷新

定时跳转网页

response.setHeader("refresh","10;URL=目标路径");//10秒后跳转

设置输出缓冲

response.setBufferSize(32); //缓冲区大小32KB
简介:通常情况下服务器要输出至客户端的内容不会直接写入客户端,而是先写入进一个输出缓冲区

缓冲区内容自动写入客户端的几种情况

  • jsp页面的输出信息已经全部写入缓冲区
  • 缓冲区已满
  • 再JSP页面中调用了response对象的flushBuffer()方法或out对象的flush()方法
    在这里插入图片描述

版权声明:本文为weixin_42649617原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。