segunda-feira, 12 de abril de 2010

Session em JSP

Sobre Session(s) aqui:

Exemplo de Login e Senha com JSP/Servlet usando Session.

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

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

public class Logar extends HttpServlet {

private static final long serialVersionUID = 1L;
String login;
String senha;

public Logar() {
super();
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//Pega os dados (logi e senha) informados pelo usúario!
setLogin(request.getParameter("login"));
setSenha(request.getParameter("senha"));

Logar(request, response);

}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}

public void Logar(HttpServletRequest request, HttpServletResponse response) throws IOException {

PrintWriter out = response.getWriter();

//verifica se os campos login e senha estão vazios!
if (login.equals("") && senha.equals("")) {

out.println("");
out.println("Os campos não podem ficar vazios! "<"a href=index.jsp>Voltar");
out.println("");

} else {
//faz a conexão com o Banco de Dados!
PreparedStatement ps = null;

Connection con = null;

try {

Class.forName("org.postgresql.Driver");
con = DriverManager.getConnection("jdbc:postgresql://localhost/BD", "postgres", "postgres");
String sql = ("SELECT usuarios.nome,usuarios.login,usuarios.senha FROM usuarios where login = ? and senha = ?");

ps = con.prepareStatement(sql);

//passa os dados login e senha para a consulta SQL
ps.setString(1, getLogin());
ps.setString(2, getSenha());

ResultSet rs = ps.executeQuery();

//verifica se login e senha existe!
if (rs.next()) {
//aqui você pode por exemplo recuperar algumas informações do usúario logado!
//"nome" , "tipo"

//Pega um valor da coluna indicada! nesse caso a coluna "nome"
//vai trazer o Nome do Usúario com base no nome e login imformados
String nome = rs.getString("nome");

//Passa o login e senha para Session
request.getSession().setAttribute("loginUsuario", getLogin());
request.getSession().setAttribute("senhaUsuario", getSenha());

//Chama a página de acesso! Nesse caso irá chamar a página Session.jsp
//onde passará os valores de login e senha para a session
out.println("");
out.println(""<"script>document.location.href='sessions.jsp';");
out.println("");

} else {

//login e senha incorretos!
out.println("");
out.println("Login ou senha inválidos."<"a href=index.jsp>Voltar");
out.println("");

}

} catch (Exception e) {

System.out.println("Erro " + e);

}

}

}


//Getters Setters
public String getLogin() {
return login;
}

public void setLogin(String login) {
this.login = login;
}

public String getSenha() {
return senha;
}

public void setSenha(String senha) {
this.senha = senha;
}
}
//Estrutura do Banco de Dados PostgreSQL!
/*CREATE TABLE "public"."usuarios" (
"id" SERIAL,
"nome" VARCHAR(50) NOT NULL,
"login" VARCHAR(50) NOT NULL,
"senha" VARCHAR(50) NOT NULL,
"tipo" VARCHAR(50) NOT NULL,
CONSTRAINT "usuarios_login_key" UNIQUE("login"),
CONSTRAINT "usuarios_pkey" PRIMARY KEY("id")
) WITH OIDS;
*/


index.jsp



"<"form id="form1" name="form1" method="post" action="logar">
"<"table width="200" border="0" align="center">
"<"tr>
"<"td>Login:
"<"td>
"<"input type="text" name="login" id="login" />
"<"/label>
"<"/tr>
"<"tr>
"<"td>Senha:
"<"td>
"<"input type="password" name="senha" id="senha" />
"<"/label>
"<"/tr>
"<"tr>
"<"td>
"<"td>
"<"input type="submit" name="button" id="button" value="logar" />
"<"/label>
"<"/tr>
"<"/table>
"<"/form>"

sessions.jsp


"<"body>
"<"%
String senha = null;
String login = null;
//Pega os valores login e senha passados na Servlet
login = (String) request.getSession().getAttribute("loginUsuario");
senha = (String) request.getSession().getAttribute("senhaUsuario");

//passando os valores de login e senha para a Session!
session.putValue("loginUsuario", login);
session.putValue("senhaUsuario", senha);
//chama a Página Principal do sistema!
out.println(""<"script>document.location.href='Principal.jsp';");

%">"
"<"/body>


Principal.jsp

"<"/body>
"<"%
//Verifica se está logado
if(session.getValue("loginUsuario") != null || session.getValue("senhaUsuario") != null){
//deixando vázio ele mostrarar a página ! Nessa caso o conteúdo da página Principal.jsp.
} else {
//se a session estiver vazias ele irá chamar a página index.jsp o que quer dizer que não existe usúario logado!
out.println(""<"script>document.location.href='index.jsp';");
}
%">"
"<"/body>


sair.jsp



"<"body>
"<"%
//Destroi as sessions
session.invalidate();
out.print("Você saiu do sistema.");
%">"
"<"/body>


Obs: Eu tenho problemas em postar códigos HTML, PHP e JSP etc...
Então eu estou colocando aspas no início de cada tag de HTML "<".

4 comentários:

Odete Sá disse...

cara, como que o html submete o formulário

UMC disse...

Olá Odete obrigado pela visita!
bem o formulário é submetido através do action no inicio da tag "form"
veja
"<"form id="form1" name="form1" method="post" action="logar">
em action="logar" é o que será chamado após eu clicar no botão!
Qualquer dúvida pode posta!

Um abraço!
UMC
umcastec.com

Odete Sá disse...

Então colega, consegui fazer funcionar legal, mas surgiu um probleminha:
No seu código Principal.jsp na parte que vc colocou o seguinte comentário "//deixando vázio ele mostrarar a página ! Nessa caso o conteúdo da página Principal.jsp."

eu preciso abrir uma página dentro de um iframe, e atualmente só consigo abrir ela fora do iframe.

tem alguma idéia?????
Agradeço desde já...

UMC disse...

Olá Odete Sá,
isso vai depender de como você está fazendo a Session no Iframe!
Ex: Tenho a pagina iframe.jsp onde ela é o "iframe-principal, contendo o topo do site" toda vez que for executado ele irá chamar o index.jsp "login e senha" que ficará no meio "<"body">" que conterá os conteúdos etc...
então você deverá colocar o validador da Session dentro do Iframe no local onde será chamado a
a index.jsp e Principal.jsp!
Por que? -> porque toda vez que executar ele dirá que não existe Session e continuará na index.jsp quando logar vai chamar Sessions.jsp e voltará para iframe.jsp quando retornar ele vai validar e irá chamar a Principal.jsp!


Bom isso é um idéia de cabeça não estou em condições de faze-la na prática peço desculpas por não ajudar na "pratica"! mas assim que surgi um tempo irei aplicar esse exemplo!

Obrigado pela visita e volte sempre!

Contato:
umcastec@hotmail.com
umcastec@gmail.com
umcastec.com