Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [Java]manipolazione file/db mysql che necessita di riavvio del contesto

    Ciao a tutti.

    Ho creato un applicativo che mostra le differenze esistenti tra 2 testi salvati in un db mysql 5. (una sorta di winmerge semplificato)

    Il programma funziona così:

    1.prende i testi da db (sono 2 campi medium text -memo-)
    2. li scrive formattandoli in 2 file html (questo xchè per esigenze di tempo non potevo ribaltare la classe open source sulla quale mi sono basata, che prende in pasto 2 file).
    3. ne ricava le differenze ed io, analizzandole, evidenzio i tratti differenti nei 2 testi.

    Il problema è che il tutto funziona, ma se vado a modificare uno dei 2 testi (non solo direttamente - x es con mysqlfront-, ma anche tramite applicazione), non mi ricarica correttamente le modifiche se non faccio il reload del context (per inciso uso tomcat). Errore mio o di mysql?

    grazie in anticipo delle vostre idee
    Realizzazione siti web
    ____________________________
    how terrible thing is knowledge when it brings no profit to the wise...

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    i due file html come li generi? Se sono generati al caricamento della pagina, per forza le modifiche apportate non si vedranno fino al successivo caricamento.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    in effetti il problema mi si è presentato ora che ho dovuto integrare la mia applicazione con una già esistente.

    Il processo ora è il seguente:

    1. apertura jsp.
    2. all'interno della jsp richiamo il metodo di una classe che ha il compito di fare tutto quello che viene descritto sopra.

    in effetti i file vengono generati a pagina avviata, se fosse questo il problema però penso che refreshando semplicemente la pagina si dovrebbero vedere corretti, non credi? In realtà le modifiche sono visibili, appunto, solo dopo il reload del contesto.
    Realizzazione siti web
    ____________________________
    how terrible thing is knowledge when it brings no profit to the wise...

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    non è che rimangano in cache da qualche parte? Mi sorge il dubbio che i files vengano letti dal browser e mandati alla procedura piuttosto che letti dal database ed eventualmente anche scritti.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    ora faccio una prova...poi ti dico.ti ringrazio comunque
    Realizzazione siti web
    ____________________________
    how terrible thing is knowledge when it brings no profit to the wise...

  6. #6
    ok ci sono.

    purtroppo non sembra un problema di cache, ho provato a "supplicare" il browser di non cashare con queste righe

    response.setHeader("Cache-Control","no-store");
    response.setHeader("Pragma","no-cache");
    response.setDateHeader ("Expires", 0);



    ma nulla da fare.

    Non capisco davvero cosa possa essere
    Realizzazione siti web
    ____________________________
    how terrible thing is knowledge when it brings no profit to the wise...

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    puoi mettere l'esempio online (e postare anche il codice).
    Vorrei capire cosa fa questo metodo richiamato dalla jsp per benino...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    ok, posto il flusso logico e il codice della classe
    dunque:

    1. ricavo i 2 testi da db e li passo ad un'istanza di AnalisiDiff con il metodo findDiff


    public class AnalisiDiff{

    FileOutputStream fileoutstream = null;
    Writer printer=null;
    String testoV1="";
    String testoV2="";
    Hashtable testiCorretti=new Hashtable();



    public Hashtable findDiff(String testo1, String testo2, ServletContext sc){

    testoV1=new String(testo1);
    testoV2=new String(testo2);

    try {


    if(testoV1.equals(testoV2)){
    testoV2="Nessun cambiamento dalla prima versione";
    }else{

    String mostraDiff="";
    String firFileName=sc.getRealPath("/")+"/diffutil/1.htm";
    String secFileName=sc.getRealPath("/")+"/diffutil/2.htm";

    testo1=testoV1.replace(">",">\r");
    testo1=testoV1.replace(".",".\n");

    testo2=testoV2.replace(">",">\r");
    testo2=testoV2.replace(".",".\n");

    fileoutstream = new FileOutputStream(firFileName);
    printer = new OutputStreamWriter(fileoutstream, "utf8");
    printer.write("<html>\n<head>\n<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>\n<title>Diff</title>\n</head>\n<body>\n");
    printer.write(testo1);
    this.closeWriter();

    fileoutstream = new FileOutputStream(secFileName);
    printer = new OutputStreamWriter(fileoutstream, "utf8");
    printer.write("<html>\n<head>\n<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>\n<title>Diff</title>\n</head>\n<body>\n");
    printer.write(testo2);
    this.closeWriter();

    DiffUTF8 d = new DiffUTF8();
    d.doDiff(firFileName, secFileName);

    mostraDiff=DiffUTF8.differenze;

    StringTokenizer stk = new StringTokenizer(mostraDiff,"*");

    String token="";
    String tokenFocus="";

    while(stk.hasMoreTokens()){

    token=stk.nextToken();
    if(token.equals("changed from")){
    tokenFocus=stk.nextToken();
    testoV1=testoV1.replace(tokenFocus,"<span class='cambiato'>"+tokenFocus+"</span>");
    }
    if(token.equals("changed to")){
    tokenFocus=stk.nextToken();
    testoV2=testoV2.replace(tokenFocus,"<span class='cambiato'>"+tokenFocus+"</span>");
    }
    if(token.equals("delete")){
    tokenFocus=stk.nextToken();
    testoV1=testoV1.replace(tokenFocus,"<span class='cancellato'>"+tokenFocus+"</span>");
    }
    if(token.equals("before")){
    tokenFocus=stk.nextToken();
    testoV2=testoV2.replace(tokenFocus,"<span class='aggiunto'>"+tokenFocus+"</span>");
    }
    if(token.equals("moved")){
    tokenFocus=stk.nextToken();
    testoV1=testoV1.replace(tokenFocus,"<span class='spostato'>"+tokenFocus+"</span>");
    testoV2=testoV2.replace(tokenFocus,"<span class='spostato'>"+tokenFocus+"</span>");
    }


    if(!tokenFocus.equals("")){

    System.out.println (tokenFocus);

    }

    }

    }


    testiCorretti.put("testo1",testoV1);
    testiCorretti.put("testo2",testoV2);


    }
    catch (Exception ex) {System.out.println (ex);}


    return testiCorretti;

    }

    public void closeWriter(){
    try { printer.write("</body></html>");printer.flush(); printer.close();}
    catch (Exception ex) {ex.printStackTrace();}
    }



    }


    DiffUTF8 si occupa di fare il merge dei file e mi torna una stringa (mostraDiff) che contiene solo le parti modificate precedute dal tipo di modifica. per es

    *change from*abra cadabra ula uba*change to*abra cadabra uba*

    io analizzo questa stringa con un tokenizer e a seconda del tipo di modifica applico una diversa formattazione al testo

    il problema visto più da vicino è che una volta modificati i testi e ricaricata la pagina, il primo testo viene mostrato correttamente, mentre il secondo mantiene le vecchie formattazioni + le nuove
    Realizzazione siti web
    ____________________________
    how terrible thing is knowledge when it brings no profit to the wise...

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Aspetta un attimo:
    tu scrivi

    codice:
    DiffUTF8 d = new DiffUTF8(); 
    d.doDiff(firFileName, secFileName); 
    
    mostraDiff=DiffUTF8.differenze;
    Mi perdo sull'ultima riga: perché richiami in quel modo, invece che ad esempio, con d.differenze?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    perchè la stringa differenze nella classe originale è statica.
    Ho cercato di mantenerla intatta il + possibile x ora (sempre x questioni di tempo).

    Per prova comunque ho fatto stampare mostraDiff ed era corretta.

    Per cui nn credo sia nemmeno quello
    Realizzazione siti web
    ____________________________
    how terrible thing is knowledge when it brings no profit to the wise...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.