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(); } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。