HttpServletResponse

HttpServletResponse是继承ServletResponse接口,主要用于封装HTTP响应信息。由于HTTP响应消息分为状态行、响应消息头、消息体三部分。因此,在HttpServletResponse接口中也定义了向客户端发送响应状态码、响应信息头、响应信息体的方法。

  • 设置响应行

响应状态码一般情况下应该由Web服务器根据程序的运行状态自动进行设置,而不是由我们人为的去设置。设置的方式通过setStatus(int status)。由于响应状态行的状态描述信息与状态码相关,而HTTP版本由服务器确定,因此,只要通过setStatus(int status)方法设置状态码,即可实现状态行的发送。在正常情况下,Web服务器会默认产生一个状态码为200的状态行。

另外可以通过sendError(int sc)方法设置发送错误信息的状态码。例如404状态码表示找不到客户端请求的资源。response对象提供了两个重载的sendError(int sc)方法。

public void sendError(int code) throws java.io.IOException
public void sendError(int code,String message)throws java.io.IOException

重载的两个方法中,第一个方法只发送错误信息的状态码,而第二个方法除了发送状态码以外,还可以增加一条用于提示说明的文本信息,该文本信息将出现在发送给客户端的正文内容中。

  • 设置响应头

Servlet向客户端发送的响应消息中包含响应头字段,由于HTTP协议的响应头字段有很多种,因此在HttpServeltResponse接口中定义了一系列的设置响应头的字段。

常用的有addHeader(String name,String value)和setHeader (String name,String value)两个方法都是用于设置响应头字段。不同的是addHeader()方法可以增加同名的响应头,而setHeader()方法则会覆盖同名的头字段。

HttpServletResponse_第1张图片

另外Response中的setContetType()、setLoacale() 和 setCharacterEncoding() 方法用于设置字符编码,这些设置字符编码的方法可以有效解决乱码问题。

  • 设置响应体

在Http响应消息中,大量的数据都是通过响应消息体传递的,因此,ServletResponse遵循了以I/O流传递大量数据的设计理念。在发送响应消息体时,定义了两个与与输出流相关的方法——getOutputStream()和getWriter()方法。前者可以直接输出字节数组中的二进制数据,要想输出二进制格式的响应正文使用前者即可。后者获取的是字符输出流对象(PrintWriter),可以直接输出字符文本内容,因此想要输出全部为字符文本的网页文档,则需要使用getWriter()方法。

虽然getOutputStream()和getWriter()方法都可以发送响应消息体,但是,它们之间是互相排斥的,不可能同时使用,否则会发送illegalStateException异常。

  • 小结

 HttpServletResponse常见的用处:设置定时刷新和设置重定向。

定时刷新就是使用了Html中的meta属性(refresh)。通过设置该属性可以实现页面定时刷新。

response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("");
response.getWriter().write("你好");

设置重定向需要同时设置请求行和请求头中的内容。

response.setStatus(302);
response.setHeader("location", "https://jjqcd.com");

HttpServletResponse_第2张图片

Response中也有sendRedirect()方法来实现,实现的过程也是设置这两个参数来实现。

HttpServletResponse_第3张图片

 

你可能感兴趣的:(Java,Web)