📅  最后修改于: 2023-12-03 15:05:11.139000             🧑  作者: Mango
在Java Servlet中,ServletInputStream类表示HTTP请求的输入流。HTTP请求的重要数据如参数、请求体的内容等都可以通过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()方法关闭输入流。