PDA

View Full Version : JSP, XML e Ajax


yssj485
28-03-2009, 17:42
Sto lavorando ad un progetto in cui dovrei utilizzare server side JSP e utilizzare ajax client-side.
Ora.. partendo da quasi zero in applicazioni web e studiando quello che ho trovato in rete (potrei quindi aver frainteso tutto o quasi :D ), ho visto che c'è la possibilità di restituire ad ajax dei documenti xml( come dice anche il nome..:p ), cosa che mi potrebbe essere utile per la gestione e pubblicazione dei dati.
Il problema è che questi documenti xml dovrebbero essere generati dinamicamente in jsp, attraverso anche delle query al database, e restituiti come risposta al client.

Al momento il risultato che ho ottenuto è che al client viene restituita ( tramite l'oggetto XMLHttpoRequest ) la pagina risultante del jsp(html quindi), contenente anche la parte in xml di mio interesse nel body. A questo punto credo che potrei pure ottenere quello che voglio da quella pagina, ma mi sembra strano come procedimento.. sto sbagliando qualcosa? Ci sono altri metodi rimanendo sempre con jsp e trattando xml creati dinamicamente?

Grazie

_Claudio
28-03-2009, 19:33
Sto lavorando ad un progetto in cui dovrei utilizzare server side JSP e utilizzare ajax client-side.
Ora.. partendo da quasi zero in applicazioni web e studiando quello che ho trovato in rete (potrei quindi aver frainteso tutto o quasi :D ), ho visto che c'è la possibilità di restituire ad ajax dei documenti xml( come dice anche il nome..:p ), cosa che mi potrebbe essere utile per la gestione e pubblicazione dei dati.
Il problema è che questi documenti xml dovrebbero essere generati dinamicamente in jsp, attraverso anche delle query al database, e restituiti come risposta al client.

Al momento il risultato che ho ottenuto è che al client viene restituita ( tramite l'oggetto XMLHttpoRequest ) la pagina risultante del jsp(html quindi), contenente anche la parte in xml di mio interesse nel body. A questo punto credo che potrei pure ottenere quello che voglio da quella pagina, ma mi sembra strano come procedimento.. sto sbagliando qualcosa? Ci sono altri metodi rimanendo sempre con jsp e trattando xml creati dinamicamente?

Grazie

Se ricordo bene, facendo riferimento al modello MVC è abbastanza riferirsi direttamente alla servlet con la richiesta dell'ActiveX XmlHTTP senza passare dalla jsp che contiene necessariamente html.
Insomma, salta il livello di View e fai direttamente riferimento al Controller (Servlet) che chiamando il Model (JavaBean) genera l'xml e lo restituisce.

Mixmar
29-03-2009, 12:34
Quoto _Claudio, e aggiungo un consiglio: per effetturare le chiamate AJAX, il parsing/unparsing dei dati sul client, la visualizzazione degli stessi, la manipolazione del contenuto della pagina HTML sul cliente eccetera eccetera, prova ad usare un framework JavaScript già fatto.
Sono generalmente ben fatti, testati, cross-browser, hanno librerie di funzioni già implementate che semplificano molto la vita del programmatore, supportano parsing/unparsing XML e anche JSON. E poi sono gratuiti... ;)

Me ne vengono in mente due, ma ce ne sono tantissimi: prototype + script.aculo.us e dojo: googla un po' e vedi se ti ispirano.

yssj485
29-03-2009, 13:33
Il problema è l'utilizzo di framework non credo sarebbe molto gradito, visto che si tratta di un progetto universitario.. insomma immagino che dovrei dimostrare di riuscire a cavarmela anche senza. :)

Il progetto poi dice esplicitamente di utilizzare JavaScript e AJAX client-side e JSP server-side(senza ulteriori dettagli): al momento quindi ho creato una pagina html in cui una parte del body viene aggiornata tramite ajax richiamando delle pagine jsp.. ho frainteso io il testo? Se io creassi delle pagine HTML con JSP e sempre con JSP invocassi funzioni js per ajax e tramite questo delle servlet.. non sposterei JSP client-side?

Grazie per l'aiuto

_Claudio
29-03-2009, 16:06
Il problema è l'utilizzo di framework non credo sarebbe molto gradito, visto che si tratta di un progetto universitario.. insomma immagino che dovrei dimostrare di riuscire a cavarmela anche senza. :)

Il progetto poi dice esplicitamente di utilizzare JavaScript e AJAX client-side e JSP server-side(senza ulteriori dettagli): al momento quindi ho creato una pagina html in cui una parte del body viene aggiornata tramite ajax richiamando delle pagine jsp.. ho frainteso io il testo? Se io creassi delle pagine HTML con JSP e sempre con JSP invocassi funzioni js per ajax e tramite questo delle servlet.. non sposterei JSP client-side?

Grazie per l'aiuto

Che senso avrebbe invocare AJAX tramite jsp... però mi sa che è il modo più intelligente di agire dopo il "saltare" il livello di view, e ancor più dopo il parsare l'html estraendo i dati (non mi stupirei però se volessero che facessi così).
Questo dimostra ancora una volta la differenza tra teoria e pratica... tra università e mondo reale, nel mondo reale si salta la view e ci si semplifica la vita (anche perchè l'xml è creato internamente e non ricavato tramite richieste a terzi), nell'università invece si tiene integro il modello mvc (motivi didattici...) e si creano software di dubbia funzionalità. E lo dice un laureando in ingegneria...

yssj485
29-03-2009, 17:54
Boh oramai sono confuso.. mi toccherà chiedere ulteriori informazioni e vedrò se praticamente devo buttare tutto quello che ho realizzato finora..:rolleyes:

Grazie comunque per l'aiuto

_Claudio
29-03-2009, 18:36
Boh oramai sono confuso.. mi toccherà chiedere ulteriori informazioni e vedrò se praticamente devo buttare tutto quello che ho realizzato finora..:rolleyes:

Grazie comunque per l'aiuto

Perchè confuso, basta che ti rifai al modello mvc...

yssj485
01-04-2009, 10:07
Pare che quello che sto facendo possa andare bene.. e sembra possa utilizzare toolkit quali dojo. Adesso vedo cosa riesco a tirarne fuori :)

yssj485
01-04-2009, 15:33
Approfitto del topic per chiedere un chiarimento su JSP..

Se nel body invoco o dichiaro una funzione javascript immagino che la funzione venga eseguita server-side per generare la pagina html da restituire..
c'è un modo semplice per non far elaborare l'esecuzione della funzione e farla così eseguire direttamente sul client?

_Claudio
01-04-2009, 16:52
Approfitto del topic per chiedere un chiarimento su JSP..

Se nel body invoco o dichiaro una funzione javascript immagino che la funzione venga eseguita server-side per generare la pagina html da restituire..
c'è un modo semplice per non far elaborare l'esecuzione della funzione e farla così eseguire direttamente sul client?

Una funzione JS è eseguita per definizione sul client anche se si trova in una pagina jsp, il fatto di avere come estensione jsp vuol solo dire che va elaborata in maniera diversa rispetto altri tipi di pagine (html, php). Ma i contenuti statici e le funzioni JS sono sempre parsati ed eseguiti lato client.

yssj485
01-04-2009, 20:45
Sì, però se da una pagina html faccio una richiesta tramite ajax ad una pagina jsp nel cui body c'è il codice seguente:
ciao
<script language="javascript">
alert("prova");
</script>
e passando il tutto tramite responseText, ottengo che mi viene pubblicato solo ciao e non l'alert..

Ho appena provato a fare un alert del responseText ed il codice javaScript è in effetti presente, però non viene eseguito..:mc:

_Claudio
04-04-2009, 19:28
Sì, però se da una pagina html faccio una richiesta tramite ajax ad una pagina jsp nel cui body c'è il codice seguente:
ciao
<script language="javascript">
alert("prova");
</script>
e passando il tutto tramite responseText, ottengo che mi viene pubblicato solo ciao e non l'alert..

Ho appena provato a fare un alert del responseText ed il codice javaScript è in effetti presente, però non viene eseguito..:mc:

Certo, non viene parsato ed eseguito, se carichi una pagina jsp e la aggiungi ad una pagina tramite il metodo innerHTML, viene eseguito il codice dinamico lato server che sottointende alla creazione della pagina jsp, ma poi il contenuto statico viene aggiunto alla pagina di destinazione senza essere parsato lungo tutta l'architettura interna del browser.

yssj485
05-04-2009, 22:59
Ah ho capito.. quindi posso restituire ad innerHTML solo del codice già lavorato ( casomai con js) e non ancora da eseguire.

Il problema mio originario sarebbe di effettuare un login tramite ajax.. avrei voluto restituire una conferma di login e poi, tramite una funzione timeout, avrei voluto effettuare in automatico una richiesta ajax alla pagina dell'utente o amministratore.

A questo punto forse mi conviene passare direttamente alla pagina e saltare il timeout.

_Claudio
05-04-2009, 23:58
Ah ho capito.. quindi posso restituire ad innerHTML solo del codice già lavorato ( casomai con js) e non ancora da eseguire.

Il problema mio originario sarebbe di effettuare un login tramite ajax.. avrei voluto restituire una conferma di login e poi, tramite una funzione timeout, avrei voluto effettuare in automatico una richiesta ajax alla pagina dell'utente o amministratore.

A questo punto forse mi conviene passare direttamente alla pagina e saltare il timeout.

Sì, puoi passare solo codice già "lavorato".

Se vuoi usare una funzione timeout basta che la metti in un file .js e la tieni "dormiente" (lato client) finchè tramite ajax alla restituzione di un valore specifico la richiami e avvii una richiesta a chi vuoi sempre tramite un'altro "scambio AJAX".