9.17JavaWeb之HttpServletResponse
什么是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");
    It's a lonely road!!!
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号