2009-08-27 8 views
14

Est-il possible d'obtenir la requête HTTP brute à partir de l'objet HttpServletRequest? Je veux voir la requête brute en tant que chaîne si possible.Récupère la chaîne de requête brute de HttpServletRequest

Je dois obtenir le texte complet de la demande, dans ce cas, c'est une demande POST, donc l'URL n'aide pas. Il fait aussi partie d'un formulaire à plusieurs parties, donc je ne peux pas simplement appeler le "getParameterNames()" ou "getParameterValues ​​()".

Merci,

+0

Quelles sont les choses que vous voulez savoir sur la demande autre que l'url –

+0

J'ai un composant JSF personnalisé. A l'intérieur de sa méthode "decode()", j'ai besoin de savoir quels éléments ont été sélectionnés. Sur une forme autre que multi-partie, je peux juste appeler "getParameterValues ​​('myparam')" et je peux obtenir les valeurs (la liste des éléments sélectionnés), mais avec une forme en plusieurs parties cette méthode ne retourne rien . J'ai donc besoin d'analyser manuellement les données brutes pour obtenir les éléments sélectionnés. Je ne peux pas utiliser un filtre de servlet car cela n'affecte que mon propre composant personnalisé. –

+1

Il s'avère que j'ai trouvé une autre façon d'obtenir les paramètres dont j'avais besoin. Si j'utilise le FacesContext.getExternalContext.getParameterValuesMap() qui me donne ce dont j'avais besoin quel que soit le type de formulaire. Merci à tous –

Répondre

0

On dirait que vous avez besoin d'un servlet filter. Il n'y a pas de façon standard de gérer multipart/form-data, donc vous devrez prendre soin de mettre ces données en cache de façon appropriée lorsque wrapping the HttpServletRequest.

+3

Note: cette réponse n'est plus exacte. Servlet 3.0 (JEE6) a introduit le support de 'multipart/form-data'. http://download.oracle.com/javaee/6/api/javax/servlet/annotation/MultipartConfig.html – McDowell

1

ou si vous pouvez écrire un intercepteur pour convertir les noms de paramètres et les valeurs en objet format de chaîne et le définir dans le contexte de la requête, ou le filtre est également une bonne idée.

4

Eh bien, il semble que vous faites une sorte de dépannage. Pourquoi ne pas simplement laisser tomber le composant de formulaire à plusieurs parties pendant que vous regardez les données de forme brute. Vous pouvez utiliser l'extrait de JSP suivant pour créer les données de formulaire.

<% 
Enumeration en = request.getParameterNames(); 
String str = ""; 
while(en.hasMoreElements()){ 
    String paramName = (String)en.nextElement(); 
    String paramValue = request.getParameter(paramName); 
    str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue); 
} 
if (str.length()>0) 
    str = str.substring(1); 
%> 
8

Vous pouvez lire la requête HTTP brute en faisant:

ServletInputStream in = request.getInputStream(); 

puis utilisez les méthodes read régulières du InputStream.

Espérons que ça aide.

1

Si vous souhaitez obtenir la totalité de la requête à une chaîne, vous pouvez le faire avec une ligne de code en utilisant la bibliothèque apache IOUtils.

String myString = org.apache.commons.io.IOUtils.toString(request.getInputStream()); 
Questions connexes