SERVLET + JSP : Como usar?

8 respostas
T

Olá, ahh eu li em algum lugar que em sistemas WEB, o mais indicado é fazer a parte "visual" em jsp e a parte "sistema (programação)" em servlets, pra não confundir as duas coisas, para manutenção (tanto do jsp quanto da programação), etc...

Num sistama, se eu NÃO fizesse com servlet, ficaria desse jeito:

<%
	String mensagem = "";

	if(request.getParameter("isset")!=null){
		
		/*	
			conexao com banco
			pesquisa no banco a senha pelo login
			
			String senha = request.getParameter("senha");
		
			condição: 	if(!senha.equals(resultado da pesquisa no banco)){
				
							mensagem = "Login invalido";
						}
						else{
							
							response.sendRedirect("home.jsp");
						}		
		*/	
	}
%>

<html>

	<head>
	
		<title>Index</title>
	
	</head>
	
	<body>
	
		<center>
		
			<form action="index.jsp" method="post">
			
				<input type="hidden" name="isset" value="ok">
				
				Login: <input type="text" name="login"><br><br>
				
				Password: <input type="password" name="password"><br><br>
				
				<input type="submit" value="   Login   ">
			
			</form><br><br>
			
			<% out.println(mensagem); %>
		
		</center>
	
	</body>

</html>

***reparem que depois do botão "LOGIN" aparece o atributo MENSAGEM. Como ele é vazio na primeira vez, não aparece nada, mas se a senha estiver errada, ele aparece como LOGIN INVALIDO.

Agora, como eu faço isso numa servlet? Eu não consigo passar um atributo para a página jsp pra exibição (login invalido por exemplo).

Servlet:

package br.com.teste.Servlet;

import java.io.IOException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("serial")
public class Valida extends HttpServlet {

	protected void service (HttpServletRequest request, HttpServletResponse response)
	throws IOException{
		
		String usuario = request.getParameter("usuario");
		String senha = request.getParameter("senha");		

		/*	
			RequestDispatcher rd = request.getRequestDispatcher("home.jsp");
			
			conexao com banco
			pesquisa no banco a senha pelo login
			
			condição: 	if(!senha.equals(resultado da pesquisa no banco)){
				
							AQUI, como eu passo a string "login invalido" para a página jsp ?
						}
						else{
							
							//redireciona para home.jsp
							try {
								rd.forward(request,response);
							} 
							catch (ServletException e) {
								e.printStackTrace();
							}	
						}		
		*/		
	}
}

8 Respostas

gilmaslima

Vê se isso lhe ajuda, não testei aqui, mas deve funcionar após vc mapear o servlet.

Servlet:

public ServletLogin extends HttpServlet {
 
public void doPost(HttpServletRequest, request, HttpServletResponse) throws ServletException, IOException {

String login = request.getParameter("login");
String password = request.getParameter("password");

//validação da senha
if(login.equals("admin") && password.eqials("1234")){

response.sendRedirect("login_suceso.jsp");

}else{

response.sendRedirect("login_erro.jsp");


}

}  




}

flw!

T

Mas essa página login_erro.jsp, seria idêntica à login.jsp só que já mostrando o erro, é isso ?

gilmaslima

é só um exemplo, vc pode ao invéz de redirecionar quando der erro vc pode dar um alert com uma mensagem de erro e voltar para página de login.

Dê uma pesquisada…

L

Ola amigo!

É justamente como nosso amigo ai de cima falou!

voce pode criar uma pagina identica a de login, porem mostrando o erro, ou intaum mostrar esse erro no servlet mesmo logo apos a verificação!!

Ja fiz muito isso com JOptionpane… rsrsrsrss

Bons estudos!

[]'s

A

Criar uma nova página igual a primeira não é uma boa coisa. Pois o seu sistema tende a ficar grande, mais do que já deve ser.. !!! Imagine ter que dar manutenção para duas páginas sempre que tiver uma alteração, ou então copiar para esta página toda alteração e refazer a particularidade dela...

Isto é inviável.

Como sugestão para que não tenha duas paginas iguais, ao invez de utilizar o sendRedirect, utilize o RequestDispatcher, segue abaixo um exemplo.

Servlet chamado pela página index.jsp
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		if (Validacoes) {
			// Faz algo se a autenticação deu certo.
		}
		else {
			// Retorna a mesma página com um atributo de mensagem no request, caso o usuário não tem acesso ao sistema.
			request.setAttribute("mensagem", "Erro na autenticação");
			RequestDispatcher view = request.getRequestDispatcher("/index.jsp");  // Retorna a mesma página que o chamou.
			view.forward(request, response);
		}
	}
JSP que vai tratar tanto o envio dos dados do formulário, como a resposta caso de algum erro, repare que eu verifico se existe um atributo mensagem no request, se tiver então é impresso.
<body>
	<form action="login" method="post">
		Login<input type="text" name="usuario"><br>
		Senha<input type="text" name="senha"><br>
		<button type="submit">Enviar</button><br>
	</form>
	<% String mensagem = (String) request.getAttribute("mensagem");
	   if (mensagem != null)
		   out.println(mensagem);
	%>
</body>

OBS: Fiz o exemplo utilizando scriptlet, que é o código java dentro das tags <% %>, mas isto é extremamente condenado a sua utilização, pois isto obriga o design da página a conhecer java. Como alternativa tem as ações padroes ou as expression language que podem ser utililizadas.

Como o objetivo aqui era mostrar a mensagem tambem fiz utilizando scriptlet, mas é importante você dar uma lida nestas duas novas maneiras... !!! Ou então migrar para algum framework que facilita isto para você.

Att

T

request.setAttribute(“mensagem”, “Erro na autenticação”);”

Não conhecia esse comando … creio que resolverá isso.

Testarei daqui a pouco … e já posto aqui

T

Muito bom, exatamente o que precisava. Passar parâmetros de servlets para jsps …

Obrigado :wink:

C

Eu também agradeço muito, o post me auxiliou.

Criado 4 de abril de 2011
Ultima resposta 6 de mai. de 2014
Respostas 8
Participantes 5