Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/11/2009, 10:06
Avatar de dani_demons
dani_demons
 
Fecha de Ingreso: septiembre-2009
Mensajes: 56
Antigüedad: 14 años, 7 meses
Puntos: 0
Exclamación Problema comunicacion Applet+Servlet

Hola que hay..

Aquí traigo una duda, a ver si me la podeis resolver porque yo ya no sé que puede ser... Me explico.

Tengo por un lado un Applet que recoge información del usuario, la almacena en un objeto serializable llamado "usuario" y lo envía mediante POST a un servlet.

El servlet recoge el objeto, lo "des-serializa" y lo introduce en una BBDD.. después envía un objeto de tipo String al Applet para enviarle la confirmación..

Hasta aquí el funcionamiento que cabría esperar... pero no es así.

Parece ser que el Servlet no realiza su acción doPost correctamente... es decir, ni recoge el Usuario, ni lo almacena en la BBDD, ni escribe luego el String en el "response" para enviarlo al InputStream...

Es como si el Servlet estuviera muerto... o algo así. El Servlet está desplegado en el Tomcat 6..

Aquí os pego el código para que me ayudeis..

Edit: He creado un método doGet de prueba... y me sale el error de:...
El Metodo HTTP GET no es soportado por esta URL

Puede que esto aporte algo más de información...

Alguien sabe porque puede ser?


APPLET. Registro de Usuario.

Código:
       try{
        log("Conectando al servlet");
        URL userDBservlet = new URL(webServerStr);
        servletConnection = (HttpURLConnection)userDBservlet.openConnection();
        log("Conectado");

        // inform the connection that we will send output and accept input
        servletConnection.setRequestMethod("POST");
        servletConnection.setDoInput(true);
	servletConnection.setDoOutput(true);

        // Don't used a cached version of URL connection.
        servletConnection.setUseCaches (false);

        // Specify the content type that we will send binary data
        servletConnection.setRequestProperty("Content-Type", "java-internal/"+usuario.getClass().getName());

        sendUserToServlet(servletConnection,usuario);

        //Se lee la contestacion del Servlet.
        readServletResponse(servletConnection);

        
       }catch(Exception e){
           log(e.toString());
       }
APPLET... Método sentUserToServlet.

Código:
private void sendUserToServlet(HttpURLConnection servletConnection, User usuario){
        ObjectOutputStream outputToServlet = null;
        Object usuarioObj = usuario;
        try{
            //Se envia el objeto User, utilizando serializacion
            log("enviando usuario...");
            outputToServlet = new ObjectOutputStream(servletConnection.getOutputStream());
            //se serializa el objeto.
            outputToServlet.writeObject(usuarioObj);
            outputToServlet.flush();
	    outputToServlet.close();
	    log("Complete.");

        }catch(Exception e){
            log(e.toString());
        }
    }
APPLET. Método readServletResponse

Código:
protected void readServletResponse(HttpURLConnection servletConnection)
    {
      try{
        ObjectInputStream input = new ObjectInputStream(servletConnection.getInputStream());
        Object respuesta = input.readObject();

        String confirmacion = (String)respuesta;
        log(confirmacion);

      }catch(Exception e){
          log(e.toString());
      }
    }
------------------------------------------------------------------------------------------------------

SERVLET.
Código:
public void doPost(HttpServletRequest request, HttpServletResponse response)
    {

        ObjectInputStream inputFromApplet = null;
        ObjectOutputStream outputToApplet=null;
        Object salida = null;
        User usuario = null;
        String cadena = null;

        try{
            //capturar el input stream del applet
            inputFromApplet = new ObjectInputStream(request.getInputStream());
            show("Conectado");

            //leer la informacion serializable del applet
            show("Leyendo datos...");
            usuario = (User) inputFromApplet.readObject();
            show("Finalizada lectura");

            inputFromApplet.close();
            //Usar el modelo de datos para registrar al Usuario.
            show("Registrando usuario...");
            modeloDatos.registerUser(usuario);

            show("Completado");

            //Se envia un mensaje al Applet
            cadena = new String("Confirmado");
            salida = cadena;
            response.setContentType("java-internal/"+salida.getClass().getName());
            outputToApplet = new ObjectOutputStream(response.getOutputStream());
            outputToApplet.writeObject(salida);
            outputToApplet.flush();
            outputToApplet.close();


        }catch(Exception e){
            e.printStackTrace();
        }
    }
Disculpad la longitud del código.
Un saludo y gracias.

Última edición por dani_demons; 11/11/2009 a las 10:28