一response概述
response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse。在客户端发出每个请求时,服务器都会创建一个response对象,并传入给Servlet.service()方法。response对象是用来对客户端进行响应的,这说明在service()方法中使用response对象可以完成对客户端的响应工作。二response对象的功能
response对象的功能主要有以下四种
设置响应正文;
设置响应头信息;
发送状态码;
重定向;
现分别做介绍:
1设置响应正文
response是响应对象,向客户端输出响应正文(响应体)可以使用response的响应流,repsonse一共提供了两个响应流对象:
PrintWriter out = response.getWriter():获取字符流;
ServletOutputStream out = response.getOutputStream():获取字节流;
当然,如果响应正文内容为字符,那么使用response.getWriter(),如果响应内容是字节,例如下载时,那么可以使用response.getOutputStream()。对于什么样的响应内容都可以使用response.getOutputStream()。
注意,在一个请求中,不能同时使用这两个流!也就是说,要么你使用repsonse.getWriter(),要么使用response.getOutputStream(),但不能同时使用这两个流。不然会抛出IllegalStateException异常。
2设置响应头信息
可以使用response的setHeader等方法来设置响应头,用这些方法设置的响应头会最终发送到客服端。一些方法如下:
- public boolean containsHeader(String name)
- 返回一个 boolean 值,指示是否已经设置指定的响应头。
- name 头名称
- return 如果已经设置指定的响应头,则返回 true;否则返回 false
- public void addDateHeader(String name, long date)
- 用给定名称和日期值添加响应头。该日期根据距历元时间的毫秒数指定。此方法允许响应头有多个值。
- name 要设置的头的名称
- date 附加的日期值
- public void setDateHeader(String name, long date)
- 用给定名称和日期值设置响应头。该日期根据距历元时间的毫秒数指定。如果已经设置了头,则新值将重写以前的值。containsHeader方法可用于测试在设置其值之前头是否存在。
- name 要设置的头的名称
- date 指定的日期值
- public void addHeader(String name, String value)
- 用给定名称和值添加响应头。此方法允许响应头有多个值。
- name 头的名称
- value 附加的头值,
- public void setHeader(String name, String value)
- 用给定名称和值设置响应头。如果已经设置了头,则新值将重写以前的值。containsHeader方法可用于测试在设置其值之前头是否存在。
- name 头的名称
- value 头值,
- public void addIntHeader(String name, int value)
- 用给定名称和整数值添加响应头。此方法允许响应头有多个值。
- name 头的名称
- value 指定的整数值
- public void setIntHeader(String name, int value)
- 用给定名称和整数值设置响应头。如果已经设置了头,则新值将重写以前的值。containsHeader方法可用于测试在设置其值之前头是否存在。
- name 头的名称
- value 指定的整数值
3发送状态码
- public void setStatus(int sc)
- 设置此响应的状态代码。此方法用于设置没有错误时的返回状态代码(例如状态代码 SC_OK 或 SC_MOVED_TEMPORARILY)。如果有错误,并且调用者希望调用 Web 应用程序中定义的错误页面,则应改用 sendError 方法。
- 容器清除缓冲区,设置 Location 头,并保留 cookie 和其他头。
- sc 状态代码
- public void sendError(int sc) throws java.io.IOException
- 使用指定状态代码并清除缓冲区将错误响应发送到客户端。
- 如果已经提交了响应,则此方法抛出 IllegalStateException。使用此方法后,响应应该被视为已经被提交,不能再写入。
- sc 错误状态代码
- Throws java.io.IOException: 如果发生输入或输出异常
- Throws IllegalStateException: 如果在此方法调用之前提交了响应
4重定向
4.1什么是重定向
当你访问http://www.sun.com时,你会发现浏览器地址栏中的URL会变http://www.oracle.com/us/sun/index.htm,这就是重定向了。重定向是服务器通知浏览器去访问另一个地址,即再发出另一个请求。
4.2完成重定向
响应码为200表示响应成功,而响应码为302表示重定向。所以完成重定向的第一步就是设置响应码为302。因为重定向是通知浏览器再第二个请求,所以浏览器需要知道第二个请求的URL,所以完成重定向的第二步是设Location头,指定第二个请求的URL地址。4.3便捷的重定向方式
response.sendRedirect("请求重定向的地址");