Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2016
    Messaggi
    21

    aggiornare un file con le servlet

    Buona sera ho il problema su come aggiornare un file.txt tramite una servlet.
    Il fatto è che se inserisco il path assoluto funziona , ma visto che non deve girare solo sul mio pc non è una soluzione efficiente . Il metodo getAbsoluteFile().getPath() mi restituisce un path diverso dal reale (è commentato nel codice quello che stampa)

    Come posso fare ?



    servlet
    codice:
    @WebServlet("/ClienteRegistrazione")
    
    
    public class ClienteRegistrazione extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
    
            static ClienteModelDM model = new ClienteModelDM();
    
    
        public ClienteRegistrazione() {
            super();
        }
    
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            int flag = 0;
        
            String n = request.getParameter("nome");
            String c = request.getParameter("cognome");
            String u = request.getParameter("username");
            String p = request.getParameter("password");
            String e = request.getParameter("email");
            String s = request.getParameter("sesso");
            String cell = request.getParameter("cellulare");
            int gg = Integer.parseInt(request.getParameter("giorno"));
            System.out.println(""+gg);
            int mm = Integer.parseInt(request.getParameter("mese"));
            System.out.println(""+mm);
            int aa = Integer.parseInt(request.getParameter("anno"));
            System.out.println(""+aa);
            //String data = "'"+aa+"-"+mm+"-"+gg+"'";
            
            
            
            
            String filename = "db/login.txt";
                
            ServletContext context = getServletContext();
            
            System.out.println("il file esiste");
            // System.out.println("il path: "+file.getAbsoluteFile().getPath());
            
             FileInputStream in = (FileInputStream) context.getResourceAsStream(filename);
             InputStreamReader isr = new InputStreamReader(in);        
             BufferedReader reader = new BufferedReader(isr);
             String text = "";        
             
            System.out.println("lo leggo");        
            
            System.out.println("prima "+text);
                while ((text = reader.readLine()) != null) {
                    
                    System.out.println(""+text);            
                
                String user =reader.readLine();                
                String word =reader.readLine();    
                
                System.out.println(""+user);
                System.out.println(""+word);
                
                if(user.equals(u)){
                    flag=1;    
                    System.out.println("esistente");
                    
                }            }
                
            in.close();isr.close();reader.close();
            
            System.out.println(" flag = "+flag);
            
            
            
            
    if(flag ==0){
        System.out.println("scrittura");
    
    
    
        File file = new File(filename);
    
        System.out.println("ciO = "+file.getAbsoluteFile().getPath());  
    
      //mi stampa questo pathD:\desktop\eclipse\db\login.txt
    
    
        PrintWriter out =  new PrintWriter(
                new FileOutputStream(file.getAbsoluteFile().getPath(),true)); 
    //cosi non funziona 
    
    PrintWriter out =  new PrintWriter(
                new FileOutputStream(D:/desktop/workspace HTML/_PROGETTO PROGRAMMAZIONE WEB/WebContent/db/login.txt,true)); 
    
        //cosi funziona 
        
        
        out.println(u); 
        out.println(p);
        out.close(); 
        
         
            Cliente cliente = new Cliente();        
            cliente.setNome(n);
            cliente.setCognome(c);
            cliente.setUsername(u);
            cliente.setEmail(e);
            cliente.setPassword(p);
            cliente.setSesso(s);
            cliente.setCellulare(cell);
            cliente.setDataNascita(new GregorianCalendar(aa,mm,gg));
            
            /*
            try {
                model.doSave(cliente);
            } catch (SQLException e1) {
                
                e1.printStackTrace();
            }*/
    
    
            response.setContentType("text/html");
            PrintWriter out2 = response.getWriter();
            String title = "Reading Three Request Parameters";
            String docType =
              "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
              "Transitional//EN\">\n";
            out2.println(docType +
                        "<HTML>\n" +
                        "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" +
                        "<BODY BGCOLOR=\"#FDF5E6\">\n" +
                        "<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" +
                        "<UL>\n" +
                        "  <LI><B>nome</B>: "
                        + request.getParameter("nome") + "\n" +
                        "  <LI><B>cognome</B>: "
                        + request.getParameter("cognome") + "\n" +
                        "  <LI><B>user</B>: "
                        + request.getParameter("username") + "\n" +
                        "  <LI><B>email</B>: "
                        + request.getParameter("email") + "\n" +
                        "  <LI><B>pass</B>: "
                        + request.getParameter("password") + "\n" +
                        "  <LI><B>cell</B>: "
                        + request.getParameter("cellulare") + "\n" +
                        "  <LI><B>cf</B>: "
                        + request.getParameter("sesso") + "\n" +
                        "  <LI><B>data</B>: "
                        + cliente.getDataNascitaStr()+ "\n" +
                       
                        "</UL>\n" +
                        "</BODY></HTML>");}
    
    
    else{
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        String title = "Reading Three Request Parameters";
        String docType =
          "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
          "Transitional//EN\">\n";
        out.println(docType +
                    "<HTML>\n" +
                    "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" +
                    "<BODY BGCOLOR=\"#FDF5E6\">\n" +
                    "<H1 ALIGN=\"CENTER\">" + title + "</H1>\n" +
                   
                    "   USERNAME ESISTENTE"+
                    
                   
                  
                    "</BODY></HTML>");
    }
    
    
        }
    
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    
    }
    html
    codice HTML:
    <!DOCTYPE html><html><head><meta charset="UTF-8"><title>REGISTRATI SU AMERICAN !</title><style>p{display :inline;         color :red ;}</style> <script src="script/val.js" type="text/javascript"></script>
    </head><body>
    
    <form name="reg"   id="registrazione" method="post" onsubmit="return validazione()" action ="ClienteRegistrazione"> 
    Nome: <input type = "text" name = "nome"  onblur="valNome()">*   <p id="mn"></p> <br> <br>
    Cognme: <input type = "text" name = "cognome" onblur="valCognome()">*  <p id="mc"></p> <br> <br>
    Username: <input type = "text" name = "username" onblur="valUsername()">* <p id="mu"></p> <br> <br>
    Password: <input type = "password" name = "password" onblur="valPassword()" >* <p id="mp"></p><br>  <br>
    Email: <input type = "email" name = "email" onblur="valEmail()" >*  <p id="me"></p> <br> <br>
    Cellulare: <input type = "text" name = "cellulare" onblur="valTel()">*  <p id="mcell"></p> <br> <br>
    
    Sesso:* <br>M:<input type = "radio" name = "sesso" value="M" >       F:<input type = "radio" name = "sesso" value="F">  <p id="ms"></p>  <br><br>              Data Di Nascita :* <br>GIORNO: <select name ="giorno"><option value="00">&nbsp;</option><option value="01">01</option><option value="02">02</option><option value="03">03</option><option value="04">04</option><option value="05">05</option><option value="06">06</option><option value="07">07</option><option value="08">08</option><option value="09">09</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option></select>
    MESE: <select name ="mese"><option value ="00">&nbsp;</option><option value="0">01</option><option value="1">02</option><option value="2">03</option><option value="3">04</option><option value="4">05</option><option value="5">06</option><option value="6">07</option><option value="7">08</option><option value="8">09</option><option value="9">10</option><option value="10">11</option><option value="11">12</option></select>
    ANNO:<select name ="anno"><option value ="00">&nbsp;</option><option value="1936">1936</option><option value="1937">1937</option><option value="1938">1938</option><option value="1939">1939</option><option value="1940">1940</option><option value="1941">1941</option><option value="1942">1942</option><option value="1943">1943</option><option value="1944">1944</option><option value="1945">1945</option><option value="1946">1946</option><option value="1947">1947</option><option value="1948">1948</option><option value="1949">1949</option><option value="1950">1950</option><option value="1951">1951</option><option value="1952">1952</option><option value="1953">1953</option><option value="1954">1954</option><option value="1955">1955</option><option value="1956">1956</option><option value="1957">1957</option><option value="1958">1958</option><option value="1959">1959</option><option value="1960">1960</option><option value="1961">1961</option><option value="1962">1962</option><option value="1963">1963</option><option value="1964">1964</option><option value="1965">1965</option><option value="1966">1966</option><option value="1967">1967</option><option value="1968">1968</option><option value="1969">1969</option><option value="1970">1970</option><option value="1971">1971</option><option value="1972">1972</option><option value="1973">1973</option><option value="1974">1974</option><option value="1975">1975</option><option value="1976">1976</option><option value="1977">1977</option><option value="1978">1978</option><option value="1979">1979</option><option value="1980">1980</option><option value="1981">1981</option><option value="1982">1982</option><option value="1983">1983</option><option value="1984">1984</option><option value="1985">1985</option><option value="1986">1986</option><option value="1987">1987</option><option value="1988">1988</option><option value="1989">1989</option><option value="1990">1990</option><option value="1991">1991</option><option value="1992">1992</option><option value="1993">1993</option><option value="1994">1994</option><option value="1995">1995</option><option value="1996">1996</option><option value="1997">1997</option><option value="1998">1998</option><option value="1999">1999</option><option value="2000">2000</option><option value="2001">2001</option><option value="2002">2002</option><option value="2003">2003</option><option value="2004">2004</option><option value="2005">2005</option><option value="2006">2006</option>                                          </select><p id="mdata"></p> 
    <br><br><input type="submit" value="invia" >
    
    </form>
    
    </body></html>

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Precisa meglio: dove si trova esattamente il file da modificare? Cosa intendi fare esattamente?

    Ad ogni modo, questa riga è sbagliata:

    codice:
    PrintWriter out =  new PrintWriter(
                new FileOutputStream(D:/desktop/workspace HTML/_PROGETTO PROGRAMMAZIONE WEB/WebContent/db/login.txt,true));

    Quantomeno, il path deve essere racchiuso tra virgolette (altrimenti non compila nemmeno).


    Se un oggetto File viene costruito usando un "percorso relativo", allora quell'oggetto punterà ad un file (esistente o meno, non è importante) relativo alla working-directory. Quale che sia la working-directory all'interno di un Servlet Container (o un Application Server) dipende da troppe cose: può essere la directory da cui l'application server viene eseguito, può essere la Context-Root, può essere altro ancora... insomma: non lo puoi sapere a prescindere. Di conseguenza, se costruisci un oggetto File con un percorso relativo e usi getAbsolutePath() (perchè passare per getAbsoluteFile().getPath()?), questo ti darà il percorso assoluto del File puntato da quell'oggetto. Che può, appunto, differire molto da ciò che ci si aspetta.


    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
    Registrato dal
    Jan 2016
    Messaggi
    21
    Grazie per la precedente risposta
    quello che deve fare la mia servlet e leggere i parametri dei campi della registrazione e deve aggiornare un file gia esistente aggiungendo l username e la passsword .

    il file da modificare sta nel seguente percorso
    D:\desktop\workspace HTML\_PROGETTO PROGRAMMAZIONE WEB\WebContent\db (e si chiama login.txt)

    il file html che realizza le form sta nel seguente percorso
    D:\desktop\workspace HTML\_PROGETTO PROGRAMMAZIONE WEB\WebContent (e si chiama registrazione.html)

    la servlet sta nel seguente percorso
    D:\desktop\workspace HTML\_PROGETTO PROGRAMMAZIONE WEB\src\serverlet ( e si chiama ClienteRegistrazione.java)

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Immagino, quindi, che poi quando verrà fatto il deploy nel servlet container, quel file te lo porterai dietro e immagino, dunque, che i files presenti nella directory "WebContent" saranno quelli che si troveranno nella root della tua web-application.

    Se è così, per accedere al file dalla Servlet, è sufficiente questo:

    codice:
    // Ottengo il percorso reale del file sul file-system del server
    // Nota bene lo slash iniziale: indica che il percorso è relativo
    // alla context-root della tua applicazione
    String realPath = getServletContext().getRealPath("/db/login.txt");
    
    // Ora puoi usare realPath con qualsiasi oggetto per l'elaborazione file
    FileOutputStream fos = null;
    try {
       fos = new FileOutputStream(realPath, true);   // Apro in append
       ...
       fos.flush();
    } catch (Exception e) {
       logger.log("Errore durante la manipolazione del file", e);
    } finally {
       if (fos != null) {
          try { fos.close(); } catch (Exception e) { }
       }
    }

    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
    Registrato dal
    Jan 2016
    Messaggi
    21
    ciao sto capendo un po come funziona ma avre alcora alcune domande :

    1- il file login.txt che ho nella cartella db non veniva mai scritto allora ho richiato il metodo per creare il file passando il percorso e me l ho ha creato nella seguente posizione :

    D:\desktop\workspace HTML\.metadata\.plugins\org.eclipse.wst.server.cor e\tmp0\wtpwebapps\
    _PROGETTO PROGRAMMAZIONEWEB\db

    sapresti spiegarmi perche? e se passo il progetto su un altro pc funziona ancora ?

    2- perche se uso la classe FileWriter(sempe con il paramentro append ture) ogni volta che lo eseguo la prima volta appena apro eclipse mi azzera il file mentre per le succcessive volte aggiorna il file ?

    ancora grazie mille

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da toniCors Visualizza il messaggio
    ciao sto capendo un po come funziona ma avre alcora alcune domande :

    1- il file login.txt che ho nella cartella db non veniva mai scritto allora ho richiato il metodo per creare il file passando il percorso e me l ho ha creato nella seguente posizione :

    D:\desktop\workspace HTML\.metadata\.plugins\org.eclipse.wst.server.cor e\tmp0\wtpwebapps\
    _PROGETTO PROGRAMMAZIONEWEB\db

    sapresti spiegarmi perche? e se passo il progetto su un altro pc funziona ancora ?
    Perchè tu stai eseguendo il tuo progetto da dentro il tuo IDE. Il tuo IDE (Eclipse) deve usare una istanza di un Servlet Container (Tomcat) dove effettuare un "deploy". Questa istanza "emula" un ambiente di esecuzione.

    Tutto questo non è ciò che accade "in produzione". In un ambiente reale, c'è già un Servlet Container (o un Application Server) funzionante e configurato. Dentro a questo server fai il deploy della tua Web Application (che prima va compilata e impacchettata). Questo sarà l'ambiente di esecuzione "reale", la cui struttura di directory rispecchia quella che tu hai usato in fase di realizzazione (tranne, ovviamente, i riferimenti locali). Alla seconda domanda ho risposto intrinsecamente.


    2- perche se uso la classe FileWriter(sempe con il paramentro append ture) ogni volta che lo eseguo la prima volta appena apro eclipse mi azzera il file mentre per le succcessive volte aggiorna il file ?

    Perchè, evidentemente, ad ogni avvio della applicazione Eclipse ripulisce il suo ambiente di lavoro (lo ricrea da zero, fornendoti ogni volta un ambiente nuovo). Tieni presente che io non uso Eclipse, ma questo non c'entra nulla. Il fatto è che io non avvio i miei programmi (siano essi web-application o applicazioni desktop) da dentro l'IDE. Semplicemente l'IDE lo uso per programmare e compilare. Poi prendo il mio pacchetto compilato e lo vado a testare in un ambiente di test separato. Ma questo è il mio personalissimo modo di procedere.


    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

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2016
    Messaggi
    21
    Grazie mille per tutto

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.