Pregunta

Cuando recibe una llamada doGet o doPost en un servlet, puede usar getparameterxxx () para obtener la cadena de consulta o los datos de publicación en un solo lugar.
Si la llamada fue un GET, obtendrá datos de la cadena url / query.
Si la llamada fue una POST, obtendrá todos los datos de la publicación analizados por usted.

Excepto como resulta, si no coloca un atributo 'action' en su formulario de llamada. Si especifica una url totalmente calificada o parcialmente calificada para el parámetro de acción, todo funciona muy bien, si no lo hace, el navegador llamará a la misma url que en el envío de la página anterior, y si hay datos de cadena de consulta allí , obtendrá eso así como datos POST, y no hay forma de distinguirlos.

¿O hay? Estoy mirando a través del objeto de solicitud, veo de dónde provienen los datos de la publicación, solo estoy tratando de averiguar de dónde provienen los datos GET, para poder borrar los datos GET en una llamada y borrar los datos de la publicación en una llamada GET antes de analizarla si es posible.

¿Alguna idea de cuál es la forma segura de hacer esto?

Y déjame adivinar: nunca intentaste no poner un campo de acción en una etiqueta de formulario. :-)

¿Fue útil?

Solución

En HTML, la acción es REQUERIDO , así que supongo que el comportamiento variará entre los clientes.

Otros consejos

Tienes razón, nunca intenté no poner un campo de acción en una etiqueta de formulario ;-) y no lo haría, exactamente por lo que estás hablando. (Además, creo que no es HTML válido)

No conozco ninguna "limpio" manera de distinguir entre los parámetros GET y POST, pero puede acceder a la cadena de consulta sin procesar utilizando el método getQueryString () de HttpServletRequest , y puede acceder a los datos sin procesar POST utilizando getInputStream () método de ServletRequest . (Estoy viendo los documentos de la API de Tomcat específicamente aquí, aunque creo que ambos son parte de la API de Servlet estándar). Luego, puede analizar los datos POST y GET por separado si lo desea. Ambos (o deberían) estar formateados de la misma manera, es decir,

name1=value1&name2=value2&...

aunque posiblemente con los símbolos reemplazados por punto y coma (que técnicamente puede hacer en HTTP / 1.1, no lo sabía hasta hace poco)

Los métodos HttpServletRequest.getParameterxxx () no distinguen entre los parámetros GET y POST. Si realmente necesita distinguir entre ellos, deberá analizarlos manualmente usando getQueryString () para los parámetros GET y getInputStream () / getReader () para los datos POST.

Escribiría un ServletFilter y decoraría el objeto de solicitud para limpiar un poco (usando lo que Hilton sugirió anteriormente). Este es el patrón de decorador clásico en un filtro interceptor .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top