|
||||
|
|
#1 (permalink) |
|
Nuovo della community ![]()
3 Messaggi
![]() |
Servlet da HTML in automatico
Salve, ho una semplice pagina html con campi per registrare utenti ad un database. Uno di questi è un select che rappresenta le categorie di servizio a cui gli utenti possono iscriversi. Ora io voglio che queste categorie vengano caricate AUTOMATICAMENTE da un database QUANDO ACCEDO alla pagina html. Per fare ciò voglio utilizzare una servlet che poi richiamerà delle classi java (già create) che consentiranno di prelevare i dati dal database (voglio usare il pattern MVC). Come faccio il collegamento da pagina html a servlet per ottenere i dati nella select automaticamente quando accedo? E la servlet come deve essere strutturata? Potete scrivermi del codice d'esempio?
Grazie.. |
|
|
|
|
|
#2 (permalink) |
|
Moderatore Globale ![]() ![]()
2,774 Messaggi
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Ciao,
Una servlet in sé non deve far altro che emetterre dell'output, solitamente in forma di codice html. Se la combo sulla pagina dovrà essere generata al volo dovrà essere la pagina stessa una servlet (e quindi ottenere il contenuto con le classi appropriate - o al limite includendo una jsp appropriata). In alternativa si può popolare il contenuto del tag select "al volo" ricorrendo ad ajax ed inserendoci dentro quanto ti risponde una servlet apposita. In buona sostanza: Ipotesi 1: codice:
<html> ... <body> ... <select> <jsp:include ...jsp che genera una serie di tag <option> a partire dal db... /> </select> codice:
<html> ... <body> ... <select> <% ...codice che genera una serie di tag option a partire dal db... %> </select> codice:
<html>
<head>
<script type="text/javascript">
function carica_dati(url_della_servlet){
var select=document.getElementById('select1');
...chiamata ajax asincrona che, nel onstatuschange e se tutto va bene, va a fare qualcosa del tipo:
select.innerHTML=ajaxresponse.responseText;
}
</script>
...
<body onload="carica_dati(...url_della_servlet che genera una serie di tag option...);">
...
<select id="select1">
</select>
![]()
__________________
![]() Venite a farmi un saluto su http://www.bottomap.com/ - Come porre domande in modo intelligente - Hai mai dato un'occhiata al Regolamento del Forum? Se la risposta è no, sarebbe proprio l'ora di farlo... - Se un utente ti è stato d'aiuto usa il pulsante Commenta Intervento per aumentare la sua reputazione! "La violenza è l'ultimo rifugio degli incapaci" - I.Asimov (per chiunque se lo fosse mai chiesto, il nick Bottomap è volutamente sgrammaticato) |
|
|
|
|
|
#3 (permalink) | |
|
Nuovo della community ![]()
3 Messaggi
![]() |
Quote:
L'ipotesi 2 non voglio considerarla non conoscendo ajax. Per quanto riguarda le ipotesi 1 e 1bis, c'avevo pensato ma il punto cruciale è che non voglio far comunicare direttamente la View(la mia pagina HTML/JSP) con Model(classi per l'accesso al database), ma utilizzare in qualche modo una servlet (Controller) da richiamare in automatico dalla View appena vi accedo, che avrà poi il compito di riempire le classi per l'accesso al database. ![]() Idee per richiamare la servlet? Grazie mille.. |
|
|
|
|
|
|
#4 (permalink) |
|
Moderatore Globale ![]() ![]()
2,774 Messaggi
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Ciao,
Forse ti sfugge il fatto che una pagina jsp è una servlet... il codice html che eventualmente ne fa parte è in buona sostanza una serie di out.print/out.println.. In effetti se guardi bene le pagine jsp vengono "compilate" in sorgenti .java (cartella work) la prima volta in cui avviene un accesso e sono a tutti gli effetti delle servlet. Nel pattern MVC in generale la jsp è associata all'elemento view. Il controller riceve un comando e risponde con la view appropriata. Niente vieta di fare in modo che il controller risponda ad una determinata request con una jsp che genera solo una porzione di html (ad esempio un insieme di tag option) O più semplicemente: - la view incapsula tutto il codice necessario a generare le option a partire dal db - la view nel punto in cui deve generare le option fa richiesta ad una classe specifica che ha lo scopo di generare il testo appropriato (spesso per le select si usa una classettina Coppia nome-valore o una hasmap) Ciaociao ![]()
__________________
![]() Venite a farmi un saluto su http://www.bottomap.com/ - Come porre domande in modo intelligente - Hai mai dato un'occhiata al Regolamento del Forum? Se la risposta è no, sarebbe proprio l'ora di farlo... - Se un utente ti è stato d'aiuto usa il pulsante Commenta Intervento per aumentare la sua reputazione! "La violenza è l'ultimo rifugio degli incapaci" - I.Asimov (per chiunque se lo fosse mai chiesto, il nick Bottomap è volutamente sgrammaticato) Ultima modifica di bottomap : 05-05-2009 a 21:04. |
|
|
|
|
|
#5 (permalink) |
|
Nuovo della community ![]()
3 Messaggi
![]() |
Ciao grazie mille per la risposta. Quindi nel mio caso ricapitolando:
1) la pagina iniziale html con il form d'inserimento dati deve essere trasformata in una jsp per poter generare al volo il contenuto del tag select? 2) è concettualmente corretto (secondo il pattern MVC) far effettuare a questa jsp direttamente la connessione al database per recuperare i valori dei tag, senza passare da una servlet in senso stretto? Considera che io uso Eclispe Ganymede e lì c'è cmq differenza tra creare una pagina jsp e creare una servlet. Potresti farmi un esempio di codice e di architettura delle tipologie di entità da utilizzare? te ne sarei grato molto grato. Devo riempire dei campi in una form d'inserimento dati e scegliere i valori della select prendendoli dal database. |
|
|
|
|
|
#6 (permalink) |
|
Moderatore Globale ![]() ![]()
2,774 Messaggi
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Ciao,
In senso stretto quello che dovrebbe avvenire è che il controller usa i dati del model e li porta nella view. In generale succede che nella pagina ci saranno richieste al controller, che otterrà dal model i dati e li incapsulerà in oggetti che astraggono dalla base dati... il succo del pattern è quello di separare le entità in gioco. Programmare MVC in senso stretto implica parecchio codice in più per mantenere separate le cose nella maniera corretta (tant'è che spesso risulta conveniente essere un po'più elastici di quanto richiede il pattern). Quando effettui la tua request (supponiamo che vuoi generare una select contenente dei comuni), il controller riceve i parametri corretti per la generazione della pagina o dello spezzone di pagina. A partire da quelli ottiene dal model un ArrayList (ad esempio) di oggetti Comune. Questa lista di oggetti verrà usata nella view per riempire la select di options. La cosa ovviamente è molto schematica per come l'ho illustrata... se crei delle Connection o degli Statement all'interno di una jsp ottieni di non separare il model dalla view (e quindi in teoria spezzi il pattern). Il senso di tutto questo (il succo dell'usare il pattern MVC) è che se un giorno ti cambia in qualche modo la tabella comuni nel database sei forzato a modificare anche tutte le view che usano le tabelle in questione. Se invece è il model che pesca i dati e li rende sottoforma di un oggettino Comune, al cambiare dei dati nel db devi solo toccare le classi che caricano l'oggetto ed eventualmente arricchire, estendere o sovrascrivere meotdi dell'esistente (e toccare quindi solo ed esclusivamente il model). Supponi, per separare per bene le cose, che il controller riceva la richiesta ed inserisca in session o in request l'ArrayList di cui sopra. La view dovrà solo utilizzarla scorrendola in un ciclo (ovviamente sarà una jsp). Per quanto riguarda la richiesta 1 la rispostà è si... se devi generare qualcosa "al volo" non puoi far altro che usare una jsp, o al limite ajax (ma in quel caso la cosa è un po'diversa, magari è il caso di approfondirlo in seguito). Per la richiesta 2 la risposta è no... usare la connessione nella jsp rompe il pattern come detto sopra (non rompe il pattern invece richiedere al controller una lista di oggetti da ciclare od ottenerli in session o in request). NB: Come detto, programmare in maniera rigidamente aderente al pattern in questione può a volte essere molto controproducente e forzare delle cose che obiettivamente sono bruttine a vedersi... stai pronto, man mano che ti impratichisci, ad arrivare a compromessi con il pattern (basta che le cose si complichino di poco). Tieni sempre d'occhio i concetti fondamentali (separare la web application in strati ben distinti), ma preparati a volte a sacrificare il pattern a beneficio della gestibilità dell'applicazione... un degli effetti peggiori dell'MVC è che tende a crearsi un esplosione di classi tale (teoricamente, avendo tre strati, avresti sempre bisogno di almeno due classi distinte - ma contenenti praticamente la stessa informazione - per portare in maniera indolore un tipo di dato dal db alla view) da essere ingestibile se non si conosce a menadito tutta la struttura dell'applicativo... per sperimentare la cosa basta che prendi un qualsiasi progetto opensource basato su mvc (ne esistono a bizzeffe perché il pattern in sé facilita il lavoro a più mani) e provi a metterci le mani senza avere troppa cognizione della struttura dell'applicativo. All'inizio, finché non hai una visione chiara di tutto l'applicativo, saranno sempre dolori. PS: La differenza in eclipse è solo di wizard... se controlli in work come viene compilata una pagina jsp (viene creato un file nomepagina_jsp.java - puoi leggere il sorgente senza problemi) vedi che per ogni pagina viene creata semplicemente una HttpServlet (in realtà un HttpJspBase che eredita da HttpServlet - ma comunque è una servlet con tutti gli annessi e connessi). Ciaociao ![]()
__________________
![]() Venite a farmi un saluto su http://www.bottomap.com/ - Come porre domande in modo intelligente - Hai mai dato un'occhiata al Regolamento del Forum? Se la risposta è no, sarebbe proprio l'ora di farlo... - Se un utente ti è stato d'aiuto usa il pulsante Commenta Intervento per aumentare la sua reputazione! "La violenza è l'ultimo rifugio degli incapaci" - I.Asimov (per chiunque se lo fosse mai chiesto, il nick Bottomap è volutamente sgrammaticato) |
|
|
|
|
|
#7 (permalink) |
|
Nuovo della community ![]()
1 Messaggi
![]() |
Ciao ragazzi,sono nuovo del forum, spero possiate aiutarmi. Scusate se riesumo un thread abbastanza vecchiotto,ma ho un problema molto simile a quello dell'utente che ha aperto il thread: devo recuperare dei valori da un database MySQL attraverso Servlet e visualizzarli "al volo" al caricamento della pagina. Ho provato a seguire l'ipotesi 1 suggerita da bottomap, ma mi sfugge una cosa: come faccio ad eseguire la servlet in automatico al caricamento della pagina?vorrei evitare di usare ajax,non essendo molto pratico,ma se non ho altre soluzioni proverò a documentarmi (magari con il vostro aiuto :-) ) e ad utilizzarlo...prego coloro che mi risponderanno di non essere "avari" a livello di codice,visto che ho sempre utilizzato php e mi trovo quindi abbastanza spiazzato a dover utilizzare JSP e le Servlet...grazie,Andrea
|
|
|
|
![]() |
| Strumenti della discussione | |
| Modalità di visualizzazione | |
|
|
Tutti gli orari sono GMT +1. Attualmente sono le 04:55.













Modalità lineare

