Pregunta

Quiero llamar a un servlet desde una aplicación Java. El problema es, que la llamada no parece alcanzar el servlet. No consigo ningún error, pero no llegan hasta la primera salida "doPost" en el servlet. Si abro la URL en un navegador web, lo tengo - por supuesto - el error que se obtiene no es compatible etc., pero al menos veo, de que algo sucede.

I usar el siguiente código (la clase ActionPackage sólo tiene un vector de parámetros y es Serializable):

aplicación Java:

    ActionPackage p = new ActionPackage();
    p.addParameter("TEST", "VALUE");

    System.out.println(p);

    URL gwtServlet = null;
    try {
        gwtServlet = new URL("http://localhost:8888/app/PushServlet");
        HttpURLConnection servletConnection = (HttpURLConnection) gwtServlet.openConnection();
        servletConnection.setRequestMethod("POST");
        servletConnection.setDoOutput(true);

        ObjectOutputStream objOut = new ObjectOutputStream(servletConnection.getOutputStream());
        objOut.writeObject(p);
        objOut.flush();
        objOut.close();

    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Servlet:

public class PushServlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("doPost");
    ObjectInputStream objIn = new ObjectInputStream(request.getInputStream());

    ActionPackage p = null;
    try {
        p = (ActionPackage) objIn.readObject();

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

    System.out.println("Servlet received p: "+p);       
}

}

Cualquier idea lo que salió mal?

Gracias.

¿Fue útil?

Solución

URLConnection sólo se ejecuta con pereza cada vez que se llama a cualquiera de los métodos get.

Añadir lo siguiente a su código de realmente ejecutar la petición HTTP y obtener el cuerpo de la respuesta del servlet.

InputStream response = servletConnection.getInputStream();

Ver también:

Otros consejos

Trate de envolver todo el cuerpo de la doPost en un bloque try / catch:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        System.out.println("doPost");
        ObjectInputStream objIn = new ObjectInputStream(request.getInputStream());
        ActionPackage p = null;
        p = (ActionPackage) objIn.readObject();
        System.out.println("Servlet received p: "+p);       
    } catch (Throwable e) {
        e.printStackTrace(System.out);
    }
}

A continuación, busque de nuevo en el archivo de registro de salida del servlet o ventana para una nueva excepción que puede ayudar.

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        System.out.println("doPost");
        ObjectInputStream objIn = new ObjectInputStream(request.getInputStream());
        ActionPackage p = null;
        p = (ActionPackage) objIn.readObject();
        System.out.println("Servlet rece p: "+p);       
    } catch (Throwable e) {
        e.printStackTrace(System.out);
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top