getOutputStream()方法具有什么功能呢?
getOutputStream()方法简介
`getOutputStream()`是`HttpServletResponse`接口中定义一个方法
用于获取字节输出流对象`ServletOutputStream`
以便向客户端(如浏览器)发送二进制格式响应内容
`getOutputStream()`方法是Servlet开发中非常关键方法之一 可用于返回 图片、PDF、Excel、视频等非文本数据 以及需要精确控制字节流场景
getOutputStream()方法功能
| 功能 | 描述 |
| 获取字节输出流 | 通过 `ServletOutputStream` 向客户端写入二进制数据 |
| 支持文件下载 | 如 Excel、PDF、图片等 |
| 控制输出格式和类型 | 配合 `setContentType()` 使用,确保浏览器正确解析 |
| 只能调用一次 | 与`getWriter()`互斥,不能同时使用 |
getOutputStream()方法定义
ServletOutputStream getOutputStream() throws IOException - 返回值:一个 `ServletOutputStream` 对象,用于输出二进制数据 - 抛出异常: - 当已经调用`getWriter()` 会抛出`IllegalStateException`
例1:返回图片(JPEG)
@WebServlet("/image")
public class ImageServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
// 设置响应类型为 JPEG 图片
response.setContentType("image/jpeg");
// 读取图片文件并输出到响应流
FileInputStream fis = new FileInputStream("/path/to/image.jpg");
ServletOutputStream out = response.getOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
fis.close();
out.flush();
}
}
例2:提供PDF文件下载
@WebServlet("/download/pdf")
public class PdfDownloadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
// 设置响应类型为 PDF,并告知浏览器进行下载
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=sample.pdf");
// 读取 PDF 文件并写入输出流
FileInputStream fis = new FileInputStream("/path/to/sample.pdf");
ServletOutputStream out = response.getOutputStream();
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
fis.close();
out.flush();
}
}
例3:动态生成Excel并下载(Apache POI 示例)
@WebServlet("/download/excel")
public class ExcelDownloadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
// 创建一个简单的 Excel 文件
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("示例");
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("Hello, Excel!");
// 设置响应类型为 Excel
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=example.xlsx");
// 输出 Excel 到客户端
ServletOutputStream out = response.getOutputStream();
workbook.write(out);
out.flush();
workbook.close();
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


