Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Gab-81
    Registrato dal
    Nov 2005
    Messaggi
    558

    [AppWeb] Scrivere un file sul web server

    Ciao a tutti, ho un'applicazione web che deve scrivere un file XML dentro una cartella (doc), però questo non avviene. Il codice che ho scritto per realizzare questa applicazione è:

    codice:
    this.outFile = new File(QUERY_OUTPUT_PATH + File.separator + QUERY_OUTPUT_FILE);
    this.osw = new OutputStreamWriter(new FileOutputStream(this.outFile), Charset.forName("UTF-8"));
    Però viene sollevato un NullPointer exception perché non viene trovato il file. Io la cartella doc l'ho messa nella cartella di contesto della mia applicazione (myapp/doc è il path)...cosa sbaglio? se l'applicazione la faccio girare con una classe di test che "bypassa" la parte web tutto funziona (in locale, nel workspace di eclipse)...grazie a tutti


  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Fatti stampare questa stringa:

    codice:
    QUERY_OUTPUT_PATH + File.separator + QUERY_OUTPUT_FILE
    E vedi cosa c'è che non va.
    Molto probabilmente quella stringa non rappresenta un percorso valido (possono esserci dei caratteri che danno fastidio o, più semplicemente, il percorso non esiste).

    Se c'è un errore, allora è tutto lì.

    Tieni presente che quando si ha a che fare con applicazioni WEB, la "current-directory" non puoi sapre quale sia a priori (perchè non è dettata dalla tua applicazione, ma dal server che la fa girare), quindi, se quello è un percorso relativo, è già un errore. Quando si ha a che fare con applicazioni WEB, per avere la certezza sui percorsi, è necessario sempre ottenere un percorso assoluto (partendo, da uno relativo e lasciando al ServletContext l'onere di risolverlo).


    Ciao.
    "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

  3. #3
    Utente di HTML.it L'avatar di Gab-81
    Registrato dal
    Nov 2005
    Messaggi
    558
    Grazie per la risposta! Infatti il problema è sul path, che io ho impostato relativo. In realtà il web server (tomcat) come root, mi da la mia home (/home/myname); ho così dovuto impostare un percorso assoluto ai file che devo scrivere. Questo però - a mio avviso - è fastidioso. Come posso gestirli con ServletContext???

    Grazie ancora

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Gab-81
    Come posso gestirli con ServletContext???

    Grazie ancora
    Così:

    codice:
    // Questo è il percorso relativo alla tua WebApp
    String percRelativo = QUERY_OUTPUT_PATH + File.separator + QUERY_OUTPUT_FILE;
    
    // Così ottieni il percorso assoluto
    ServletContext ctx = tuaServlet.getServletContext();
    String percAssoluto = ctx.getRealPath( percRelativo );
    Ciao.
    "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

  5. #5
    Utente di HTML.it L'avatar di Gab-81
    Registrato dal
    Nov 2005
    Messaggi
    558
    Grazie mille!!! Ora provo e se va posto la soluzione al mio problema


  6. #6
    Utente di HTML.it L'avatar di Gab-81
    Registrato dal
    Nov 2005
    Messaggi
    558
    Infatti funziona tutto!!! Nello specifico ho risolto così:

    codice:
    String rootPath = this.sc.getRealPath("/");
    System.setProperty("root", rootPath);
    Setto la root path come proprietà del sistema e poi la richiamo con il metodo

    codice:
    System.getProperty("root");
    nelle classi dove ho bisogno di scrivere i file. Quindi il codice diventa:

    codice:
    System.getProperty("root");
    if(root == null)
       root = "";
    this.outFile = new File(root + QUERY_OUTPUT_PATH + File.separator + QUERY_OUTPUT_FILE);
    this.osw = new OutputStreamWriter(new FileOutputStream(this.outFile), Charset.forName("UTF-8"));
    Grazie ancora!!!



    PS Potete mettere risolto...

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.