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:

  1. registrazione.html
  2. registra.jsp
  3. login.html
  4. login.jsp
  5. 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.

  1. 1

    bello! grazie, mi è stato molto utile…

  2. 2

    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. 3

    ho provato ora con il path originale e funziona, non basta cambiare la stringa di accesso al db?

  4. 4

    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. 5

    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. 6

    :-(

    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. 7

    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. 8

    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. 9

    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. 10

    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. 11

    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. 12

    DAVIDE CONTATTAMI IN PRIVATO DEVO CHIEDERTI DELLE COSE IMPORTANTI X LA MIA TESI..

    sixwac46@tiscali.it

  13. 13

    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. 14

    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. 15

    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. 16

    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. 17

    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. 18

    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. 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. 20

    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. 21

    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”..

Lascia il tuo commento

 

http://livregratis.fr/ - http://club-ebook.fr/