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:
APPLET... Método sentUserToServlet.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()); }
Código:
APPLET. Método readServletResponseprivate 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()); } }
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:
Disculpad la longitud del 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(); } }
Un saludo y gracias.