HttpServletResponse
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。
request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了。
一、HttpServletResponse对象介绍
HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。查看HttpServletResponse的API,可以看到这些相关的方法。
1.1、负责向客户端(浏览器)发送数据的相关方法
1.2、负责向客户端(浏览器)发送响应头的相关方法
1.3、负责向客户端(浏览器)发送响应状态码的相关方法
1.4、响应状态码的常量
HttpServletResponse定义了很多状态码的常量(具体可以查看Servlet的API),当需要向客户端发送响应状态码时,可以使用这些常量,避免了直接写数字,常见的状态码对应的常量:
状态码404对应的常量
状态码200对应的常量
状态码500对应的常量
二、HttpServletResponse常见应用——设置响应头控制浏览器的行为
2.1、设置http响应头控制浏览器禁止缓存当前文档内容
1 response.setDateHeader("expries", -1); 2 response.setHeader("Cache-Control", "no-cache"); 3 response.setHeader("Pragma", "no-cache");
2.2、设置http响应头控制浏览器定时刷新网页(refresh)
1 response.setHeader("refresh", "5");//设置refresh响应头控制浏览器每隔5秒钟刷新一次
2.3、通过response实现请求重定向
请求重定向指:一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向。
应用场景:用户登陆,用户首先访问登录页面,登录成功后,就会跳转到某个页面,这个过程就是一个请求重定向的过程
实现方式:response.sendRedirect(String location),即调用response对象的sendRedirect方法实现请求重定向
sendRedirect内部的实现原理:使用response设置302状态码和设置location响应头实现重定向
例如:
1 package gacl.response.study; 2 import java.io.IOException; 3 import javax.servlet.ServletException; 4 import javax.servlet.http.HttpServlet; 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.http.HttpServletResponse; 7 8 public class ResponseDemo04 extends HttpServlet { 9 10 public void doGet(HttpServletRequest request, HttpServletResponse response) 11 throws ServletException, IOException { 12 /** 13 * 1.调用sendRedirect方法实现请求重定向, 14 * sendRedirect方法内部调用了 15 * response.setHeader("Location", "/JavaWeb_HttpServletResponse_Study_20140615/index.jsp"); 16 * response.setStatus(HttpServletResponse.SC_FOUND);//设置302状态码,等同于response.setStatus(302); 17 */ 18 response.sendRedirect("/JavaWeb_HttpServletResponse_Study_20140615/index.jsp"); 19 20 //2.使用response设置302状态码和设置location响应头实现重定向实现请求重定向 21 //response.setHeader("Location", "/JavaWeb_HttpServletResponse_Study_20140615/index.jsp"); 22 //response.setStatus(HttpServletResponse.SC_FOUND);//设置302状态码,等同于response.setStatus(302); 23 } 24 25 public void doPost(HttpServletRequest request, HttpServletResponse response) 26 throws ServletException, IOException { 27 doGet(request, response); 28 } 29 }