Tutorial jsp: gestione utenti con database access
Pubblicato da Davide, Aggiornato mercoledì 2 luglio 2008 21 Commenti »
Gestire gli utenti di un sito web con la tecnologia jsp e javaBean è una delle operazioni più elementari, ma è anche il primo ostacolo da superare quando ci si avvicina a questa tecnologia. Effettuare la registrazione degli utenti e il relativo salvataggio dei dati su database, gestire la sessione con il login e il logout: sono le basi per costruire un sito dinamico che prevede l’interazione con i propri visitatori.
In questo piccolo tutorial vengono realizzate cinque semplici pagine:
- registrazione.html
- registra.jsp
- login.html
- login.jsp
- logout.jsp
Tutte le operazioni di inserimento e le interrogazioni al database vengono effettuate dal bean UtentiBean.java. Potete scaricare il file con gli esempi direttamente qui.
La prima operazione da fare è il caricamento dei files nella cartella webapps di Tomcat. Per funzionare correttamente il nome della cartella che contiene tutti i files deve essere “diplod”, se vuoi cambiare il nome alla tua cartella ricordati di farlo anche nelle pagine jsp che si connettono al database, ovvero “registra.jsp” e “login.jsp”. Puoi cambiare nome pure al database, purchè lo modifichi anche nella stringa che si connette ad esso. Queste semplici pagine sono state testate su Tomcat versione 5.5, per funzionare sulla versione 4 bisogna cambiare la stringa di collegamento al database e impostare i permessi di accesso ad esso dal pannello di controllo di windows (strumenti di amministrazione, origine dati ODBC). In amministrazione dati scegliere “Database di Microsoft Access” e cliccare su Aggiungi.
Selezionare “Driver do Microsoft Access (*.mdb)”
Selezionare il database nella sua posizione e assegnarli un nome univoco, che sarà poi quello utilizzato nella stringa di collegamento.
Vediamo ora nel dettaglio il contenuto delle pagine:
La pagina “registrazione.html” contiene un semplice form di inserimento dati, per il quale evito di riportare il codice.
La pagina “registra.jsp” contiene invece il codice per processare i parametri ricevuti e invocare il metodo di salvataggio del bean. Se infatti l’utente ha inviato i dati, questi vengono salvati in stringhe e successivamente impostati sul bean tramite i metodi setNomeVar(). Successivamente viene invocato il metodo salvaUtente(), che restituisce valore vero nel caso l’inserimento dei dati sul database vada a buon fine.
NB: in grassetto è evidenziata la stringa di connessione al database, se non avete modificato i nomi della cartella e del database e state utilizzando Tomcat 5.5 si può lasciare invariata, altrimenti va modificata opportunamente con il giusto percorso. Se invece state utilizzando Tomcat 4 va sostituito tutto il blocco di bean.setDbUrl(…..); con questo blocco: bean.setDbUrl(“jdbc:odbc:nomeDelTuoDatabase”); dove al posto di nomeDelTuoDatabase bisogna riportare il nome univoco dato al database dal pannello di controllo di windows.
Questo il codice della pagina:
<%@page language="java"%>
<jsp:useBean id="bean" scope="page"
class="beans.UtentiBean"/>
<% if (request.getParameter("invio")!=null) {
bean.setDbUrl("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};
DBQ=C:/Programmi/Apache Software Foundation/Tomcat 5.5/webapps/diplod/diplod.mdb");
bean.connect();
String nome = request.getParameter("nome");
String cognome = request.getParameter("cognome");
String username = request.getParameter("username");
String password = request.getParameter("password");
String email = request.getParameter("email");
String hobby = request.getParameter("hobby");
bean.setNome(nome);
bean.setCognome(cognome);
bean.setUsername(username);
bean.setPassword(password);
bean.setEmail(email);
bean.setHobby(hobby);
} %>
<% //salvataggio utente
boolean salvataggio = false;
salvataggio = bean.salvaUtente();
if (salvataggio==true) { %>
<h1>Conferma registrazione</h1>
<p>La tua registrazione è avvenuta correttamente.</p>
<p>Questi sono i tuoi dati: <br/>
Il tuo nome:<%=bean.getNome()%><br/>
Il tuo cognome:<%=bean.getCognome()%><br/>
La tua email:<%=bean.getEmail()%><br/>
Il tuo username:<%=bean.getUsername()%><br/>
La tua password:<%=bean.getPassword()%><br/>
Il tuo hobby:<%=bean.getHobby()%><br/>
</p>
<% } else { %>
<h1>Errore!</h1>
<p>La tua registrazioneb non è avvenuta correttamente.</p>
<p>Forse hai scelto un nome utente già presente o non hai compilato correttamente alcuni campi! Torna a <a
xhref="registrazione.html" mce_href="registrazione.html" >registrazione</a>.</p>
Motivo dell'errore: <br/>
<%=bean.getMsgErrore()%>
<% }
bean.disconnect(); %>
La pagina login.html è un’altra semplice pagina statica che contiene il form per il login.
La pagina login.jsp gestisce il primo login e la sessione dell’utente. A differenza della pagina jsp per la registrazione, lo scope del bean è infatti settato a “session”, ovvero i dati relativi all’utente vengono tenuti in memoria dal server per tutta la durata del collegamento, fino al logout. Anche in questo caso è necessario tenere presente degli accorgimenti sulla stringa di connessione al database illustrati precedentemente.
Come si vede dal codice, la pagina imposta i dati dati solo se sono stati effettivamente inviati dal form, per poi invocare il metodo loginUtente() del bean. Questo metodo, nel caso l’utente sia presente nel database, imposta a true una variabile booleana. Il suo valore viene recuperato poi dalla jsp tramite il metodo getAuth(), per controllare se l’utente ha effettuato positivamente il login. Questo metodo potrebbe essere invocato da tutte le pagine sicure del nostro sito, quelle alle quali si può accedere solo dopo il login.
Se il login non è andato a buon fine, al posto del menù di navigazione viene restituito un messaggio di cortesia all’utente.
Ecco il codice della pagina:
<%@page language="java"%>
<jsp:useBean id="bean" scope="session"
class="beans.UtentiBean"/>
<%
//se l'utente ha compilato il form per il login
if (request.getParameter("invio")!=null) {
bean.setDbUrl("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};
DBQ=C:/Programmi/Apache Software Foundation/Tomcat
5.5/webapps/diplod/diplod.mdb");
bean.connect();
String username = request.getParameter("username");
String password = request.getParameter("password");
bean.setUsername(username);
bean.setPassword(password);
bean.loginUtente();
}
//controllo l'esito del login
if (bean.getAuth()) { %>
<h1>Benvenuto nel sito <%=bean.getNome()%> <%=bean.getCognome()%></h1>
<p>Questo è il menù di navigazione.</p>
<ul>
<li><a xhref=http://www.diplod.it/#">voce di navigazione 1</a></li>
<li><a xhref=http://www.diplod.it/#">voce di navigazione 2</a></li>
<li><a xhref=http://www.diplod.it/#">voce di navigazione 3</a></li>
<li><a xhref=http://www.diplod.it/#">voce di navigazione 4</a></li>
<li><a xhref=http://www.diplod.it/#">voce di navigazione 5</a></li>
<li><a xhref=http://www.diplod.it/#">voce di navigazione 6</a></li>
</ul>
<a xhref="logout.jsp" mce_href="logout.jsp" >Logout</a>
<% } else { %>
<h1>Errore!</h1>
<p>Nome utente o password non corretti.</p>
<p>se ancora non sei registrato vai a <a xhref="registrazione.html" mce_href="registrazione.html" >registrazione</a> altrimenti <a xhref="login.html" mce_href="login.html" >ritenta il login</a>.</p>
Motivo dell'errore: <br/>
<%=bean.getMsgErrore()%>
<% }
bean.disconnect(); %>
La pagina logout.jsp non fa altro che invocare il metodo logout() del bean. Tale metodo torna a settare a false la variabile auth, in questo modo l’accesso alle pagine protette non sarà più possibile.
Per il codice del bean, si faccia riferimento direttamente al file UtentiBean.java, il codice è commentato per una più facile comprensione. La composizione delle stringhe per le query sql, così come la gestione delle statement sono volutamente semplificate per risultare di più facile comprensione, ma probabilmente non sono il modo migliore per interrogare un database ed eseguire operazioni sql.
Giusto a titolo informativo, si riporta un metodo più professionale per interrogare un database (in questo caso MySql).
PreparedStatement stmt = null;
ResultSet rs = null;
Connection cn=null;
try{
Class.forName("com.mysql.jdbc.Driver");
cn = DriverManager.getConnection("jdbc:mysql://localhost/database?user=XXXX&password=XXXXX");
String sql="SELECT * FROM tabella WHERE user=? AND password=?";
stmt = cn.prepareStatement(sql);
stmt.setString(1,user);
stmt.setString(2,password);
rs = stmt.executeQuery();
if (rs.next()) { ..........
Spero che questo piccolo tutorial possa essere utile. Quando ho iniziato a studiare la tecnologia server-side di java ero un po’ spaesato, e nonostante diverse ricerche tra forum e manuali non sono mai riuscito a trovare una semplice guida per la gestione degli utenti con un database access. Certo non è il miglior database da utilizzare se vogliamo creare un sito web, ma cambiando solo pochissime righe di codice si può utilizzare questa applicazione ugualmente con MySQL.
Se avete suggerimenti, se trovate qualcosa di incorretto, lasciate un commento a questo post.
21 Commenti »
Puoi lasciare un tuo commento, oppure fare un trackback dal tuo sito.
Lascia il tuo commento
1
maria - Pubblicato il 17 12 2006 alle 18:22
bello! grazie, mi è stato molto utile…
2
Massimiliano - Pubblicato il 10 04 2007 alle 15:12
Sto cercando di implementare una procedura di login per l’accesso ad una webapps e devo dire che il tuo articolo è molto utile. Tuttavia non riesco a farlo funzionare!
Mi restituisce un errore “org.apache.jasper.JasperException: /login.jsp(7,0) The value for the useBean class attribute beans.UtentiBean is invalid.
”
Premetto che ho modificato il path ed il nome del dB, ma dovrei aver sistemato tutto nei file jsp. Puoi darmi una mano?
3
Massimiliano - Pubblicato il 10 04 2007 alle 15:13
ho provato ora con il path originale e funziona, non basta cambiare la stringa di accesso al db?
4
Davide - Pubblicato il 10 04 2007 alle 15:24
si, devi mettere l’indirizzo del tuo database..
Ma non capisco in che occasione di dà l’errore. L’errore che ti da sembra quasi che non trovi una classe, forse hai salvato in un package diverso, o forse devi semplicemente compilare il bean..
5
Massimiliano - Pubblicato il 10 04 2007 alle 15:45
ho cambiato la stringa di connessione, ho inserito le pagine in una webapps pre esistente, ho visto che sul file web.xml non hai segnato nulla, ciò mi lascia sperare che su un file web.xml diverso possa comunque funzionare!
L’errore viene generato appena richiamo una qualsiasi pagina jsp, sull’html non ho problemi…
6
Massimiliano - Pubblicato il 10 04 2007 alle 15:50
:-(
Ho copiato il tuo tutorial, ho modificato il nome del dB e della directory, mi sono accertato che tutto funzioni, poi ho copiato nella directory anche tutti i files dell’altra webapp e tutto sembra funzionare a meraviglia, probabilmente devo aver saltato qualche sostituzione, anche se mi sembra strano, visto che cerco le stringhe all’interno dei files con un programma e non a mano….
Mah!
Cmq grazie e complimenti per il tuo sito, a parte la grafica sobria che mi piace molto, i contenuti sono decisamente interessanti! Ho idea che dovrò spendere parecchie ore in lettura!
Ciao!
7
Davide - Pubblicato il 10 04 2007 alle 16:15
Mi dispiace..
Se può esserti utile: il codice che ho scritto è stato fatto girare con Tomcat 5.5, a volte le versioni possono dare problemi..
Il file xml non c’entra nulla.
L’unica cosa: accertati di aver compilato il file UtentiBean.java
Dall’errore sembra quasi che non trovi la classe..
Ciao, e grazie.
8
Massimiliano - Pubblicato il 10 04 2007 alle 16:31
purtroppo su java sono particolarmente ignorante, non so come compilare una classe :-(
Comunque con il trucco riportato sopra sono riuscito a risolvere, senza strani giri…
Ora devo riuscire a capire un po’ come funziona e qualche rudimento, vorrei implementare la gestione dei profili per poter abilitare o escludere l’accesso a determinate risorse per determinati utenti, ed una procedura per la conferma della creazione degli utenti e l’assegnazione del profilo da parte di un amministratore….
Fosse stato in php o in asp non avrei avuto problemi, ma il j2ee è un po’ ostico per gli autodidatti! :-D
9
emi - Pubblicato il 03 05 2007 alle 17:15
ciao davide a me da errore quando provo a fare la registrazione ho messo tutto in E:\Inetpub\wwwroot\ tramite IIS volevo provare il funzionamento ma non va mi dice che non trovo la pagina registra.jsp e non salva nel database
grazie..
10
Davide - Pubblicato il 03 05 2007 alle 18:27
Beh.. Questa piccola applicazione è stata costruita per funzionare su server Tomcat (ovvero il server di Apache appositamente pensato per contenere applicazioni java).
IIS è il server di Microsoft che notoriamente non è proprio il top per le applicazioni java, ciò non toglie che tu possa farla girare lo stesso. Ma non ti saprei dire bene quale sia il problema nello specifico..
11
emi2 - Pubblicato il 03 05 2007 alle 19:17
come posso allora provare il tuo lavoro…grazie mille ….davide tu sapresti come fare una cosa del genere con il database sempre con java e sql…
avere 1database fatto di tanti professori e ad ogni professore piu materie e ad ogni materia assegno due date di esame e devo prenotarmi cioè
devo fare l’esame di elettronica e scelgo di farlo il 18giugno…come fare un prog in java che mi prenota.
come fare un programma che mi permette di inserire docenti nuovi oppure materie nuove oppure date nuove..
12
emi - Pubblicato il 03 05 2007 alle 19:22
DAVIDE CONTATTAMI IN PRIVATO DEVO CHIEDERTI DELLE COSE IMPORTANTI X LA MIA TESI..
sixwac46@tiscali.it
13
Davide - Pubblicato il 03 05 2007 alle 19:29
Per provare la mia applicazione devi installare tomcat e seguire alla regola i passi descritti nell’articolo. Caricare i files nella cartella ‘webapp’ di tomcat, creare il database, impostare i permessi..
Il link per scaricare Tomcat è questo: http://tomcat.apache.org/
Ti consiglio di prendere la versione 5.5 perchè sulla 6 ancora non l’ho provato.
Per fare ciò che dici tu, puoi partire dal codice che vedi e modificarlo. Dovrai creare altre tabelle e altre query. Tieni conto però che questi sono pagine jsp e java-beans, ovvero funzionano tramite browser. Se vuoi un programma autonomo in java, che tu apri come fosse un qualsiasi programma di windows, devi fare tutt’altro.
14
emi - Pubblicato il 03 05 2007 alle 19:36
davide tu saresti in grado di fare un programma che funziona tramite browser di quel tipo….
cioè come avviene con l’universita hai visto quando ti colleghi al sito per prenotare gli esami..ecco io dovrei cercare di fare quello x la tesi….
sapendo ke sei giovane spero in un aiuto….
dove hai imparato tutto questo???
da noi (ing.x le tlc) nn si fa niente di questo….solo un po di c++ csharp asp
15
Davide - Pubblicato il 05 05 2007 alle 01:51
Io ho imparato ad usare java con il corso di tecnologie e applicazioni web. Se vuoi un riferimento, qui puoi trovare un’interessante raccolta di materiale didattico: http://polaris.ing.unimo.it/didattica/curriculum/marco/MAIN/didattica/TECN_APP_WEB/corsoWeb.html
Purtroppo però non ho tanto tempo in questo periodo, prova a dare un occhio qui.
16
Fabrizio - Pubblicato il 30 05 2007 alle 14:50
ma se uno non volesse usare il database tramite access, e si volesso utilizzare il databse tramite easyphp, come funzionerebbe il procedimento di caricamento del database?
grazie…cmq mi è stato molto utile il tuo tutorial
17
Antonella - Pubblicato il 11 09 2007 alle 09:54
Ciao Caro Davide.
Purtroppo io continuo ad avere gli stessi problemi di Massimiliano, ossia “The value for the useBean class attribute beans.User is invalid” (la classe User corrisponde alla Tua UtentiBean). Ho sistemato tutti i file nelle giuste cartelle, ed ho compilato la classe java, come Tu stesso suggerivi, ma il problema permane. Non so come venirne fuori. Ho modificato anche il file web.xml, ma non ho ottenuto alcun cambiamento.
Spero Tu possa darmi un aiuto dal momento che ho urgente bisogno di implementare una pagina di login. Ti ringrazio anticipatamente. Antonella
P.S. La versione di apache tomcat che uso è la 6.0.14
18
Eraldo - Pubblicato il 15 02 2008 alle 20:52
Ciao e complimenti per la guida!
Io ho lo stesso problema di Antonella ed ho anche io Tomcat 6.0.14
Sto letteralmente impazzendo e cercando qua e la ho notato che sono in tanti nella stessa situazione.
Sapresti aiutarmi?
19
Luca - Pubblicato il 26 02 2008 alle 13:19
Ciao Davide, ho un problema:
ogni volta che compilo i campi della pagina di registrazione, mi dà sempre il seguente errore:
ORA-00911: carattere non valido
Eppure non credo i utilizzare caratteri non validi…!!!
Sapresti darmi 1 indicazione?
Grazie
20
Luca - Pubblicato il 26 02 2008 alle 14:26
Ti comunico che utilizzo un database ORACLE, per cui ho settato il driver oracle e la connessione al database. Credo ci siano problemi riguardo ai campi…, sono tutti VARCHAR2, potrebbe essere questo il problema?
nome: Varchar2
cognome: Varchar2
username: Varchar2
password: Varchar2
email: Varchar2
hobby: Varchar2
21
Davide - Pubblicato il 26 02 2008 alle 20:02
ma il problema te lo restituisce il database o la pagina jsp?
Forse potrebbe dare qualche conflitto il varchar2 in effetti, però prima dovrei capire qual’è la “fonte”..