2009-06-30 5 views
3

abrufen Ich versuche, den Inhalt eines HttpServletRequest abzurufen. Hier ist, wie ich es mache:Kann den Inhalt nicht aus einem 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()); 

Die Zeichenfolge "Inhalt" ist leer. Allerdings zeigt die letzte Zeile

Länge: 53

das ist genau die Länge des Inhalts ist ich erwarte. Wenn es hilft, hier ist, wie ich dieses Servlet trigge:

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

Welchen Servlet-Container verwenden Sie? Ihr Code funktioniert für mich in Tomcat 6.0.18. –

+0

Tomcat 6.0.20 Sie erhalten also etwas in "Inhalt"? –

+0

Wie überprüfen Sie den Wert von "Inhalt"? –

Antwort

2

Nun, endlich fand ich die Antwort! Es stellt sich heraus, dass der Wert von "Post-Daten", der an wget übergeben wird, der Name eines Parameters in der Anfrage wird. Mit anderen Worten, wenn ich den Parameternamen des ersten (und einzigen) Parameters in der Anfrage bekomme, werde ich diesen Wert erhalten. Der Code, um es zu extrahieren ist trivial:

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

Vielen Dank für Ihre Antworten!

Verwandte Themen