Salve ragazzi,
ho implementato un piccolo server in grado di ricevere le richieste provenienti da un browser.
Il server gira su una macchina e quando riceve la richiesta di connessione da un browser, risponde inviando la pagina index.html, questa a sua volta contiene alcune gif.
Il browser, caricata la pagina html richiede a sua volta i contenuti che compongono la pagina che risiedono sul server, il server risponde inviando i contenuti.
Il mio problema nasce quando tra i contenuti oltre alle gif ci sono degli applet (anche uno solo).
Mentre per le pagine testo (html) e per i file gif sono riuscito a gestire il metodo di analisi e di invio dei contenuti al browser, per gli applet non ci riesco.
In sostanza riesco a distinguere quando dal browser mi viene richiesto il caricamento di un applet.
Individuato il file lo invio, ma l'applet immancabilmente si blocca dandomi un errore.
L'applet realizzato con NetBeans è compilato e privo di errori, eseguito anche in fase di debug non da errori ma quando viene scaricato dal server il browser non riesce a farlo girare e fornisce degli errori.
La cosa strana è che lo stesso applet se ridotto all'osso (meno di 2.5Kb) viene trasferito correttamente e gira senza problemi anche quando viene scaricato dal mio server.
Inizialmente pensavo che ci fosse un errore nel trasferimento dei dati, e che non tutto il codice dell'applet venisse trasferito, ma ho verificato che il numero di byte trasferiti sono giusti anche quando l'applet va in errore.
Non riesco proprio a capacitarmi di questa cosa.
Non so se l'errore risieda nell'applet (ma non credo visto che non ci sono errori in compilazione) o nell'invio del codice dell'applet da parte del server.
Riporto per completezza la parte di codice dove, individuato il contenuto da caricare, il server crea l'header e invia il file. Da notare che il codice sembra funzionare bene con applet minimali.
OutputStream oS = con.getOutputStream();
byte[] file;
if (!(fName.endsWith(".gif"))) {
// Qui valuto il contenuto da caricare
// e lo cerco nella apposita directory
// del server.
if (fName.endsWith(".html"))
file = htmlCache.load("./www"+fName, deep);
else
file = classCache.load("./www"+fName, deep);
String sB = new String(file);
......
......
file = sB.getBytes();
if (fName.endsWith(".class"))
// invio l'header
oS.write(new String("HTTP/1.1 200 OK\nContent-Length: "+file.length+"\nContent-type: application/x-java-vm\n\n").getBytes());
if (fName.endsWith(".html"))
// invio l'header
oS.write(new String("HTTP/1.1 200 OK\nContent-Length: "+file.length+"\nContent-type: text/html\n\n").getBytes());
} else {
// Se il contenuto richiesto è un file .gif
file = imageCache.load("./www"+fName, deep);
// invio l'header
oS.write(new String("HTTP/1.1 200 OK\nContent-Length: "+file.length+"\nContent-type: image/gif\n\n").getBytes());
}
// Invio il file e chiudo la comunicazione
oS.write(file);
oS.close();
Ringrazio in anticipo chi mi volesse aiutare.
Ciao.

Rispondi quotando