Melhorar página de login

Estou melhorando um projetinho que fiz para minha faculdade e me veio a ideia de melhorar a parte do login do meu site. Quando eu realizo uma tentativa de login e digito algo errado ele irá abrir uma nova aba e mostrará a mensagem “Credencias incorretas”, porém, eu gostaria que ele exibisse uma mensagem em vermelho “H1” na mesma página do login com o nome “Credencias incorretas” ao invés de abrir uma nova guia. Alguém pode me ajudar a como fazer isso ?

Classe LoginUsuarioServlet

@WebServlet("/LoginUsuarioServlet")
 public class LoginUsuarioServlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException {

	String email = req.getParameter("email");
	String senha = req.getParameter("senha");
	AutentificarLogin autentificar = new AutentificarLogin();
	Usuario usuario = new Usuario();
	usuario = autentificar.Autentificar(email, senha);

	if (usuario != null) {
		PrintWriter printWriter = resp.getWriter();
		resp.sendRedirect("Locadora.jsp");
	} else {
		PrintWriter printWriter = resp.getWriter();
		printWriter.print("<body>");
		printWriter.print("<h1>Credenciais incorretas. Verifique seu E-mail e sua senha.</h1>");
		printWriter.print("<a href= 'index.jsp'>Voltar</a>");

	}
}

}

Formulário JSP

<img class="img-capa" alt="Capa" src="./img/CAPA.jpg">
<div class="login">

	<img class="imglogin" alt="" src="./img/logo.png">

	<form action="<%=request.getContextPath()%>/LoginUsuarioServlet"
		method="get">

		<h5 style="color: black; font-family: sans-serif;">
			E-MAIL: <input type="email" required name="email">
		</h5>

		<h5 style="color: black; font-family: sans-serif;">
			SENHA: <input type="password" required name="senha">
		</h5>


		<p>
		<h5 style="font-family: sans-serif;">
			<a style="text-decoration: none; color: black;"
				href='usuario/Usuario_Cadastrar.jsp'> É novo por aqui ?
				Cadastre-se</a>
		</h5>

		<br> <input
			style="border-radius: 5px; position: relative; left: 95px;"
			type="submit" value="Entrar">
	</form>

</div>

Em vez de usar PrintWriter, vc pode usar o request para fazer um forward para a própria página de login, adicionando a mensagem de erro que será apresentada:

req.setAttribute("msgErro", "Credenciais incorretas. Verifique seu E-mail e sua senha.");
req.getRequestDispatcher("/login.jsp").forward(req, res);

E na página de login:

<c:if test = "${not empty msgErro}">
    <h1><c:out value = "${msgErro}"/></h1>
</c:if>

As tags c:if e c:out fazem parte do pacote de taglibs JSTL

Mais sobre JSTL: https://www.tutorialspoint.com/jsp/jstl_core_if_tag.htm

Fiz as alterações mas ele não mostra a mensagem. Segue as alterações que você sugeriu.

Classe

 @WebServlet("/LoginUsuarioServlet")
 public class LoginUsuarioServlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

	String email = req.getParameter("email");
	String senha = req.getParameter("senha");
	AutentificarLogin autentificar = new AutentificarLogin();
	Usuario usuario = new Usuario();
	usuario = autentificar.Autentificar(email, senha);

	if (usuario != null) {
		PrintWriter printWriter = resp.getWriter();
		resp.sendRedirect("Locadora.jsp");
	} else {
		req.setAttribute("msgErro", "Credenciais incorretas. Verifique seu E-mail e sua senha.");
		req.getRequestDispatcher("/index.jsp").forward(req, resp);

	}
}

}

Formulário:

<img class="img-capa" alt="Capa" src="./img/CAPA.jpg">
<div class="login">

	<img class="imglogin" alt="" src="./img/logo.png">

	<form action="<%=request.getContextPath()%>/LoginUsuarioServlet"
		method="get">

		<h5 style="color: black; font-family: sans-serif;">
			E-MAIL: <input type="email" required name="email">
		</h5>

		<h5 style="color: black; font-family: sans-serif;">
			SENHA: <input type="password" required name="senha">
		</h5>


		<p>
		<h5 style="font-family: sans-serif;">
			<a style="text-decoration: none; color: black;"
				href='usuario/Usuario_Cadastrar.jsp'> É novo por aqui ?
				Cadastre-se</a>

		</h5>

		<c:if test="${not empty msgErro}">
			<h1>
				<c:out value="${msgErro}" />
			</h1>
		</c:if>


		<br> <input
			style="border-radius: 5px; position: relative; left: 95px;"
			type="submit" value="Entrar">
	</form>


</div>

Vc declarou o namespace da taglib na jsp?

Tem que ser adicionada no inínio da jsp.

<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c" %>

Uma coisa. O mais correto numa requisição dessa seria usar o doPost em vez do doGet. Pois vc está solicitando que ocorra uma alteração no servidor (que é a criação da sessão do usuario)

1 curtida

Realmente eu não tinha adicionado. Ele resolveu, porém ele já abre a pagina com a mensagem antes de vc digitar algo.

Sem%20t%C3%ADtulo

A tela de login é acessada pela JSP direto ou passando pela servlet?

Resolvi aqui amigo, era um erro no formulário. Você foi de extrema ajuda. Outra coisa, o cadastro de um usuário, alteração e exclusão também entram no método post e não get, pois alteram o estado do servidor, correto ?

1 curtida

Isso mesmo. Tente usar o GET apenas qdo for recuperar dados (recursos) do servidor.

1 curtida