Servlet-响应数据
Servlet-响应数据
classDiagram
ServletResponse <|-- HttpServletResponse : 继承
HttpServletResponse <|.. ResponseFacade : 实现
note for ServletResponse "Java提供的请求对象根接口"
note for HttpServletResponse "Java提供的对Http协议封装的请求对象"
note for ResponseFacade "Tomcat定义的实现类"
Tomcat 会把你的输出(状态码/响应头/响应体)组织成一份 HTTP响应报文 写回给客户端。HttpServletResponse 是你控制这份报文的主要入口(关联:Request & Response)。
Response设置响应数据功能介绍
响应数据格式:HTTP响应报文
- 响应行:
HTTP/1.1 200 OKvoid setStatus(int sc): 设置响应状态码
- 响应头:
Content-Type:text/htmlvoid setHeader(String name, String value): 设置响应头键值对
- 响应体:
<html><head></head><body></body></html>PrintWriter getWriter(): 获取字符输出流
先选对输出方式:字符 vs 字节
- 输出字符(HTML/JSON/文本):
getWriter()(见 Servlet-Response响应字符数据) - 输出字节(图片/文件下载/流式数据):
getOutputStream()(见 Servlet-Response响应字节数据)
注意:同一个响应里二者不能混用,否则容易触发非法状态或乱码。
Content-Type 与编码(最常用的一行)
大多数场景建议直接:
resp.setContentType("text/html;charset=utf-8"); 或 resp.setContentType("application/json;charset=utf-8");
这会同时影响浏览器如何解释响应体,以及 getWriter() 使用的字符集。
响应提交(commit)与缓冲区
响应并不是你 write 一次就立刻发出去:容器通常会有缓冲区,满足条件(缓冲区满、显式 flushBuffer()、请求处理结束等)才会提交。
一旦响应提交:
-
继续
setStatus/setHeader可能不再生效 -
重定向/转发也会失败或表现异常
ServletOutputStream getOutputStream(): 获取字节输出流
-
Response完成重定向
关联:Ajax / Servlet / MVC模式