Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [JSP] Login page

    Ciao, sto cercando di realizzare una piccola pagina di login in jsp. Tuttavia mi da il seguente errore:
    org.apache.jasper.JasperException: An exception occurred processing JSP page /logpage.jsp at line 40

    37: {
    38: String username=resultset.getString(1);
    39: String password=resultset.getString(2);
    40: if(user.equals(username) && pass.equals(password))
    41: {%>
    42: <jsp:forward page="success.html" />
    43: <%}


    Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handle JspException(JspServletWrapper.java:567)
    org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:471)
    org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:389)
    org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:722)
    root cause

    java.lang.NullPointerException
    org.apache.jsp.logpage_jsp._jspService(logpage_jsp .java:104)
    org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:722)
    org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:433)
    org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:389)
    org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:333)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:722)

    la pagina la posto qui di seguito:
    codice:
     
    <%@ page language ="java" import="java.sql.*" %>
    <%! String DRIVER = "com.mysql.jdbc.Driver";
    String DB_URL = "jdbc:mysql://localhost:3306/wine";
    %>
    <html>
    <head>
    </head>
    <body bgcolor="pink">
    	<form name="f1" action="login.jsp" method="post">
    	<table>
    	<tr>
    		<td>User Name</td><td><input type="text" name="user" ></td>
    		</tr>
    		<td>Password</td>
    		<td><input type="password" name="passw"></td>
    	</tr>
    	<tr>
    	<td></td>
    	<td><input type="submit" name="b1" value="LogIn"></td>
    	</tr>
    	</table>
    <%
    String user=request.getParameter("user");
    String pass=request.getParameter("passw");
    
    // Carico il driver.
    Class.forName(DRIVER).newInstance();
    Connection connection = null;
    try { 
    	// Apro la connesione verso il database.
        connection =DriverManager.getConnection(DB_URL,"root","dbpass");
    	// Ottengo lo Statement per interagire con il database.
    	Statement statement = connection.createStatement();
        // Interrogo il DBMS mediante una query SQL.
    	ResultSet resultset = statement.executeQuery("SELECT Email, Password FROM Utente");
        while(resultset.next())
        {
            String username=resultset.getString(1);
            String password=resultset.getString(2);
            if(user.equals(username) && pass.equals(password))
            {%>
                <jsp:forward page="success.html" />
          <%}
            else out.println("Login Failed,Please try Again");
          %><%
        }
    }
    catch (SQLException e) 
    {
    // In caso di errore...
    %>Eccezione: <%= e.toString() %><%
    } 
    finally
    {
    	if (connection != null) connection.close();
    }
    %>
    	</form>
    </body>
    </html>

  2. #2
    Semplice,
    codice:
    String user=request.getParameter("user");
    String pass=request.getParameter("passw");
    Questi due oggetti non esistono la prima volta che visualizzi la pagina, quindi quando vai a fare
    codice:
     if(user.equals(username) && pass.equals(password))
            {%>
                <jsp:forward page="success.html" />
          <%}
            else out.println("Login Failed,Please try Again");
    Ti viene sollevata un NullPointerException in quanto l'oggetto User è nullo.
    un possibile soluzione sarebbe quella di girare l'if in modo da richiamare l'equals sull'oggetto username
    codice:
     if(username.equals(user) && password.equals(pass))
            {%>
                <jsp:forward page="success.html" />
          <%}
            else out.println("Login Failed,Please try Again");
    Mi sono accorto anche di ulteriore errore in quanto il form invia la richiesta alla pagina login.jsp, ma dallo stacktrace la pagina si chiama logpage.jsp ovviamente se vuoi che la cosa funzione il form deve inviare la richiesta alla medesima pagina
    Ciao

  3. #3
    Ok grazie mille! Si quell' action="logpage" era sbagliato e non doveva esserci. Ora ho corretto il codice così:
    codice:
    <%@ page language ="java" import="java.sql.*" %>
    <%! String DRIVER = "com.mysql.jdbc.Driver";
    String DB_URL = "jdbc:mysql://localhost:3306/wine";
    %>
    <html>
    <head>
    </head>
    <body bgcolor="pink">
    	<form name="f1" method="post">
    	<table>
    	<tr>
    		<td>User Name</td><td><input type="text" name="user" ></td>
    		</tr>
    		<td>Password</td>
    		<td><input type="password" name="passw"></td>
    	</tr>
    	<tr>
    	<td></td>
    	<td><input type="submit" name="b1" value="LogIn"></td>
    	</tr>
    	</table>
    <%
    String user=request.getParameter("user");
    String pass=request.getParameter("passw");
    
    // Carico il driver.
    Class.forName(DRIVER).newInstance();
    Connection connection = null;
    try { 
    	// Apro la connesione verso il database.
        connection =DriverManager.getConnection(DB_URL,"root","dbpass");
    	// Ottengo lo Statement per interagire con il database.
    	Statement statement = connection.createStatement();
        // Interrogo il DBMS mediante una query SQL.
    	ResultSet resultset = statement.executeQuery("SELECT Email, Password FROM Utente");
        while(resultset.next())
        {
            String username=resultset.getString(1);
            String password=resultset.getString(2);
            if(username.equals(user) && password.equals(pass))
            {%>
                <jsp:forward page="success.html" />
          <%}
            else out.println("Login Failed,Please try Again");
          %><%
        }
    }
    catch (SQLException e) 
    {
    // In caso di errore...
    %>Eccezione: <%= e.toString() %><%
    } 
    finally
    {
    	if (connection != null) connection.close();
    }
    %>
    	</form>
    </body>
    </html>
    La pagina viene visualizzata e funziona tutto, c'è solo un problema e cioè che quando mi stampa il login, sotto i campi da inserire viene stampato questo:
    Login Failed,Please try Again Login Failed,Please try Again Login Failed,Please try Again Login Failed,Please try Again Login Failed,Please try Again
    Penso che sia dovuto al fatto che il codice jsp parte in automatico, mentre forse sarebbe meglio che venisse eseguito dopo l'invio del form...come posso fare?

  4. #4
    Be basterebbe controllare che username e password non siano vuoti
    codice:
    <%@ page language ="java" import="java.sql.*" %>
    <%! String DRIVER = "com.mysql.jdbc.Driver";
    String DB_URL = "jdbc:mysql://localhost:3306/wine";
    %>
    <html>
    <head>
    </head>
    <body bgcolor="pink">
    	<form name="f1" method="post">
    	<table>
    	<tr>
    		<td>User Name</td><td><input type="text" name="user" ></td>
    		</tr>
    		<td>Password</td>
    		<td><input type="password" name="passw"></td>
    	</tr>
    	<tr>
    	<td></td>
    	<td><input type="submit" name="b1" value="LogIn"></td>
    	</tr>
    	</table>
    <%
    String user=request.getParameter();
    String pass=request.getParameter("passw");
    if(request.getParameterMap().containsKey("user") && request.getParameterMap().containsKey("passw") && !user.trim().isEmpty() && !pass.trim().isEmpty()){
    // Carico il driver.
    Class.forName(DRIVER).newInstance();
    Connection connection = null;
    try { 
    	// Apro la connesione verso il database.
        connection =DriverManager.getConnection(DB_URL,"root","dbpass");
    	// Ottengo lo Statement per interagire con il database.
    	Statement statement = connection.createStatement();
        // Interrogo il DBMS mediante una query SQL.
    	ResultSet resultset = statement.executeQuery("SELECT Email, Password FROM Utente");
        while(resultset.next())
        {
            String username=resultset.getString(1);
            String password=resultset.getString(2);
            if(username.equals(user) && password.equals(pass))
            {%>
                <jsp:forward page="success.html" />
          <%}
            else out.println("Login Failed,Please try Again");
          %><%
        }
    }
    catch (SQLException e) 
    {
    // In caso di errore...
    %>Eccezione: <%= e.toString() %><%
    } 
    finally
    {
    	if (connection != null) connection.close();
    }
    }
    %>
    	</form>
    </body>
    </html>
    Anche se personalmente non amo tale approccio, sarebbe meglio che il form venga inviato ad una servlet che faccia tutti i controlli del caso

  5. #5
    Ah ok perfetto, scusa ma sono alle prime armi con le jsp e sto imparando. Io con javascript (so che non c'entra molto ma magari è simile l'approccio) creavo una pagina a parte con tutto e solo il codice javascript che veniva richiamata al submit del form. E' possibile fare lo stesso con jsp? Cioè potrei ad esempio fare in modo che la pagina con solo il form e solo l'html sia login.html e poi il form abbia una action="log.jsp" che richiama la pagina jsp dove metterei solo il codice jsp che prima avevo misto con l'html. E' possibile?

  6. #6
    Certo che è possibile farlo, le pagine jsp è buona norma che non contengano codice se non quello che serve per la presentazione dei dati. Quello che puoi fare è creare una servlet (e come se fossi una jsp) che risponda ad un determinato URL. Qui il tuorial dell'oracle che spiega tutto.

  7. #7

    [JSP] Problema cookie

    ciao sto cercando di fare una pagina di login in jsp che utilizzi i cookie.
    Questo è il pezzo di codice interessato:
    codice:
     if(username.equals(user) && password.equals(pass))
            {
    			//verifico che sia abilitato come admin
    			if(admin.equals("Yes"))
    			{
    			Cookie mioCookie = new Cookie ("Admin", "logged");
    			mioCookie.setPath("/");
    			mioCookie.setMaxAge(60000);
    			mioCookie.setSecure(false);
    			response.addCookie(mioCookie);
    			//Thread.sleep(3000);
    			%>
                <jsp:forward page="success.jsp" />
    		  <%}
          }
    Quando il login avviene si viene rediretti alla pagina success.jsp che mostra il suo contenuto SOLO SE il cookie admin è stato impostato.
    Il problema è che quando mi redirige alla pagina success.jspn la prima volta che faccio il login mi dice errore come se il cookie non esistesse ma se faccio "indietro" e mi riloggo una seconda volta me lo prende e funziona tutto bene. Come mai?
    Ecco un pezzo di codice della pagina success.jsp:
    codice:
    <body>
    <%
    // definisce un array di cookie per leggere quelli dell'utente
    Cookie[] cookiesUtente = request.getCookies();
    
    // indice per la gestione del ciclo
    int indice = 0;
    
    while (indice < cookiesUtente.length) 
    {
      // esegue il ciclo fino a quando ci sono elementi in cookieUtente
      if (cookiesUtente[indice].getName().equals("Admin")) break;
      
      indice++; 
      // se trova un cookie con il nome che stiamo cercando esce dal ciclo
    }// while 
    
    if (indice < cookiesUtente.length) 
    {  // il cookie è stato trovato

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Originariamente inviato da Malo88
    ciao sto cercando di fare una pagina di login in jsp che utilizzi i cookie.
    Ho unito il thread che hai aperto (nell'area generale, non corretta) a quello che avevi precedentemente inaugurato, dato che i problemi si possono ritenere strettamente correlati.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.