Servlet-HttpServletResponse对象

概述

servlet-api 4.0.1版本

Web服务器收到客户端的http请求,会针对每一次请求,创建一个代表响应的response对象,这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。

详细方法可以在IDEA里直接点进去看

常用方法

HttpServletResponse

扩展ServletResponse接口以在发送响应时提供特定于HTTP的功能

可以找到所有的响应码:

public void addCookie(Cookie cookie); // 将指定的cookie添加到响应中。可以多次调用此方法来设置多个cookie

public boolean containsHeader(String name); // 返回一个布尔值,指示命名的响应头是否已经设置

public String encodeURL(String url); // 

public String encodeRedirectURL(String url); // 编码含有中文的重定向链接

public void sendError(int sc, String msg) throws IOException;

public void sendError(int sc) throws IOException;

public void sendRedirect(String location) throws IOException; // 重定向功能

public void setDateHeader(String name, long date); // 设定具有指定日期的头

public void addDateHeader(String name, long date);

public void setHeader(String name, String value); // 使用给定的名称和值设置响应头。 如果已设置,则新值将覆盖前一个值

public void addHeader(String name, String value); // 添加具有给定名称和值的响应头。 此方法允许响应标头具有多个值

public void setIntHeader(String name, int value); // 用给定的名称和整数值设置响应头。 如果已设置标题,则新值将覆盖前一个值

public void addIntHeader(String name, int value); // 添加具有给定名称和整数值的响应标头。 此方法允许响应标头具有多个值

public void setStatus(int sc); // 设置此响应的状态码

public int getStatus(); // 获取此响应的当前状态代码

public String getHeader(String name);  // 获取具有给定名称的响应头的值。如果具有给定名称的响应标头存在并且包含多个值,则将返回最先添加的值。

public Collection<String> getHeaders(String name);  // 获取具有给定名称的响应头的值组

public Collection<String> getHeaderNames(); // 获取此响应的标头名称

ServletResponse

public String getCharacterEncoding(); // 返回用于此响应中发送的正文的字符编码(MIME字符集)的名称

public String getContentType(); // 返回用于此响应中发送的MIME正文的内容类型。 在提交响应之前,必须已经使用setContentType指定了适当的内容类型

public ServletOutputStream getOutputStream() throws IOException; // 返回适合于在响应中写入二进制数据的ServletOutputStream。 Servlet容器不对二进制数据进行编码

public PrintWriter getWriter() throws IOException; // 返回一个PrintWriter对象,该对象可以将字符文本发送到客户端。 PrintWriter使用getCharacterEncoding返回的字符编码

public void setCharacterEncoding(String charset); // 设置用于此响应中发送的正文的字符编码(MIME字符集)的名称

public void setContentType(String type); // 设置用于此响应中发送的MIME正文的内容类型

public void setContentLength(int len);

public void setBufferSize(int size); // 设置响应主体的首选缓冲区大小。 Servlet容器将使用至少与请求的大小一样大的缓冲区

public int getBufferSize(); // 返回用于响应的实际缓冲区大小。 如果不使用缓冲,则此方法返回0

public void flushBuffer() throws IOException; // 强制将缓冲区中的任何内容写入客户端。 对此方法的调用将自动提交响应,这意味着将写入状态代码和标头

public void resetBuffer(); // 清除响应中基础缓冲区的内容,而不清除标头或状态码

public boolean isCommitted(); // 返回一个布尔值,指示是否已提交响应。 提交的响应已经写入了其状态代码和标头

public void reset(); // 清除缓冲区中存在的所有数据以及状态代码,标头

public void setLocale(Locale loc); // 设置响应的语言环境。 如果尚未使用setContentType或setCharacterEncoding显式设置字符编码,它还会针对区域设置适当地设置响应的字符编码

public Locale getLocale(); // 使用setLocale方法返回为此响应指定的语言环境。  如果未指定任何语言环境,则返回容器的默认语言环境。

细节:

  • response获得的流不需要手动关闭,web容器(tomcat容器)会帮助我们关闭
  • getWriter和getOutputStream不能同时调用
  • 重定向语句一般作为终结代码

浏览器乱码问题

设置浏览器响应类型,指定浏览器解析时用的编码,包含setCharacterEncoding()功能,写在开头

response.setContentType("text/html;charset=UTF-8"); 

重定向

B一个web资源收到客户端A请求后,B他会通知A客户端去访问另外一个web资源C,这个过程叫重定向

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 重定向到 /hello
    // 如果有项目名要加上完整路径 /myweb/hello
    response.sendRedirect("/hello");
}

重定向和转发的区别

  • 相同点
    * 页面都会实现跳转
  • 不同点
    * 请求转发的时候,url不会产生变化,不需要加虚拟路径,307
    * 重定向时候,url地址栏会发生变化,需要加虚拟路径,302

验证

原文地址:https://www.cnblogs.com/shenleg/p/14252309.html