2009-06-30 76 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(); 

谢谢大家的回应!