Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    146

    [JAVA/JSP] java.lang.NullPointerException, oggetto session

    salve a tutti,

    ho scritto il seguente codice nella pagina login.jsp

    codice:
    <%
            u.setUsername(request.getParameter("Username"));
            u.setPassword(request.getParameter("Password"));
            session.setAttribute( "Username", request.getParameter("Username") );
            out.println(u.getUsername());
            out.println(u.getPassword());
            if(u.check() == true)
                {
                    out.println(u.check());
                    session.setAttribute( "esito", "true");
        %>        
                    <jsp:forward page="index.jsp"></jsp:forward>
          <%         }
               else
                   {
                       out.println(u.check());
                       session.setAttribute( "esito", "false");
          %>
                  <jsp:forward page="index.html"></jsp:forward>
        <%     } 
        %>
    che verifica che i dati inseriti (usr e pass) siano presenti nel Db e in tal caso pone il parametro esito = true altrimenti esito = false nell'oggetto session.

    L'attributo esito lo utilizzo nelle varie pagine jsp per verificare che l'utente abbia i permessi per visualizzarela pagina.

    Se consideriamo i casi in cui un utente possa tentare di accedere ad una pagina sono 3:

    1. utente che ha effettuato il login (esito = true salvato nel'oggetto session)

    2. utente che ha tentato di effettuarlo inserendo valori casuali (esito = false)

    3. utente che tenta direttamente di accedere alla pagina senza nemmeno tentare il login. In questo caso l'attributo esito è null(anzi non esiste proprio )poichè non viene del tutto creato. E' proprio in questo caso che ottengo l'errore.

    Come posso risolvere?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    146
    posto anche il codice della pagina jsp.

    codice:
    <%    
        String esito = (String) session.getAttribute("esito");
        if (esito.equals("null"))
        out.println("11111null");
        if (esito.equals("true"))
        out.println("1111true");
        if (esito.equals("false"))
        out.println("1111false");
        //<jsp:forward page="login_error1.jsp"></jsp:forward>    
    %>

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    146
    ho provato anche con isnew() e getId..

    l'unica soluzione che mi viene in mentre è di avere la homepage .jsp (attualmente è.html)

    In questo modo potrei settare il valore esito pari a "sconosciuto" che starebbe ad indicare che il login non è stato eseguito.

    Se invece l'utente cerca di eseguire il login con successo o meno il valore dell'ettributo "esito" sarebbe rispettivamente true o false...

    ma forse nemmeno questa soluzione funzionerebbe. Perchè se un malintenzionato tenterebbe di accedere alla pagina x.jsp senza passare per la homepage avrebbe lo stesso l'errore nullpointer...boh, secondo me la soluzione deve essere banalissima, sono io che mi sto incartando

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    146
    è chiaro qual è il problema?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    146
    cosi non ottengo piu quell'errore ma non sembra funzionare:

    codice:
    <%    
        //SE esito E' NULL rimanda alla pagina login_error1.jsp
        String esito = String.valueOf(session.getAttribute("esito"));
        if (esito.equals("null"))
        out.println("<jsp:forward page=\"login_error1.jsp\"></jsp:forward>");    
        //SE esito è false rimanda alla pagina login_error.jsp
        if (esito.equals("false"))
        out.println("<jsp:forward page=\"login_error.jsp\"></jsp:forward>");
        %>

  6. #6
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Voto per l'opzione di te che ti stai incartando

    E' sbagliato il controllo sul null:

    codice:
    String esito = (String) session.getAttribute("esito");
    
    if (esito.equals("null"))
    Così stai verificando se la stringa esito - che leggi dalla sessione - è uguale, carattere per carattere, alla stringa "null" (ossia "enne-u-elle-elle").
    Il controllo corretto è:

    codice:
    if (esito == null)
    in cui verifichi se l'oggetto di tipo String esito è nullo oppure è un oggetto "valido"

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    146
    e l'ultima soluzione come ti sembra? a me sembra buona ma tutto quel codice è come se non ci fosse, mi carica tranquillamente la pagina indifferentemente dal fatto che io abbia effettuato il login o meno

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    146
    credo di aver risolto, mancavano le parentesi negli if , però non capisco, la porzione di codice nell'if è solo una riga, non erano obbligatorie le parentesi..

  9. #9
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    L'istruzione "out.println" si occupa di scrivere sul buffer di output i dati che saranno inviati al client (ad esempio, un browser). Solitamente, però, nelle JSP si evita di utilizzarla esplicitamente: rende il codice più difficilmente leggibile e manutenibile, ed è uno dei motivi per cui per i compiti di presentation si preferisce scrivere una pagina JSP piuttosto che una servlet. E' il servlet container che, durante l'operazione di "traduzione", andrà a inserire dove opportuno le istruzioni necessarie. Hai mai provato sotto Tomcat a dare un'occhiata alla cartella "work"?

    Detto ciò, nel codice che hai postato le "out.println" sono proprio sbagliate: le action JSP (tra cui la forward) non sono eseguite dal client, ma dal server. Non devi quindi trattarle come tag HTML da restituirgli.
    Il tuo codice dovrebbe essere quindi scritto in questa forma:
    codice:
    <%
      String esito = (String)session.getAttribute("esito");
    
    //SE esito E' NULL rimanda alla pagina login_error1.jsp
      if (esito == null)
      {
    %>
    <jsp:forward page="login_error1.jsp"></jsp:forward>
    <%
      }
    //SE esito è false rimanda alla pagina login_error.jsp
      else if (esito.equals("false"))
      {
    %>
    <jsp:forward page="login_error.jsp"></jsp:forward>
    <%
      }
    %>

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    146
    infatti ho fatto cosi e ha funzionato.

    Scusa ma io ho scritto solo pagine jsp.

    Questo è quello che ho fatto:

    index.html form per il login
    login.jsp raccoglie i dati dal form e chiama un metodo del bean Utenti

    metodo check nel bean Utenti che genera la stringa SQL da inviare ad un metodo presente in una classe chiamata DB.java che si occupa solo di connettersi al DB e effettuare le query.

    Questo codice invece:



    codice:
    <%
      String esito = (String)session.getAttribute("esito");
    
    //SE esito E' NULL rimanda alla pagina login_error1.jsp
      if (esito == null)
      {
    %>
    <jsp:forward page="login_error1.jsp"></jsp:forward>
    <%
      }
    //SE esito è false rimanda alla pagina login_error.jsp
      else if (esito.equals("false"))
      {
    %>
    <jsp:forward page="login_error.jsp"></jsp:forward>
    <%
      }
    %>
    l'ho messo in tutte le pagine che voglio proteggere. Ho sbagliato?

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.