Domanda

Quando si riceve una chiamata doGet o doPost in un servlet, è possibile utilizzare getparameterxxx () per ottenere la stringa di query o i dati di post in un unico posto.
Se la chiamata era GET, si ottengono dati dalla stringa url / query.
Se la chiamata era un POST, ottieni i dati dei post tutti analizzati per te.

Ad eccezione di quanto risulta, se non si inserisce un attributo "azione" nella chiamata del modulo. Se specifichi un url completo o parzialmente qualificato per il parametro di azione, tutto funziona alla grande, in caso contrario, il browser chiamerà lo stesso url che aveva fatto nella pagina precedente, e se ci sono dati di stringa di query lì , otterrai anche i dati POST e non c'è modo di distinguerli.

O c'è? Sto esaminando l'oggetto richiesta, vedo da dove provengono i dati dei post, sto solo cercando di capire da dove provengono i dati GET, in modo da poter cancellare i dati GET su una chiamata post e cancellare i dati post su una chiamata GET prima di analizzarla, se possibile.

Hai idea di quale sia il modo sicuro per farlo?

E lasciami indovinare: non hai mai provato a non inserire un campo di azione in un tag del modulo. : -)

È stato utile?

Soluzione

In HTML, l'azione è REQUIRED , quindi immagino che il comportamento varierà tra i clienti.

Altri suggerimenti

Hai ragione, non ho mai provato a non inserire un campo di azione in un tag modulo ;-) e non lo farei, proprio per quello di cui stai parlando. (Inoltre, penso che non sia un codice HTML valido)

Non conosco nessun "pulito" modo di distinguere tra i parametri GET e POST, ma puoi accedere alla stringa di query non elaborata utilizzando il metodo getQueryString () di HttpServletRequest e puoi accedere ai dati POST non elaborati utilizzando Metodo getInputStream () di ServletRequest . (Sto esaminando i documenti API Tomcat specificatamente qui, anche se penso che siano entrambi parte dell'API Servlet standard) Quindi puoi analizzare i dati POST e GET separatamente se vuoi. Saranno (o dovrebbero normalmente) entrambi formattati allo stesso modo, ad esempio

name1=value1&name2=value2&...

sebbene possibilmente con le e commerciali sostituite da punti e virgola (cosa che puoi tecnicamente fare in HTTP / 1.1, non lo sapevo fino a poco tempo fa)

I metodi HttpServletRequest.getParameterxxx () non fanno distinzione tra i parametri GET e POST. Se devi veramente distinguerli, dovrai analizzarli manualmente usando getQueryString () per i parametri GET e getInputStream () / getReader () per i dati POST.

Scriverei un ServletFilter e decorerei l'oggetto richiesta per ripulire un po 'le cose (usando ciò che Hilton ha suggerito sopra). Questo è il modello decorativo classico in un filtro intercettante .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top