Tutorial jsp: gestione utenti con database access

Pubblicato da Davide, Aggiornato mercoledì 2 luglio 2008 21 Commenti »

Questo articolo e' stato scritto piu' di 6 mesi fa.. In teoria non cambia nulla, sed panta rei: se trovi link o informazioni datate segnalalo pure. :)

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.

Vuoi essere il primo a lasciare un commento per questo articolo? Utilizza il modulo sotto..

Lascia il tuo commento

 

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

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi