📜  Servlet中的ServletInputStream类(1)

📅  最后修改于: 2023-12-03 15:05:11.139000             🧑  作者: Mango

Servlet中的ServletInputStream类

在Java Servlet中,ServletInputStream类表示HTTP请求的输入流。HTTP请求的重要数据如参数、请求体的内容等都可以通过ServletInputStream类读取和操作。

ServletInputStream类的常用方法

ServletInputStream类继承自Java标准库中的InputStream类,所以它也拥有InputStream类中的许多方法。下面是ServletInputStream类的常用方法:

  • int read() : 从输入流中读取一个字节的数据。如果已到达流的末端,则返回 -1。
  • int read(byte[] b, int off, int len) : 把输入流读入字节数组b中。最多读入len个字节,从off开始存储读入的数据。如果已到达流的末端,则返回 -1。
  • long skip(long n) : 跳过并丢弃输入流中的n个字节的数据。
  • int available() : 返回可从输入流中读取的剩余字节数。
  • void close() : 关闭输入流。
示例代码

下面是一个简单的Servlet,它接受POST请求,并使用ServletInputStream类获取请求体中的数据:

import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.util.*;

public class MyServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {
            
        // 获取输入流
        ServletInputStream inputStream = request.getInputStream();
        
        // 读取请求体中的数据
        byte[] buffer = new byte[1024];
        int bytesRead = -1;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            String data = new String(buffer, 0, bytesRead);
            System.out.println("Received data:" + data);
        }
        
        // 关闭输入流
        inputStream.close();
        
        // 发送响应
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>Hello World!</h1>");
        out.println("</body></html>");
    }
}

Servlet通过request.getInputStream()获取输入流,然后使用read()方法逐个字节读取请求体的内容。最后,Servlet要记得调用ServletInputStream的close()方法关闭输入流。

参考资料