2009-06-30 43 views
3

我試圖獲取HttpServletRequest的內容。以下是我如何做:無法獲取內容的HttpServletRequest

// Extract the request content 
StringBuilder stringBuilder = new StringBuilder(); 
BufferedReader bufferedReader = null; 
String content = ""; 

try { 
    InputStream inputStream = request.getInputStream(); 
    if (inputStream != null) { 
     bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
     char[] charBuffer = new char[128]; 
     int bytesRead = -1; 
     while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { 
      stringBuilder.append(charBuffer, 0, bytesRead); 
     } 
    } else { 
     stringBuilder.append(""); 
    } 
} catch (IOException ex) { 
    throw ex; 
} finally { 
    if (bufferedReader != null) { 
     try { 
      bufferedReader.close(); 
     } catch (IOException ex) { 
      throw ex; 
     } 
    } 
} 

content = stringBuilder.toString(); 
System.out.println("Length: " + request.getContentLength()); 

字符串「內容」是空的。不過,最後一行顯示

長度:53

這正是我期待的內容的長度。如果有幫助,下面是我如何觸發這個servlet:

wget --post-data='{"imei":"351553012623446","hni":"310150","wdp":false}' http://localhost:8080/test/forward 
+0

你在使用什麼servlet容器?你的代碼適用於Tomcat 6.0.18。 – 2009-06-30 21:51:27

回答

2

那麼,我終於找到了答案!事實證明,賦予wget的「post-data」的值將成爲請求中參數的名稱。換句話說,如果我得到請求中第一個(也是唯一的)參數的參數名稱,我會得到該值。代碼提取它是微不足道的:

// Extract the post content from the request 
@SuppressWarnings("unchecked") 
Enumeration<String> paramEnum = request.getParameterNames(); 
paramEnum.hasMoreElements(); 
String postContent = (String) paramEnum.nextElement(); 

謝謝大家的迴應!