PDA

View Full Version : [refresh pagina web]


soundsgood
23-03-2010, 17:35
ciao ragazzi vorrei chiedere un consiglio..

vorrei un meccanismo che mi aggiorni una pagina web. Questa pagina web restituisce dinamicamente il contenuto di un file xml. Vorrei che quando qualcun altro cambia il contenuto di questo file xml, la pagina web effettui automaticamente il refresh

Cosa mi consigliate?

flx2000
23-03-2010, 17:49
Io farei un javascript con un timer che ogni tot secondi chiede a una pagina dinamica (ad esempio php) se il file in questione è cambiato. In tal caso il javascript ricarica la pagina, e così via.

soundsgood
23-03-2010, 18:03
ci vuole qualcosa di piu efficiente.. si dovrebbe evitare di fare un timer..

ci vuole un segnale che arriva quando il file è stato cambiato e si riaggiorni la pagina..

bobbytre
23-03-2010, 19:49
ci vuole qualcosa di piu efficiente.. si dovrebbe evitare di fare un timer..

ci vuole un segnale che arriva quando il file è stato cambiato e si riaggiorni la pagina..

generalmente appena viene ricevuta la risposta dal server la connessione termina, quindi non puo essere il server a segnalare la modifica , ma il client a controllare di volta in volta se è cambiato qualcosa.

flx2000
23-03-2010, 21:11
generalmente appena viene ricevuta la risposta dal server la connessione termina, quindi non puo essere il server a segnalare la modifica , ma il client a controllare di volta in volta se è cambiato qualcosa.

Esatto. Il browser scarica il codice della pagina, lo visualizza e fine, si ferma.
Se non metti un javascript (o qualcosa del genere, comunque un contenuto attivo lato client) non puoi segnalare niente al browser.

soundsgood
23-03-2010, 23:46
allora.. scendo nel dettaglio.. mi scuso se non mi sono spiegato bene prima..

la pagina web restituisce le informazioni da un file xml presente in locale. Questo file xml è modificato da un Web Services(sempre in locale) che riceve richieste dall'esterno.
Quindi quando arriva una modifica a questo file xml vorrei che la pagina facesse refresh ..

pensavo la seguente soluzione:

creo una applet java per ogni pagina web dell'interfaccia che implementi una socket (client), ed implemento una socket server che viene sollecitata dalle modifiche del file xml da parte del Web Services.

funzionerebbe cosi:

quando apro la pagina web tramite l'applet presente su di essa si crea una socket client che crea una connessione con la socket server che è in attesa. Quando il Web Services cambia il file xml (ricevendo una richiesta dall'esterno di cambiarlo) la socket server manda un messaggio (rispondendo) alle socket client connesse in quel momento, dandole l'ordine di fare refresh ..

dico connesse in quel momento perche ci possono essere piu istanze del browser attive che "leggono" il file xml e che vanno aggiornate

questo in linea teoria.. non so se dico cose giuste, che ne pensate?

vladix
24-03-2010, 09:45
io farei una funzione javascript (ajax) che chiama una servlet. la servlet rimane in attesa finche il file xml non viene modificato , e quando ciò avviene , la servlet riprende l'esecuzione , risponde ( manda un segnale alla pagina) , e la pagina fa il refresh:mc:

soundsgood
29-03-2010, 17:46
la servlet come fa a sapere quando il file xml è stato modificato?

(se ho dieci istanze del browser aperte si devono aggiornare tutte e dieci)

flx2000
29-03-2010, 18:03
allora.. scendo nel dettaglio.. mi scuso se non mi sono spiegato bene prima..

la pagina web restituisce le informazioni da un file xml presente in locale. Questo file xml è modificato da un Web Services(sempre in locale) che riceve richieste dall'esterno.
Quindi quando arriva una modifica a questo file xml vorrei che la pagina facesse refresh ..

pensavo la seguente soluzione:

creo una applet java per ogni pagina web dell'interfaccia che implementi una socket (client), ed implemento una socket server che viene sollecitata dalle modifiche del file xml da parte del Web Services.

funzionerebbe cosi:

quando apro la pagina web tramite l'applet presente su di essa si crea una socket client che crea una connessione con la socket server che è in attesa. Quando il Web Services cambia il file xml (ricevendo una richiesta dall'esterno di cambiarlo) la socket server manda un messaggio (rispondendo) alle socket client connesse in quel momento, dandole l'ordine di fare refresh ..

dico connesse in quel momento perche ci possono essere piu istanze del browser attive che "leggono" il file xml e che vanno aggiornate

questo in linea teoria.. non so se dico cose giuste, che ne pensate?

Perché instaurare una seconda connessione con un servizio (servlet) quando l'html di base permette già un'operazione di questo tipo attraverso del semplice codice Javascript che richiama uno script (jsp, php, aspx, ecc.) sullo stesso webserver?

soundsgood
29-03-2010, 18:45
flx mi spieghi meglio la tua idea?

ripeto: se ho aperte dieci pagine web che visualizzano i dati di un file xml, e viene cambiato il file xml (e quindi le sue informazioni) voglio che tutte queste pagine facciano refresh automaticamente

inoltre voglio evitare di impostare un timer, cosa che consumerebbe risorse

lupoxxx87
29-03-2010, 19:06
inserire un javascript, legato al file xml.

quando il file xml viene modificato, viene chiamata anche la funzione js, la funzione js manda un segnale al web service che crea la nuova pagina

(se è una pagina html che gli altri browser visualizzano non puoi modificarla, se gli altri browser hanno aperta una istanza del client, vedranno in tempo reale la modifica sul server)

soundsgood
29-03-2010, 20:28
non capisco che intendi che la funzione js invia al web service..

ripeto:

con n istanze del browser apro la pagina index.jsp (per esempio) che visualizza i dati presenti sul file xml.

quando arrivano delle richieste dall'esterno un web service (ma chi lo fa non è importante) modifica il file xml

vorrei che quando viene modificato il file xml, tutte le istanze (numero arbitrario) del browser in cui è visualizzata quella pagina web facciano refresh automaticamente

vladix
29-03-2010, 23:00
la servlet come fa a sapere quando il file xml è stato modificato?

(se ho dieci istanze del browser aperte si devono aggiornare tutte e dieci)

fai un listener sulla cartella dove c'e il file xml , che rileva le modifiche al file ( personalmente non l'ho mai fatto , ma cercando su internet ho trovato questo (http://java.sun.com/docs/books/tutorial/essential/io/notification.html) )... poi ogni pagina fa una chiamata asincrona al server , e il server non risponde alla pagina finchè il file non e stato modificato ... cmq non so quanto sia fattibile la cosa perchè dovresti tenere una connessione aperta x ogni broswer.


inserire un javascript, legato al file xml.

quando il file xml viene modificato, viene chiamata anche la funzione js, la funzione js manda un segnale al web service che crea la nuova pagina
(se è una pagina html che gli altri browser visualizzano non puoi modificarla, se gli altri browser hanno aperta una istanza del client, vedranno in tempo reale la modifica sul server)

javascript e lato client ed il file si trova sul server ... ci spieghi come fai a "legare" l'xml al javascript ? e che cosa c'entrano i web services ?

lupoxxx87
29-03-2010, 23:11
javascript e lato client ed il file si trova sul server ... ci spieghi come fai a "legare" l'xml al javascript ? e che cosa c'entrano i web services ?

io personalmente avrei fatto, sul client, una form con una textarea inizializzata con il contenuto dell xml e un submit button legato ad una funzione javascript che 1) aggiornava il contenuto del file xml sul server 2) avvisa il server di forzare il refresh di ogni client, con un metodo apposito dell'applet client che aggiorna il contenuto della textarea con l'attuale contenuto del xml

non mi sembra così assurda come cosa (è lo stesso meccanismo che ho programmato per una specie di tavolo da poker in lan con dei miei amici, solo che non avevo xml)

soundsgood
30-03-2010, 15:21
il file xml non è modificato dalla pagina web..

ripeto lo scenario.. la cose deve funzionare in locale.. il server quindi è localhost

abbiamo un computer dove in locale tramite tomcat gira una jsp localhost../index.jsp che visualizza (tramite browser) le informazioni di un file xml (che si trova in locale) (supponiamo che su questo file xml non ci siano informazioni testuali.. ma che comunque influenzano le informazioni visualizzate nella pagina index.jsp

detto questo ci sta in locale anche un WS (tramite Axis) che riceve dall'esterno (da internet) dei messaggi soap ed aggiorna il file xml (che si trova in locale).

voglio che quando il WS locale aggiorna (riscrive) questo file xml (che ricordo è in locale) ogni browser che visualizza la pagina si aggiorni automaticamente

flx2000
30-03-2010, 15:22
flx mi spieghi meglio la tua idea?

ripeto: se ho aperte dieci pagine web che visualizzano i dati di un file xml, e viene cambiato il file xml (e quindi le sue informazioni) voglio che tutte queste pagine facciano refresh automaticamente

inoltre voglio evitare di impostare un timer, cosa che consumerebbe risorse

Semplicemente, non puoi fare niente in automatico senza un timer di qualche tipo attivo su tutti i client.
Che sia in un file swf, che sia in javascript o un'applet java, sempre un timer che controlla ogni tot lo stato del file attraverso una richiesta al webserver dovrai fare.
Ti ho consigliato il JS perché lo ritengo il modo più semplice per implementare questa funzionalità.

lupoxxx87
30-03-2010, 15:39
un meta refresh html ?