Comment puis-je séparer la chaîne de requête de paramètres à partir de données de POSTES dans un servlet java
Lorsque vous obtenez une doGet ou doPost appel dans un servlet vous pouvez utiliser getparameterxxx()
pour obtenir la chaîne de la requête ou le post de données en un seul endroit facile.
Si l'appel a été une obtenez, vous OBTENEZ des données à partir de l'url/chaîne de requête.
Si l'appel a un POST, vous obtenez les données post tout analysé pour vous.
Sauf comme il s'avère, si vous ne mettez pas une "action" de l'attribut dans votre formulaire d'appel.
Si vous spécifiez un complet ou partiellement par l'url de l'action param tout fonctionne très bien, si vous ne le faites pas, le navigateur va appeler la même url, comme il l'a fait sur la page précédente envoyer, et si il arrive à être de chaîne de requête de données de là, vous obtiendrez que ainsi que de publier des données, et il n'y a aucun moyen de les distinguer.
Ou est-il?
Je suis à la recherche par le biais de l'objet de la requête, je vois où le post des données, je suis juste essayer de comprendre d'où l'OBTENIR les données, donc je peux effacer l'obtention des données sur un poste d'appel et d'effacer les données post un appel avant qu'il traite si possible.
Une idée de ce que la manière la plus sûre à faire est?
Et crois-moi deviner: vous n'avez jamais essayé de ne pas mettre un champ d'action dans une balise de formulaire. 🙂
OriginalL'auteur stu | 2009-01-19
Vous devez vous connecter pour publier un commentaire.
En HTML, l'action est REQUIS, donc je suppose que le comportement peut varier entre les clients.
Je n'ai jamais le voir, mais j'ai essayé le pas de l'action de chose dans différents navigateurs et qu'ils se comportent tous de la même façon. Cela dépend probablement sur la façon dont qualifié le paramètre action est...
en regardant en arrière à ce des années plus tard, ce qui peut ne pas être évidente est que ce brisé balise de formulaire a été le cadre d'une production à grande application et j'ai eu peur de toucher quelque chose de si important. Ainsi, alors que la question semble stupide, c'était mon raisonnement à l'époque.
OriginalL'auteur MatthieuP
Vous avez raison, je n'ai jamais essayé de ne pas mettre un champ d'action dans une balise de formulaire 😉 et je ne voudrais pas, en raison de exactement de quoi vous parlez. (Aussi, je pense qu'il n'est pas valide HTML)
Je ne sais pas du tout "propre" façon de distinguer entre GET et POST paramètres, mais vous pouvez accéder à la crue de la chaîne de requête à l'aide de la
getQueryString()
méthode deHttpServletRequest
, et vous pouvez accéder à la raw POST données à l'aide de lagetInputStream()
méthode deServletRequest
. (Je suis en train de regarder le Tomcat API docs ici, même si je pense que ceux qui sont à la fois partie de la norme API Servlet) Ensuite, vous pouvez analyser les données de publication et d'OBTENIR les données séparément si vous le souhaitez. Ils (ou devrait normalement) à la fois être formatés de la même manière, c'est à diremais peut-être avec l'esperluette remplacé par des points-virgules (que vous pouvez techniquement le faire dans HTTP/1.1, je ne le savais pas jusqu'à récemment)
Facile à dire quand vous n'avez pas hérité de systèmes de grande taille avec beaucoup de formes sans actions. 🙂 Mais je vois votre point de vue. Merci.
OriginalL'auteur David Z
Le HttpServletRequest.getParameterxxx() méthodes ne fais pas de différence entre les paramètres GET et POST. Si vous avez vraiment besoin de les distinguer entre eux, vous aurez besoin de les analyser manuellement à l'aide de getQueryString() pour les paramètres GET et getInputStream()/getReader() pour les données POST.
OriginalL'auteur Hilton Campbell
Je voudrais écrire un ServletFilter et décorer l'objet de demande de nettoyer un peu les choses (à l'aide de ce Hilton suggéré ci-dessus). C'est le classique décorateur modèle dans une interception de filtre.
OriginalL'auteur kipz