12
votes

Récupérer des paramètres de poste uniquement (Java)

Quelqu'un peut-il connaître un moyen d'obtenir uniquement des paramètres de poste à partir d'un objet httpservletQuest?

IE, PHP possède le $ _Post Superglobal et Perl's CGI.PM récupéreront uniquement les paramètres de poste si la méthode HTTP est POST (par défaut).

httpservletRequest.geparamètre (string) inclura les paramètres d'URL Même si la méthode HTTP est la poste.


2 commentaires

Si je comprends bien, vous ne voulez que les paramètres du corps de poste et non des paramètres de l'URL de poste.


Exactement. C'est une description plus précise.


6 Réponses :


6
votes

Je suppose qu'une façon peut être d'analyser manuellement httpservletQuest.gequererystring () et vérifiez qu'un paramètre n'est pas présent.

Une implémentation naïf (ignorer les valeurs de clé évoquées par l'URL) Allez quelque chose comme ça (non testé): xxx


6 commentaires

C'est une solution vraiment simple. Pourtant, cela ressemble à une solution de contournement. Je me demande s'il y a une classe standard pour faire le travail. Pour les lecteurs, ajoutez cette ligne au début de la méthode: clé = urlencoder.encode (clé, "utf-8");


Ah, je suppose que "Solution de contournement" est le mauvais mot. Cela me semble tort parce que je sais qu'il y a du code qui fait quelque chose de très similaire caché quelque part là-bas.


DF mentionne une classe appelée paramètreparser dans la classe httpClient d'Apache. Ce n'est pas dans la bibliothèque standard de Java, mais au moins elle pense à toutes les petites choses que nous aurions pu oublier ici. Ensuite, le code pourrait passer par GetParametervalues ​​() et ignorer tout ce qui possède l'une des valeurs données parameeParser.parse ().


@ Viktorbrešan Oui, c'est pourquoi cela peut être utilisé pour résoudre le problème de l'OP. À quoi veux-tu en venir?


@ykaganovich désolé, mon erreur.


Lorsqu'un paramètre est dans la requête et les paramètres de poste, cette méthode ne sera pas capable de détecter qu'il existe également un paramètre dans les paramètres de poste.



7
votes

De ma compréhension, il n'y a pas de paramètres de post et d'obtenir des paramètres dans http, il existe des méthodes post et obtenez des méthodes. Lorsqu'une demande est faite à l'aide de la méthode postale, les paramètres vont dans le corps du message. En cas de demande d'obtention, les paramètres entrent dans l'URL.

Ma première pensée était que c'était un bogue de mise en œuvre dans votre conteneur de servlet. Mais, étant donné que les choses ne sont pas toujours comme vous vous attendez, la spécification de servlet Java (au moins la version 2.4) ne se distingue pas entre les deux types de paramètres. Donc, il n'ya aucun moyen d'obtenir des paramètres de poste ou d'URL à l'aide de l'API de servlet.

Vous avez déjà un plan B. Mais, au cas où, je poste deux alternatives qui me sont venues à mon esprit:

  1. Si vous avez accès à la définition de nom de paramètre, vous pouvez utiliser un préfixe pour différencier entre les deux lorsque vous iTEREZ le résultat GetParameTernes ().

  2. Vous pouvez analyser l'URL créant un objet URL et utiliser la méthode GetQuery () pour obtenir uniquement les paramètres. Ensuite, analysez les paramètres de la chaîne de requête à l'aide de certaines classes utilitaires telles que ParameterParser dans bibliothèque httpClient . Et enfin, soustrayez que les noms du résultat GetParameternames ().


2 commentaires

Hmm ... Je ne fais que tester une implémentation (Tomcat pour Win32). Avez-vous testé d'autres?


ParameterParser sonne comme l'emballage parfait pour la tâche d'identifier les paramètres d'URL et les valeurs. Ensuite, quelque chose comme le mécanisme de la réponse de Ykaganovich pourrait être utilisé.



3
votes

Ne pouviez-vous pas simplement obtenir les paramètres du HttpServleReQuest dans dopost ou Doket dans une sous-classe de httpservlet ?

Tout ce que vous saisissez (via getparemeter ) à l'intérieur de Dopost est un poste et tout ce qui est à l'intérieur de Doget est un get.


2 commentaires

J'essaie d'ignorer les paramètres qui sont passés dans l'URL. Ceux-ci sont inclus par GetParameter, quelle que soit la méthode HTTP.


Les demandes postales peuvent avoir des paramètres d'obtention et de poste. Si seulement obtenez le paramètre (dire "surnom") est présent, alors si vous faites la demande.geparamètre ("pseudo") à l'intérieur de Dopost, vous obtiendriez "surnom" obtenir le paramètre, qui devrait être null de votre explication.



1
votes

Je ne sais pas si cela fonctionnerait, mais vous pouvez essayer d'extraire la teneur brude du corps de poste en utilisant demande.gedreader () . Le conteneur peut supprimer ces données avant de remettre le contrôle de votre application, cependant, et même si ce n'est pas le cas, vous devez décoder la chaîne de paramètre vous-même.


1 commentaires

Assez drôle, je suis plus enclin à utiliser les idées rondes suggérées ci-dessus, car les données postales ont deux formats communs différents (et un nombre quelconque d'autres).



2
votes

Je pense que vous pourriez faire quelque chose avec GetMethod () disponible à partir de l'interface HTTPServletQuest.

Java Doc 1.6

Ceci est également disponible en 1,4 et 1,5.


1 commentaires

Cela ne vous dira rien de la source des paramètres. Cela vous indiquera simplement quelle méthode HTTP a été utilisée dans la demande.



1
votes

La question a été répondue à Ce message associé :

Normaly Vous pouvez obtenir et poster des paramètres dans un servlet de la même manière: P>

request.getParameter("cmd");


0 commentaires