Visualizzazione dei risultati da 1 a 10 su 10

Visualizzazione discussione

  1. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Premetto che io non uso Eclipse e che, comunque, non uso un servlet container integrato nell'ambiente di sviluppo.

    Sono molte le considerazioni da fare su quel codice, che comunque è sbagliato.

    1) Dove dovrebbe essere visualizzato il messaggio "sono nel destroy"?
    Mandare messaggi su System.out dall'interno di una servlet fa sì che tali messaggi vengano redirezionati ad un file di log (che dipende dalla configurazione del servlet container, che dovrebbe essere Tomcat nel tuo caso). Hai verificato sui file di log di Tomcat se c'è quel messaggio? Tieni presente, inoltre, che quel messaggio viene inviato al log se e solo se la servlet viene effettivamente istanziata (cioè, se c'è stata almeno una richiesta per quella servlet), altrimenti il servlet container non ha nulla da dismettere in fase di shutdown, quindi nulla verrà inviato al file di log.

    2) Questa riga di codice (e tutte quelle dopo, molto simili) è logicamente sbagliata

    codice:
    fosCalendarioA = new FileOutputStream("/WEB-INF/File_del_Server/Calendario_A_1314.txt", true);

    Quando si scrivono web-applications e si intendono usare dei file su file-system bisogna sempre riferirsi a loro tramite il metodo getRealPath() fornito da ServletContext... perchè quel percorso punta ad una directory chiamata "WEB-INF" che si trova nella rood del disco fisso e non nella root dell'applicazione (come invece dovrebbe essere). Presumo che nella root del tuo disco fisso (posso immaginare che tu stia usando Windows e che il disco dove gira Tomcat sia il disco C: ) non vi sia nessuna directory "C:\WEB-INF". Sicché quel percorso è sbagliato. Quando si vuole ottenere un percorso "relativo alla root della web-app" bisogna appoggiarsi al ServletContext, che è l'unico a sapere quale sia la posizione assoluta della web-app. Quindi, tutti quei percorsi andrebbero modificati in questo modo:

    codice:
    ServletContext ctx = getServletContext();
    fosCalendarioA = new FileOutputStream(ctx.getRealPath("/WEB-INF/File_del_Server/Calendario_A_1314.txt"), true);

    E via via per tutti gli altri percorsi "simili".

    3) Il blocco di codice che effettua la scrittura dei file dovrebbe trovarsi all'interno del blocco try/catch in cui questi vengono creati, in modo da prevedere il meccanismo di chiusura dei file alla fine:

    codice:
    FileOutputStream fos = null;   // dichiaro gli oggetti
    try {
       // Creo gli output-streams
       fos = new FileOutputStream( ... );
    
       // Uso gli output-streams
       DbHandler.salvaNeiFile( ... );
    
       // Effettuo un flush, per assicurarmi che la scrittura venga fatta
       fos.flush();
    } catch(Exception e) {
       e.printStackTrace();
    } finally {
       if (fos != null) {
          // Se il file è stato correttamente aperto, mi assicuro di chiuderlo!
          try { fos.close(); } catch (Exception e) { }
       }
    }

    Ciao.
    Ultima modifica di LeleFT; 15-01-2014 a 14:41
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.