這個,滿多人去實作的,我最後是用這一個解法:
// Convert the request inputStream to stringString str_request = IOUtils.toString(request.getInputStream());// Count the actual content length of the http requestchar[] char_array_request = str_request.toCharArray();int count = char_array_request.length;// Create a inputStream for further manipulationrequestStream = new ByteArrayInputStream(str_request.getBytes());檔案下載:
http://commons.apache.org/downloads/download_io.cgi
To solve the problem, i import the Apache Commons IO to the project and modify the code. This time, i convert the inputStream to string for counting. Then i create a new InputStream from the string for manipulation.
其他解法1:
String httpServletRequestToString(HttpServletRequest request) throws Exception {
    ServletInputStream mServletInputStream = request.getInputStream();
    byte[] httpInData = new byte[request.getContentLength()];
    int retVal = -1;
    StringBuilder stringBuilder = new StringBuilder();
    while ((retVal = mServletInputStream.read(httpInData)) != -1) {
        for (int i = 0; i < retVal; i++) {
            stringBuilder.append(Character.toString((char) httpInData[i]));
        }
    }
    return stringBuilder.toString();
}
其他解法2:
It seems like your while loop doesn’t do anything here, because in your case, bytesRead is always -1 thus it will never get into the loop at all, and further, you don’t use your bufferedReader at all to read from the input stream:-
    int bytesRead = -1;
    while (bytesRead != -1) {
        stringBuilder.append(charBuffer, 0, bytesRead);
    }Try this:-
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.setContentType("text/plain");
    PrintWriter out = resp.getWriter();
    StringBuilder stringBuilder = new StringBuilder(1000);
    Scanner scanner = new Scanner(req.getInputStream());
    while (scanner.hasNextLine()) {
        stringBuilder.append(scanner.nextLine());
    }
    String body = stringBuilder.toString();
    System.out.println(body);
    out.println(body);
}