Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 17 su 17
  1. #11
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    9
    Durante il fine settimana ho continuato a lavorarci su.
    Ho deciso di cambiare il metodo getOperatore della classe OperatoreDAO:
    codice:
    	public boolean getOperatore(String username, String password, String ruolo)
    	{
    		int res;
    		String query = "SELECT * FROM operatore WHERE username = '"+username+"'AND password = '"+password+"' AND ruolo = '"+ruolo+"'"; 
    		Vector<Object> v =db.executeSelect(query, "Count");
    		res = (Integer)v.get(0);
    		if(res>0)
    			return true;
    		else
    			return false;
    		
    	}
    Quindi mi da true se trova una corrispondenza tra username, password e ruoli inseriti nel form. Può essere una soluzione alternativa?
    Ho modificato anche la servlet Login.java. Ho incluso anche gli attributi della sessione.
    codice:
    package myServlets;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import myBeans.*;
    
    
    /**
     * Servlet implementation class Login
     */
    @WebServlet("/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)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		
    		performTask(request, response);
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		
    		performTask(request, response);
    		
    	}
    	
    	public void performTask (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
    		
    		String ruolo = request.getParameter("ruolo");
    		String username = request.getParameter("username");
    		String password = request.getParameter("password");
    		String jspPage="";
    		OperatoreDAO o = new OperatoreDAO();
    		HttpSession session = request.getSession(true);
    		session.setAttribute("Ruolo", ruolo);
    		session.setAttribute("Username", username);
    		try{
    			
    			if (o.getOperatore(username, password, ruolo)){
    				
    				if ( ruolo.equals("Amministratore") )
    				{
    					jspPage = "jsp/adminhome.jsp";
    				}
    				else if ( ruolo.equals("Impiegato") )
    				{
    					jspPage = "jsp/emphome.jsp";
    				}
    			
    			}
    			else 
    			{
    				jspPage = "jsp/errore.jsp";
    			}
    		       request.getRequestDispatcher( jspPage ).forward(request,response);
    			}
    			catch(Throwable theException)
    			{
    				theException.printStackTrace();
    			}
    	    }
    
    	}
    A questo punto riavviando tomcat, e provando a fare il login, sia con le credenziali corrette che con quelle errate, non mi da errore su un browser, ma mi rimanda ad una pagina bianca. Sulla console mi da ancora un ArrayIndexOutOfBoundsException.

  2. #12
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    9
    Durante il fine settimana ho continuato a lavorarci su.
    Ho deciso di cambiare il metodo getOperatore della classe OperatoreDAO:
    codice:
    	public boolean getOperatore(String username, String password, String ruolo)
    	{
    		int res;
    		String query = "SELECT * FROM operatore WHERE username = '"+username+"'AND password = '"+password+"' AND ruolo = '"+ruolo+"'"; 
    		Vector<Object> v =db.executeSelect(query, "Count");
    		res = (Integer)v.get(0);
    		if(res>0)
    			return true;
    		else
    			return false;
    		
    	}
    Quindi mi da true se trova una corrispondenza tra username, password e ruoli inseriti nel form. Può essere una soluzione alternativa?
    Ho modificato anche la servlet Login.java. Ho incluso anche gli attributi della sessione.
    codice:
    package myServlets;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import myBeans.*;
    
    
    /**
     * Servlet implementation class Login
     */
    @WebServlet("/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)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		
    		performTask(request, response);
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		
    		performTask(request, response);
    		
    	}
    	
    	public void performTask (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
    		
    		String ruolo = request.getParameter("ruolo");
    		String username = request.getParameter("username");
    		String password = request.getParameter("password");
    		String jspPage="";
    		OperatoreDAO o = new OperatoreDAO();
    		HttpSession session = request.getSession(true);
    		session.setAttribute("Ruolo", ruolo);
    		session.setAttribute("Username", username);
    		try{
    			
    			if (o.getOperatore(username, password, ruolo)){
    				
    				if ( ruolo.equals("Amministratore") )
    				{
    					jspPage = "jsp/adminhome.jsp";
    				}
    				else if ( ruolo.equals("Impiegato") )
    				{
    					jspPage = "jsp/emphome.jsp";
    				}
    			
    			}
    			else 
    			{
    				jspPage = "jsp/errore.jsp";
    			}
    		       request.getRequestDispatcher( jspPage ).forward(request,response);
    			}
    			catch(Throwable theException)
    			{
    				theException.printStackTrace();
    			}
    	    }
    
    	}
    A questo punto riavviando tomcat, e provando a fare il login, sia con le credenziali corrette che con quelle errate, non mi da errore sul browser, ma mi rimanda ad una pagina bianca. Sulla console mi da ancora un ArrayIndexOutOfBoundsException.

  3. #13
    Sulla console mi da ancora un ArrayIndexOutOfBoundsException.
    Pultroppo non ho la sfera di vetro....
    In che metodo / riga ti dà l'errore....
    Dal codice postato dovrebbe essere dentro "executeSelect" che però non so come hai modificato...

  4. #14
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    9
    si scusa hai ragione, sempre nel metodo getOperatore. L'ho modificato sostituendo il tipo restituito in un booleano. Dovrebbe ritornare true quando il vettore viene riempito. Però a quanto pare questo non succede se mi da l'eccezione sull'array.

  5. #15
    Originariamente inviato da francesco.muia
    La documentazione di java ti è molto utile metodo isEmpty
    ti basta richiamare sullo oggetto vector (priva di accedervi v.get(0)) per sapere se il vettore è vuoto oppure no.

    Cmq, mi ripeto, ma con queste premesse mi sa che il progetto non lo porti a casa.

    1)Mi auto quoto perchè il primo problema rimane cmq, cioè accedi al vettore senza sapere se questo contiene risultati oppure no....
    2)se non hai modificato executeSelect non c'è verso che quel metodo ti ritorni un intero.
    3)La query con quei parametri non tirerà mai su nulla tranne se il ruolo è vuoto, in quanto continui a prendere un parametro dalla request che non esiste (se la pagina jsp non è cambiata) String ruolo = request.getParameter("ruolo"); Ecco perchè adesso scoppia sia in un caso che nell'altro.
    4)La programmazione non si fa per tentativi. Uno dovrebbe sapere dove mettere le mani....

  6. #16
    Utente di HTML.it
    Registrato dal
    Aug 2012
    Messaggi
    9
    Si capisco, non è decisamente l'approccio migliore.
    Comunque sul form avevo già aggiunto il ruolo, forse ho dimenticato di scriverlo qui, ma fin lì ci ero arrivato. ^_^

    Comunque nonostante il mio approccio da newbie sono riuscito finalmente a risolvere.
    Ho rimodificato il metodo getOperatore, tornando in pratica a quello utilizzato precedentemente, ma aggiungendo come da te suggerito il metodo isEmpty.
    codice:
    	public Operatore getOperatore(String username, String password, String ruolo)
    	{
    		Operatore res = new Operatore();
    		String query = "SELECT * FROM operatore WHERE username = '"+username+"'AND password = '"+password+"' AND ruolo ='"+ruolo+"'"; 
    		Vector<Object> v =db.executeSelect(query, "Operatore");
    		if(!v.isEmpty()){
    		res = (Operatore)v.get(0);
    		}
    		return res;
    	}
    per quanto riguarda la servlet, l'ho praticamente reimpostata come prima delle modifiche fatte nel mio ultimo post.
    codice:
    public void performTask (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
    		
    		String username = request.getParameter("username");
    		String ruolo = request.getParameter("ruolo");
    		String jspPage="";
    		OperatoreDAO d = new OperatoreDAO();
    		Operatore o = d.getOperatore(request.getParameter("username"), request.getParameter("password"), request.getParameter("ruolo"));
    		HttpSession session = request.getSession(true);
    		session.setAttribute("Ruolo", ruolo);
    		session.setAttribute("Username", username);
    		try{
    			
    			String categoria = request.getParameter("ruolo");
    			if (o.getRuolo().equals(request.getParameter("ruolo")))
    			{
    				
    				if ( categoria.equals("Amministratore") )
    				{
    					jspPage = "jsp/adminhome.jsp";
    				}
    				else if ( categoria.equals("Impiegato") )
    				{
    					jspPage = "jsp/emphome.jsp";
    				}
    			
    			}
    			else 
    			{
    				jspPage = "jsp/errore.jsp";
    			}
    		       request.getRequestDispatcher( jspPage ).forward(request,response);
    			}
    			catch(Throwable theException)
    			{
    				theException.printStackTrace();
    			}
    	    }
    Ora sembra andare tutto perfettamente. Se inserisco le credenziali corrette mi mostra la pagina corrispondente al ruolo dell'operatore. Con credenziali sbagliate mi rimanda alla pagina di errore.

    Naturalmente questo piccolo "successo" non mi esenta dall'obbligo di rivedere la mia preparazione, come da te più volte sottolineato, sennò di strada ne farò poca. Volevo ringraziarti per la tua cortesia e pazienza.
    Spero di aver risolto definitivamente.

  7. #17
    Prego, siamo qui per darci una mano.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.