Pregunta

Para un cliente, necesito escribir un Servlet que pueda imprimir valores en una publicación de formulario. El formulario está alojado en otro servidor y tiene este aspecto:

<form action="http://myserver/myServlet" method="POST">
<input type="text" id="someName" value="someInterestingValue"/>
<input type="submit" value="submit" />
</form>

Tengo un servidor Tomcat 5.0.28 disponible, ejecutando en Java 1.4 jdk, así que hice un servlet simple:

public class ProxyServlet extends HttpServlet {
    public void doPost(HttpServletRequest req, 
                       HttpServletResponse res) 
                       throws ServletException, IOException {
        PrintWriter out = res.getWriter();      
        Enumeration a =req.getAttributeNames(); 
        while (a.hasMoreElements()){
            String attrname = (String) a.nextElement();
            out.println(attrname+"="+req.getAttribute(attrname)+"<br/>");
        }
        out.close();
    }
}

Cuando voy al servlet por URL, todo se ve como se esperaba. Cuando envío una solicitud GET con algunos parámetros, puedo verlos como atributos en el depurador en el método doGet () (el método se omitió por brevedad).

Sin embargo, en doPost (), mis campos de formulario parecen faltar. He buscado en los archivos de registro de Tomcat, y no se registra nada especial. Intenté agregar un crossdomain.xml a algunos directorios pero no encontré la forma de cambiar este comportamiento.

Para que quede claro: el formulario como se indica arriba está en el servidor A. Mi servlet se ejecuta en una aplicación existente de Tomcat / Java alojada en el servidor B. Cuando el formulario es de tipo " POST " ninguno de los campos llega al Servlet en el servidor B. Apache NO está " en frente " de Tomcat.

¿Hay algunos ajustes de configuración que faltan en Tomcat? ¿Algún consejo o sugerencia dónde mirar a continuación? La ayuda es muy apreciada.

¿Fue útil?

Solución 3

Encontré el problema. Después de un día entero de búsqueda y codificación, todo se reduce al hecho de que mi código estaba funcionando bien. El problema está en la forma. la línea:

<input type="text" id="someName" value="someInterestingValue"/>

Debería leer:

<input type="text" name="someName" value="someInterestingValue"/>

Para las personas que mencionan " getParameter " en lugar de " getAttribute " eres totalmente correcto En mi código de prueba tenía ambos para estar seguro (porque pensé que lo había perdido ...) pero ambos no estaban dando resultados, ya que el navegador simplemente no enviaba los pares de nombre / valor.

Supongo que publicar esto en Stackoverflow fue de ayuda, porque tuve que explicar y releer mi problema, pensé que " id = " parecía gracioso La codificación consiste en encontrar errores en fragmentos de texto que está pasando por alto ...

Otros consejos

¿Solicitar atributos? No necesita acceder a ellos como parámetros de solicitud utilizando HttpServletRequest # getParameter () y así sucesivamente?

Lo que agrega más confusión es que dijiste que funciona en el doGet () . ¿Cómo se ve su código entonces? ¿También accede a ellos como atributos? Eso hubiera sido imposible en un entorno JSP / Servlet normal (es decir, no está utilizando algún filtro que copia los parámetros a los atributos).

Esto no tiene nada que ver con el sitio cruzado. Como dijo BalusC, use getParameter ... en lugar de los métodos getAttribute ...

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