Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Problemi Server Http in java

    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.

  2. #2
    Forse non ho esplicitato bene il mio problema, e sono stato troppo prolisso.
    Cercherò di fare meglio:

    Ho realizzato un WebServer minimale il quale gira su un pc di casa e al quale posso riferirmi da un altro pc della rete domestica.
    Questo WebServer non fa nulla di particolare, mi consente semplicemente di caricare alcune pagine html che contengono al massimo delle gif ed un piccolo applet java.

    La compilazione ed esecuzione dell'applet attraverso la IDE di NetBeans non mi dà alcun problema, nessun errore o warning mi viene segnalato.
    Quando carico l'applet direttamente dal browser locale, dove risiedono le pagine html che richiamano l'applet stesso, nessun errore, tutto funziona perfettamente.

    Quando però carico l'applet passando attraverso il Webserver richiamando la pagina html da un altro pc, mi viene fornita una segnalazione di errore che qui riporto:


    java.lang.ClassFormatError: Invalid constant pool index 91 in class file HelloWorld/Hello
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknow n Source)
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Un known Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unk nown Source)
    at sun.plugin2.applet.Plugin2Manager.createApplet(Unk nown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionR unnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    Eccezione: java.lang.ClassFormatError: Invalid constant pool index 91 in class file HelloWorld/Hello

    Il Serverino da me realizzato credo che non centri nulla, se infatti riduco all'osso l'applet, facendogli fare poco o nulla, questo viene caricato senza problemi.

    Qualcuno mi sa dire cosa sia quell'errore e come fare per evitarlo?

  3. #3
    Sono riuscito a risolvere il mio problema.

    Compilando il file .java da console dos, il file .class generato viene caricato correttamente dalla JVM e non da alcun problema.
    Se lo compilo dall'interno di NetBeans pur non dando errori mi si genera un file di un 20% più grande che fornisce sempre l'errore di cui sopra quando la JVM tenta di eseguirlo.

    Nelle opzioni di netbeans relativamente al compilatore non ho inserito nulla di particolare.

    Qualcuno mi sa dare una motivazione plausibile a questa stranezza?

  4. #4
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Originariamente inviato da speedy67
    Sono riuscito a risolvere il mio problema.

    Compilando il file .java da console dos, il file .class generato viene caricato correttamente dalla JVM e non da alcun problema.
    Se lo compilo dall'interno di NetBeans pur non dando errori mi si genera un file di un 20% più grande che fornisce sempre l'errore di cui sopra quando la JVM tenta di eseguirlo.

    Nelle opzioni di netbeans relativamente al compilatore non ho inserito nulla di particolare.

    Qualcuno mi sa dare una motivazione plausibile a questa stranezza?
    Non saprei dirti ed è la prima volta che sento una cosa simile...anzi se qualcuno dovesse risponderti sarei curioso di saperlo ( anche se uso eclipse )..
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.