HttpServletResponse简介说明
下文笔者讲述HttpServletResponse的相关说明,如下所示
例:
例:
例:
HttpServletResponse简介
`HttpServletResponse`是Java Servlet API中一个接口
是`ServletResponse`子接口
专门用于处理HTTP响应
它封装服务器返回给客户端(如浏览器)所有HTTP响应信息
包括响应头、状态码、响应体等。
`HttpServletResponse`功能
| 功能 | 描述 |
| 向客户端发送响应数据 | 如 HTML、JSON、XML、文件等 |
| 设置响应状态码 | 如 200 OK、404 Not Found、302 Redirect 等 |
| 设置响应头信息 | 如 Content-Type、Content-Length、Set-Cookie 等 |
| 控制响应行为 | 如重定向、设置字符编码、缓存控制等 |
| 获取输出流 | 用于输出文本或二进制数据 |
接口继承关系
public interface HttpServletResponse extends ServletResponse {
// HTTP 特有方法定义
}
设置响应状态码
| 方法名 | 描述 |
| `setStatus(int sc)` | 设置 HTTP 状态码(如 200 OK) |
| `sendError(int sc)` | 发送错误响应(如 404、500) |
| `sendError(int sc, String msg)` | 发送带消息的错误响应 |
| `sendRedirect(String location)` | 发送重定向响应(302) |
response.sendError(HttpServletResponse.SC_NOT_FOUND, "页面不存在");
response.sendRedirect("login.jsp");
设置响应内容和类型
| 方法名 | |
| `setContentType(String type)` | 设置响应内容类型(如 text/html, application/json) |
| `setCharacterEncoding(String charset)` | 设置响应使用的字符编码(如 UTF-8) |
| `setContentLength(int len)` | 设置响应内容长度(可选) |
| `flushBuffer()` | 强制将缓冲区中的响应内容发送给客户端 |
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
获取输出流(用于写入响应内容)
| 方法名 | 描述 |
| `getWriter()` | 获取字符输出流(PrintWriter),用于输出文本内容(如 HTML、JSON) |
| `getOutputStream()` | 获取字节输出流(ServletOutputStream),用于输出二进制内容(如图片、文件) |
注意事项:
不能同时调用`getWriter()`
和 `getOutputStream()`
否则抛出 `IllegalStateException`
输出完成后建议调用 `flush()` 或 `flushBuffer()` 确保数据及时发送
不要重复设置状态码或重定向
否则可能抛出 `IllegalStateException` |
设置 `Content-Type` 非常重要
浏览器根据此值决定如何解析响应内容
响应对象是每个请求独有
不需要担心线程安全问题
设置响应头信息
| 方法名 | 描述 |
| `setHeader(String name, String value)` | 设置一个响应头(覆盖已有值) |
| `addHeader(String name, String value)` | 添加一个响应头(保留已有值) |
| `setDateHeader(String name, long date)` | 设置日期类型的响应头 |
| `setIntHeader(String name, int value)` | 设置整数类型的响应头 |
response.setHeader("Cache-Control", "no-cache");
response.addHeader("Set-Cookie", "JSESSIONID=123456; Path=/; HttpOnly");
例
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
// 设置响应类型和编码
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
// 设置响应头
response.setHeader("X-Powered-By", "MyApp");
// 获取 PrintWriter 并写入响应内容
PrintWriter out = response.getWriter();
out.println("<h1>Hello, HttpServletResponse!</h1>");
out.flush();
}
}
HttpServletResponse适用场景
| 场景 | 使用方式 |
| 返回 HTML 页面 | 使用 `PrintWriter` 输出 HTML 内容 |
| 返回 JSON 数据 | 设置 `Content-Type: application/json` 并输出 JSON 字符串 |
| 文件下载 | 使用 `ServletOutputStream` 输出文件流 |
| 图片验证码生成 | 使用 `BufferedImage` 和 `ImageIO.write()` 输出图片 |
| 用户登录后跳转 | 使用 `response.sendRedirect("home")` 跳转页面 |
| 设置 Cookie | 使用 `addHeader("Set-Cookie", "...")` 设置 Cookie 信息 |
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


