什么是HttpServletResponse?
概念:
-
Servlet API 中,定义的一个 HttpServletResponse 接口,它继承自 ServletResponse 接口
作用:
-
封装Http响应消息--->Response对象
-
响应信息封装到response对象中,容器解析后返回给客户端
Http响应组成
-
响应行
-
响应头
-
消息体
HttpServletResponse 接口中定义了向客户端发送响应状态码、响应头、响应体的方法
响应行相关方法
响应行要素:
-
需要在响应消息中设置状态码
返回值类型 | 方法 | 描述 |
---|---|---|
void | setStatus(int status) | 用于设置 HTTP 响应消息的状态码,并生成响应状态行。 |
void | sendError(int sc) | 用于发送表示错误信息的状态码。 |
响应头相关方法
返回值类型 | 方法 | 描述 |
---|---|---|
void | addHeader(String name,String value) | 用于增加响应头字段,其中,参数 name 用于指定响应头字段的名称,参数 value 用于指定响应头字段的值。 |
void | setHeader (String name,String value) | 用于设置响应头字段,其中,参数 name 用于指定响应头字段的名称,参数 value 用于指定响应头字段的值。 |
void | addIntHeader(String name,int value) | 用于增加值为 int 类型的响应头字段,其中,参数 name 用于指定响应头字段的名称,参数 value 用于指定响应头字段的值,类型为 int。 |
void | setIntHeader(String name, int value) | 用于设置值为 int 类型的响应头字段,其中,参数 name 用于指定响应头字段的名称,参数 value 用于指定响应头字段的值,类型为 int。 |
void | setContentType(String type) | 用于设置 Servlet 输出内容的 MIME 类型以及编码格式。 |
void | setCharacterEncoding(String charset) | 用于设置输出内容使用的字符编码。 |
响应体相关方法
ServletResponse 遵循以 I/O 流传递大量数据的设计理念,,定义了两个与输出流相关的方法。
返回值类型 | 方法 | 描述 |
---|---|---|
ServletOutputStream | getOutputStream() | 用于获取字节输出流对象。 |
PrintWriter | getWriter() | 用于获取字符输出流对象。 |
注意:
getOutputStream() 和 getWriter() 方法互相排斥,不可同时使用,否则会发生 IllegalStateException 异常。
示例代码:
需求:
-
创建一个OutServlet类使用上诉方法
package com.example.HttpServletRequestDemo;
?
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
?
/**
* 为了使用Response接口当中的方法而写的测试类
* @since JDK 1.8
* @date 2021/09/17
* @author Lucifer
*/
public class OutServlet extends HttpServlet {
//设置UID
private static final long serialVersionUID = 1L;
?
//Get
使用字节流输出中文乱码
重点:
中文转成字节数组时与浏览器打开时采用的字符集要一致。
解决方案:
中文转成字节数组时和浏览器默认采用的字符集保持一致
response.setHeader("Content-Type", "text/html;charset=UTF-8");
// 获取字节输出流
OutputStream os = response.getOutputStream();
byte[] str = "编程帮 www.biancheng.net".getBytes("UTF-8");
// 输出中文
os.write(str)
使用字符流输出中文乱码
成因:
通过字符流输出的内容是存放在 response 缓冲区的,response 缓冲区的默认字符集是 ISO-8859-1,该字符集不支持中文。
解决方案:
将 response 缓冲区和浏览器采用的字符集保持一致即可
// 设置response缓冲区的编码
response.setCharacterEncoding("UTF-8");
// 设置浏览器打开文件所采用的编码
response.setHeader("Content-Type", "text/html;charset=UTF-8");
// 输出中文
response.getWriter().write("编程帮 www.biancheng.net");
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write("编程帮 www.biancheng.net");