getOutputStream()方法具有什么功能呢?

欢喜 Servlet 发布时间:2025-05-28 09:23:47 阅读数:8402 1

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();
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/Servlet/202505/321.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者