Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/10/2011, 10:44
s_88
 
Fecha de Ingreso: octubre-2011
Ubicación: Madrid
Mensajes: 20
Antigüedad: 13 años, 5 meses
Puntos: 1
Problema comunicación servlet/applet/jsp netbeans

Hola,

Estoy utilizando Netbeans para hacer un servlet. El problema lo tengo en que al crear la aplicación web, el propio Netbeans te crea una página "index.jsp" que es una página html.
Aunque añado el applet a dicha página, necesito crear un servlet que reciba datos (con un ObjectInputStream), y envíe una respuesta (con un ObjectOutputStream) para que el applet la muestre en uno de sus paneles. Lo he intentado de mil maneras posibles, y siempre me da el mismo error. "java.io.StreamCorruptedException: invalid stream header"

Lo que intuyo que pasa es que el stream de salida y el de entrada no se corresponden, pero no sé como arreglarlo. También pienso que puede ser que utiliza el jsp y el servlet, pero no sé cómo no utilizar el jsp, sino únicamente el servlet, que puede ser que por ahí venga el problema.

Bueno, para que entendais mejor os pongo los códigos.

Applet: Manda un entero al servidor, y luego recibe una lista como respuesta

Código:
private void conectarServidor () {
        
    try {
            
        //Creacion del la URL
        URL pagina = this.getCodeBase();
        String protocolo = pagina.getProtocol();
        String servidor = pagina.getHost();
        int puerto = pagina.getPort();
        String servlet = "/ServletListas";
        URL direccion = new URL (protocolo,servidor,puerto,servlet);

        //Apertura de la conexion
        URLConnection conexion = direccion.openConnection();
        conexion.setDoInput(true);
        conexion.setDoOutput(true);
        conexion.setUseCaches(false);
        
            try (ObjectOutputStream oos = new ObjectOutputStream (conexion.getOutputStream())) {
                int num = 10;
                oos.writeInt(num);
                oos.flush();
            }
        
            try (ObjectInputStream ois = new ObjectInputStream(conexion.getInputStream())) {
               Lista l = (Lista) ois.readObject();
               imprimirElementos(l.obtenerElementos());
            }
        
    } catch (MalformedURLException ex) {
        ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();
    }
}
Donde imprimirElementos muestra los elementos en un jTextArea (está probado que funciona).


Servlet: Recoge el número que le ha mandado el cliente, crea una lista con ese número de elementos y se la envía al cliente.

Código:
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        ObjectInputStream ois = new ObjectInputStream(request.getInputStream());
        int num = ois.readInt();
              
        OutputStream a = (OutputStream) response.getOutputStream();
        response.setContentType("application/x-java-serialized-object");
        Lista lista = new Lista(num);
        try (ObjectOutputStream oos = new ObjectOutputStream(a)) {
            ois.writeObject(lista);
        }
    }
Bueno, creo que no me dejo nada. No sé si me habré explicado bien, pero agradecería una respuesta, porque ya no sé qué más hacer.

Un saludo.