getWriter()方法简介
`getWriter()`是`HttpServletResponse`接口中定义一个方法
用于获取字符输出流对象`PrintWriter`
以便向客户端(如浏览器)发送字符文本格式的响应内容
getWriter()是Servlet开发中最常用输出方式之一
适用于返回HTML、JSON、XML等文本格式数据
getWriter()方法的功能
功能 | 描述 |
获取字符输出流 | 通过 `PrintWriter` 向客户端写入文本数据 |
支持 HTML、JSON、XML 等格式 | 适合构建网页、API 接口等 |
自动处理字符编码 | 需配合`setContentType("text/html; charset=UTF-8")使用 |
只能调用一次 | 与`getOutputStream()`互斥
不能同时使用 |
getWriter()方法定义
PrintWriter getWriter() throws IOException
- 返回值:一个 `PrintWriter` 对象,用于向客户端输出文本内容
- 抛出异常:
- 如果已经调用了 `getOutputStream()`,会抛出 `IllegalStateException`
例1:返回HTML页面内容
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
// 设置响应类型和字符编码
response.setContentType("text/html; charset=UTF-8");
// 获取 PrintWriter 并写入 HTML 内容
PrintWriter writer = response.getWriter();
writer.println("<h1>你好,世界!</h1>");
writer.println("<p>这是使用 getWriter() 输出的内容。</p>");
}
}
访问地址:
http://localhost:8080/your-app/hello
浏览器将显示:
你好,世界!
以上是使用getWriter()输出的内容
例2:返回JSON数据
@WebServlet("/api/user")
public class UserServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
// 设置响应类型为 JSON,并指定字符编码
response.setContentType("application/json; charset=UTF-8");
// 构造 JSON 字符串(实际开发中建议使用 Jackson / Gson)
String jsonResponse = "{\"name\":\"Tom\",\"age\":25}";
// 获取 PrintWriter 并写入 JSON 内容
PrintWriter writer = response.getWriter();
writer.print(jsonResponse);
}
}
访问地址:
http://localhost:8080/your-app/api/user
浏览器或前端 JavaScript(如 `fetch()`)将接收到标准 JSON 响应。
getWriter()方法注意事项
项目 | 说明 |
只能调用一次 `getWriter()` 或 `getOutputStream()` | 否则会抛出 `IllegalStateException` |
不要混合使用二进制和文本输出 | 如要下载文件,请使用 `getOutputStream()` |
设置字符编码很重要 | 使用 `response.setContentType("text/html; charset=UTF-8")` 防止乱码 |
自动刷新缓冲区 | 调用 `writer.flush()` 可确保内容立即发送给客户端 |
`getWriter()`同`getOutputStream()`对比
特性 | `getWriter()` | `getOutputStream()` |
类型 | 字符流 | 字节流 |
适用内容 | 文本(HTML、JSON、XML) | 二进制(图片、PDF、Excel) |
是否支持中文 | 需设置字符集(如 UTF-8) | 需手动控制编码 |
是否可共用 | ❌ 不能与另一个同时调用 | ❌ 不能与 `getWriter()` 同时调用 |
典型用途 | 返回网页、JSON 数据 | 下载文件、验证码图片 |
`getWriter()适用场景
场景 | 使用方式 |
返回HTML页面 | 输出 `<html>`、`<body>` 等标签内容 |
提供RESTful API接口 | 返回 JSON 或 XML 数据 |
表单提交后返回结果 | 显示成功或错误信息 |
日志调试输出 | 打印请求参数、状态信息等 |
动态页面渲染 | 结合 JSP、Thymeleaf 等模板引擎输出内容 |