Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Problema em buscar o valor na Session

Boa tarde.

Então, eu estou tendo um problema em que não consigo pegar o valor do email na session.

O que houve:

1°- Eu coloquei um frase de bem vindo para aparecer o nome

Bem vindo ao nosso gerenciador de empresas,(aqui o email da pessoa)!

Pois bem,faço o login e não retorna o valor de email para essa frase.

2° -Verifiquei se tava passando o nome do valor que no caso era, "usuarioLogado"

session.getAttribute("usuarioLogado");

fiz os teste pra ver se tava passando um valor nessa session.getAttribute("usuarioLogado"), porém está dando null, so que o estranho é q a session está funcionando e o email esta sendo buscado la no campo de texto

Ai eu queria que alguém me ajudasse a concertar isso,para ficar dessa forma.

Bem vindo ao nosso gerenciador de empresas,teste@gmail.com

Obrigado !

Codigos:

index.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<html>
<body>
    <if test="${not empty usuarioLogado}">
       <h1>Bem vindo ao nosso gerenciador de empresas,${usuarioLogado.email}!</h1>
    </if>
<br/>
<form action="fazTudo?tarefa=AdicionarEmpresas" method="post">
    Nome: <input type="text" name="AdicionarEmpresas" /><br />
    <input type="submit" value="Enviar" />
</form>

<form action="fazTudo?tarefa=BuscaEmpresas" method="GET">
    <h3><br>Procurar</br></h3>
    Nome da empresa:<input type="text" name="filtro"></input>
    <button type="submit">Enviar</button>
</form>

<h3><br>Login</br></h3> 
<form action="login" method="POST">
    Email:<input type="text" name="email"></input>
    <br></br>
    Senha:<input type="text" name="senha"></input>
    <br></br>
    <button type="submit">Login</button>
</form>

<form action="fazTudo?tarefa=Logout" method="post">
    <input type="submit" value="Logout" />
</form>

</body>
</html>

Login

package br.com.alura.gerenciador.web;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import br.com.alura.gerenciador.Usuario;
import br.com.alura.gerenciador.dao.UsuarioDAO;

@WebServlet("/login")
public class Login extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter ptw = resp.getWriter();

        String email = req.getParameter("email");
        String senha = req.getParameter("senha");

//        UsuarioDAO usuarioDAO = new UsuarioDAO();
//        
//        //Coloquei no "UsuarioDados" as informções da busca por email e senha 
//         Usuario usuario =  usuarioDAO.buscaPorEmailESenha(email, senha);

         Usuario usuario = new UsuarioDAO().buscaPorEmailESenha(email,
                 senha);

        //Validação de email e senha
        if(validarCampoEmail(email) || validarCampoSenha(senha))
        {
            ptw.print("<p>Campo email ou senha vazio</p>");
        }else{
            if(!validarFormatoEmail(email)){
                ptw.print("<p>Email incorreto</p>");
            }else{

                //ADICONANDO A CLASSE COOKIE => para email
                    //Cookie cookie = new Cookie("usuario.logado", email);    
                    //resp.addCookie(cookie);


                       //USANDO SESSÃO -> HttpSession
                HttpSession session = req.getSession();
                //colocaremos na secessao ao inves de usar o cookie
                 session.setAttribute("usuarioLogado",usuario);//setAttribute tem parametros(nome,valor) igual a do Cookies


                ptw.print("<p>Usuario logado :"+email+"</p>");
                ptw.print("<p>Teste :"+session.getAttribute("usuarioLogado")+"</p>");
                //ptw.print("<p>Teste(1) :"+System.currentTimeMillis()+"/"+Math.random()+"</p>");
                }    
        }
    }










    //VALIDAÇOES
    public static boolean validarFormatoEmail(String email)
    {
        boolean isEmailIdValid = false;
        if (email != null && email.length() > 0) {
            String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
            Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(email);
            if (matcher.matches()) {
                isEmailIdValid = true;
            }
        }
        return isEmailIdValid;
    }

    public boolean validarCampoEmail(String email){

        if(email == null || email == ""){
            return true;
        }
        return false;
    }

    public boolean validarCampoSenha(String senha){

        if(senha == null || senha == "" ){
            return true;
        }
        return false;
    }

}
6 respostas

Oi Pedro!

Para acessar um valor da sessão na JPS, via EL, você precisa fazer algo como:

${sessionScope.usuarioLogado.email}

Tenta e avisa se deu certo? abs

Boa noite,Lucas.

Eu fiz do jeito que você falou, mas não deu certo.

Então, o problema maior que eu vejo, é o "pq que não esta puxando a informação e colocando na variavel da session ".O que acontece é que ta vindo null a varivel da session.

Vou te mostrar as imagens:

Menu inicial: https://drive.google.com/file/d/19CDBZNDx9yD_CCp9Xa-dwGas_VV9U0fx/view?usp=sharing

Efetuado Login( com o erro null): https://drive.google.com/file/d/1BXbXhm4ncf8zHgUZOlQdIO_Zvp8G47kM/view?usp=sharing

Local aonde vem esse null :

Codigo de teste : ptw.print("

Teste :"+session.getAttribute("usuarioLogado")+"

");
@WebServlet("/login")
public class Login extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter ptw = resp.getWriter();

        String email = req.getParameter("email");
        String senha = req.getParameter("senha");

//        //Coloquei no "UsuarioDados" as informções da busca por email e senha 

         Usuario usuario = new UsuarioDAO().buscaPorEmailESenha(email,
                 senha);

        //Validação de email e senha
        if(validarCampoEmail(email) || validarCampoSenha(senha))
        {
            ptw.print("<p>Campo email ou senha vazio</p>");
        }else{
            if(!validarFormatoEmail(email)){
                ptw.print("<p>Email incorreto</p>");
            }else{

                       //USANDO SESSÃO -> HttpSession
                HttpSession session = req.getSession();
                //colocaremos na secessao ao inves de usar o cookie
                 session.setAttribute("usuarioLogado",usuario);//setAttribute tem parametros(nome,valor) igual a do Cookies


                ptw.print("<p>Usuario logado :"+email+"</p>");
                ptw.print("<p>Teste :"+session.getAttribute("usuarioLogado")+"</p>");
                //ptw.print("<p>Teste(1) :"+System.currentTimeMillis()+"/"+Math.random()+"</p>");
                }    
        }
    }










    //VALIDAÇOES
    public static boolean validarFormatoEmail(String email)
    {
        boolean isEmailIdValid = false;
        if (email != null && email.length() > 0) {
            String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
            Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(email);
            if (matcher.matches()) {
                isEmailIdValid = true;
            }
        }
        return isEmailIdValid;
    }

    public boolean validarCampoEmail(String email){

        if(email == null || email == ""){
            return true;
        }
        return false;
    }

    public boolean validarCampoSenha(String senha){

        if(senha == null || senha == "" ){
            return true;
        }
        return false;
    }

}

Oi Pedro Henrique.

consegue subir um zip do seu projeto em um dropbox ou google drive e mandar o link aqui pra eu dar uma olhada?

abraço

solução!

Oi Pedro!

O usuario é que está null. Quando você digita os dados no formulario, ele pega os dados e faz um:

Usuario usuario = new UsuarioDAO().buscaPorEmailESenha(email, senha);

o método buscaPorEmailESenha() busca os dados em um Map, que por padrão contém os valores:

USUARIOS.put("guilherme.silveira@alura.com.br", new Usuario("guilherme.silveira@alura.com.br","silveira"));
USUARIOS.put("rodrigo.turini@alura.com.br", new Usuario("rodrigo.turini@alura.com.br","turini"));

Caso o que você digite no login não corresponda aos valores, o método retornará null. e daí você acaba pondo null na session.

é só logar com um dos valores do Map, como:

login: guilherme.silveira@alura.com.br
senha: silveira

faz sentido? abraço!

Ahhh é,tinha me esquecido desse detalhe kkkkkkkkk.

Muito obrigado Lucas !!