1 Gestione dell’utente connesso in sessione con Java Server Pages, Java Beans, Servlet Controllo dell’utente connesso al sito tramite JSP, Java Beans e Servlet. Ciò che ci proponiamo di fare è l’accesso ad un sito web con autenticazione. La nostra applicazione web comprende 2 pagine jsp index.jsp (pagina iniziale) e home.jsp pagina di inizio attività una volta loggati, una servlet per il controllo dei dati di login e una bean per la gestione dei dati utente. index.jsp (pagina con form per dati di login utente) <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Login Applicazione</title> Inseriamo eventuali riferimenti a file javascript e css </head> <body> <p>User's Login</p> Richiamo alla servlet (Login.java) che si occupa del controllo sui dati per la login. desvin at VIDESOFTWARE … since 1989 … http://desvino.altervista.org/index.php 2 Gestione dell’utente connesso in sessione con Java Server Pages, Java Beans, Servlet <form method="get" action="<%request.getContextPath();%>Login"> o anche: <form method="post" action="Login" name=”myForm”> <table> <tr> <td>user id</td> <td><input type="text" name="userid" value=""></td> </tr> <tr> <td>password</td> <td><input type="password" name="pwd" value=""></td> </tr> <tr> <td colspan="2" align="right"><input type="submit" value="entra"> <input type="reset" value="cancella"></td> </tr> </table> </form> Eventuale gestione dell’errore in caso di ritorno dalla servlet con errore. In questo caso l’errore viene settato come attributo della sessione dalla servlet. <% String error = (String) session.getAttribute("error"); if (error != null) { %> Errore: <%= error %> <% } %> <% session.removeAttribute("error"); </body> </html> Servlet Login.java Classe per la gestione della connessione al db import it.miopacchetto.db.connection.DBConnection; Java Bean per I dati dell’utente connesso import it.miopacchetto.bean.UtenteConnesso; /** * Servlet implementation class Login */ public class Login extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public Login() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) desvin at VIDESOFTWARE … since 1989 … http://desvino.altervista.org/index.php 3 Gestione dell’utente connesso in sessione con Java Server Pages, Java Beans, Servlet */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { execute(request,response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { execute(request,response); } protected void execute(HttpServletRequest request, HttpServletResponse response) { String userid = null; String pwd = null; Legge I dati inseriti dall’utente nella request userid = request.getParameter("userid"); pwd = request.getParameter("pwd"); Gestione dell’errore in caso di userid o password inseriti nulli. L’utente viene rediretto verso il form iniziale su index.jsp. L’errore viene settato come attributo della sessione in modo da poterlo leggere in index.jsp. if(userid == null || userid.equalsIgnoreCase("null") || userid.equalsIgnoreCase("")) { request.getSession().setAttribute("error", "user id obbligatorio"); response.sendRedirect("index.jsp"); return; } if(pwd == null || pwd.equalsIgnoreCase("null") || pwd.equalsIgnoreCase("")) { request.getSession().setAttribute("error", "password obbligatoria"); response.sendRedirect("index.jsp"); return; } Ottenniamo la connessione al db, in questo punto o in maniera più corretta utilizzando una servlet che parta al caricamento dell’apllicazione e istanzi un oggetto che gestisce la connessione (da java.mysql.*). Supponiamo di avere l’oggetto connessione istanziato da un’altra servlet e settato come attributo di contesto. All’interno di tale servlet dovremmo avere un codice simile: public void init() { //ottiene la connessione al DB per tutta l'applicazione // e la setta come attributo del contesto DBConnection conn = new DBConnection(); conn.connect(); this.getServletContext().setAttribute("oConn", conn); } Connect() metodo della classe custom DBConnection conterrà il codice per effettuare la connessione al db String url = "jdbc:mysql://256.256.256.256/nomedb?autoreconnect=true"; String username = ""; String password = ""; String driverName = "com.mysql.jdbc.Driver"; Class.forName(driverName); desvin at VIDESOFTWARE … since 1989 … http://desvino.altervista.org/index.php 4 Gestione dell’utente connesso in sessione con Java Server Pages, Java Beans, Servlet connection = DriverManager.getConnection(url, username, password); Torniamo alla servlet Login… a questo punto otteniamo la connessione DBConnection oDBconnection = DBConnection)getServletContext().getAttribute("oConn"); Connection connessione = oDBconnection.getConnection(); try { Selezioniamo i dati utente dalla apposite tabella DB Statement stmt = connessione.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM TABELLA_LOGIN WHERE COD_USER = '"+userid+"' AND PWD = '"+pwd+"'"); Utilizziamo il bean UtenteConnesso per memorizzare i dati dell’utente. if(rs.next()) { UtenteConnesso oUserCon = new UtenteConnesso(); oUserCon.setNome(rs.getString("NOME")); oUserCon.setCognome(rs.getString("COGNOME")); //utente settato come attributo della sessione request.getSession().setAttribute("utenteConnesso", oUserCon); //setto il BEAN come attributo request.getSession().setAttribute("oUserCon", oUserCon); login ok quindi redirect automativo verso la home.jsp response.sendRedirect("home.jsp"); oppure getRequestDispatcher invece della sendRedirect request.setAttribute("oUserCon", oUserCon); try{ request.getRequestDispatcher("/home.jsp").include(request,response); }catch(ServletException e) {} } else { login fallita redirect a index.jsp request.getSession().setAttribute("error", "login error"); response.sendRedirect("index.jsp");} } catch (SQLException e) { out.println("errore in lettura dati");} } } Home.jsp – leggiamo I dati relativi all’utente connesso dal bean <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <jsp:useBean id="oUserCon" class="it.miopacchetto.bean.UtenteConnesso" scope="session" /> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Home</title> desvin at VIDESOFTWARE … since 1989 … http://desvino.altervista.org/index.php 5 Gestione dell’utente connesso in sessione con Java Server Pages, Java Beans, Servlet </head> <body> <br> Utente connesso:<br> <jsp:getProperty name="oUserCon" property="nome" /> <jsp:getProperty name="oUserCon" property="cognome" /> … … Java Bean – UtenteConnesso, gestisce le info attraverso i metodi set e get package it.miopacchetto.bean; import java.io.Serializable; public class UtenteConnesso implements Serializable{ private String nome; private String cognome; private String codUser; public UtenteConnesso() { super(); } public UtenteConnesso(String nome, String cognome) { super(); this.nome = nome; this.cognome = cognome; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getCognome() { return cognome; } public void setCognome(String cognome) { this.cognome = cognome; } } All’interno del file web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>webImpiegati</display-name> <welcome-file-list> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> desvin at VIDESOFTWARE … since 1989 … http://desvino.altervista.org/index.php 6 Gestione dell’utente connesso in sessione con Java Server Pages, Java Beans, Servlet <description>User Login</description> <display-name>Login</display-name> <servlet-name>Login</servlet-name> <servlet-class>it.miopacchetto.web.servlet.Login</servlet-class> </servlet> <servlet-mapping> <servlet-name>Login</servlet-name> <url-pattern>/Login</url-pattern> </servlet-mapping> <servlet> Inizializzatore è la servlet che ottiene la connessione al db <servlet> <description></description> <display-name>Inizializzatore</display-name> <servlet-name>Inizializzatore</servlet-name> <servletclass>it.energent.corsojava.impiegati.web.servlet.Inizializzatore</servletclass> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Inizializzatore</servlet-name> <url-pattern>/Inizializzatore</url-pattern> </servlet-mapping> </web-app> Organizzazione vista dal project explorer di Eclipse desvin at VIDESOFTWARE … since 1989 … http://desvino.altervista.org/index.php 7 Gestione dell’utente connesso in sessione con Java Server Pages, Java Beans, Servlet Nota finale - strumenti utilizzati: Web Server: Apache Tomcat 6 Editor: Eclispe Ganimede Version: 3.4.1 desvin at VIDESOFTWARE HOUSE ... since 1989 desvin at VIDESOFTWARE … since 1989 … http://desvino.altervista.org/index.php