domingo, 8 de janeiro de 2012

Servlet para logon

Oi pessoal,

Hoje vou mostrar uma classe do tipo Servlet que pode ser usada para validar um usuário em uma aplicação Web usando Java Server Pages(JSP).
Mas para isso vamos inicialmente criar um banco de dados chamado WebSistemaCR em MySql com uma tabela chamada Usuário e em seguida criamos a classe Usuario e UsuarioPU(unidade de persistência) usando Hibernate.
O arquivo login.jsp também será mostrado para que a demonstração fique completa.
Sugiro que você use o Netbeans para acompanhar este exemplo.
O script de criação da tabela no MySql é o seguinte:


Create Database WebSistemaCR;

CREATE TABLE  `usuario` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `senha` varchar(15) NOT NULL,
  `usuario` varchar(20) NOT NULL,
  PRIMARY KEY (`idUsuario`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

Classe Usuário gerada diretamente do NetBeans como uma classe de banco de dados:


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Beans;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author Jorgefox
 */
@Entity
@Table(name = "usuario")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Usuario.findAll", query = "SELECT u FROM Usuario u"),
    @NamedQuery(name = "Usuario.findByIdUsuario", query = "SELECT u FROM Usuario u WHERE u.idUsuario = :idUsuario"),
    @NamedQuery(name = "Usuario.findBySenha", query = "SELECT u FROM Usuario u WHERE u.senha = :senha"),
    @NamedQuery(name = "Usuario.findByUsuario", query = "SELECT u FROM Usuario u WHERE u.usuario = :usuario")})
public class Usuario implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idUsuario")
    private Integer idUsuario;
    @Basic(optional = false)
    @Column(name = "senha")
    private String senha;
    @Basic(optional = false)
    @Column(name = "usuario")
    private String usuario;

    public Usuario() {
    }

    public Usuario(Integer idUsuario) {
        this.idUsuario = idUsuario;
    }

    public Usuario(Integer idUsuario, String senha, String usuario) {
        this.idUsuario = idUsuario;
        this.senha = senha;
        this.usuario = usuario;
    }

    public Integer getIdUsuario() {
        return idUsuario;
    }

    public void setIdUsuario(Integer idUsuario) {
        this.idUsuario = idUsuario;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idUsuario != null ? idUsuario.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Usuario)) {
            return false;
        }
        Usuario other = (Usuario) object;
        if ((this.idUsuario == null && other.idUsuario != null) || (this.idUsuario != null && !this.idUsuario.equals(other.idUsuario))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "Beans.Usuario[ idUsuario=" + idUsuario + " ]";
    }
 
}


Agora vamos listar a classe UsuarioPU.

/* 
 * To change this template, choose Tools | Templates 
 * and open the template in the editor. 
 */ 
package Persistencia; 
/**
 *
 * @author jorgefox
 */
import JavaBeans.Usuario;
import java.util.Iterator;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction; 
public class UsuarioPU extends Conexao { 
    Conexao cnx = new Conexao(); 
    public boolean salvar(Usuario us, boolean op) {
        try {
            Session ss = cnx.retornaSessao();
            Transaction ts = ss.beginTransaction();
            if (!op) {
                //significa que é uma inclusão e op=false.
                ss.save(us);
            } else {
                //significa que é uma atualização s op=true.
                ss.update(us);
            }
            ts.commit();
            ss.close();
            return true;
        } catch (HibernateException e) {
            System.out.println("Deu erro de conexão!" +
e.getMessage());
            return false;
        }
    } 
    public List<Usuario> pesquisa(String sql) {
        List<Usuario> lu = null;
        try {
            System.out.println("Dentro da pesquisa : " + sql);
            Session ss = cnx.retornaSessao();
            lu = ss.createQuery(sql).list();
            if (lu.isEmpty()) {
                System.out.println("Não há clientes para esta
consulta.");
            }
            ss.close();
            return lu;
        } catch (HibernateException e) {
            System.out.println("Erro com Hibernate : " +
e.getMessage());
            return lu;
        }
    } 
    public Usuario getUsuario(int id) {
        String sql = "from Usuario where id=" + id;
        List<Usuario> lu = pesquisa(sql);
        if (lu.isEmpty()) {
            return new Usuario();
        } else {
            Iterator ilu = lu.listIterator();
            return (Usuario) ilu.next();
        }
    } 
    public boolean deletar(Usuario us) {
        try {
            Session ss = cnx.retornaSessao();
            Transaction ts = ss.beginTransaction();
            ss.delete(us);
            ts.commit();
            ss.close();
            return true;
        } catch (HibernateException e) {
            System.out.println("Erro provocado por : " +
e.getMessage());
            return false;
        }
    } 

E aqui vai o Servlet

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import JavaBeans.Usuario;
import Persistencia.UsuarioPU;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; 
/**
 *
 * @author jorgefox
 */
public class ServletValida extends HttpServlet { 
    /**
     * Processes requests for both HTTP <code>GET</code> and
<code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request,
HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            //TODO output your page here
            String usuario = request.getParameter("usuario");
            String senha = request.getParameter("senha");
            String[] escolha = request.getParameterValues("escolha");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet ServletValida</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1> Olá " + usuario + " acabei de chegar do
formulario. </h1>");
            out.println("<h2> Eu sei a sua senha e ela é : " + senha +
" </h2>");
            for (int i = 0; i < escolha.length; i++) {
                out.println("escolha[" + i + "]= " + escolha[i]);
            }
            out.println("</body>");
            out.println("</html>"); 
        } finally {
            out.close();
        }
    } 
    // <editor-fold defaultstate="collapsed" desc="HttpServlet
methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request,
HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    } 
    /**
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request,
HttpServletResponse response)
            throws ServletException, IOException {
        // processRequest(request, response);
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String usuario = request.getParameter("usuario");
        String senha = request.getParameter("senha");
        String[] escolha = request.getParameterValues("escolha");
        if (usuario.isEmpty() || senha.isEmpty()) {
            out.println("Usuario ou senha vazios.");
        } else {
            Usuario us;
            List<Usuario> lu;
            UsuarioPU uspu = new UsuarioPU();
            lu = uspu.pesquisa("from Usuario where usuario='" +
usuario + "'");
            Iterator ilu = lu.listIterator();
            us = (Usuario) ilu.next();
            if (us.getUsuario().equalsIgnoreCase(usuario) &&
us.getSenha().equalsIgnoreCase(senha)) {
                out.println("Ok pode passar");
            } else {
                out.println("Usuario ou senha invalidos.");
            }
        }
    } 
    /**
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }

Caso você tenha dificuldades com o código entre em contato comigo pelo blog. Agora vou deixar o codigo jsp para fazer o teste.

<%-- 
    Document   : login
    Created on : 26/12/2011, 16:51:27
    Author     : stella
--%>


<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <form method="post" action="autentica">
            <table align="center">
                <tr>
                    <td>Usuario</td>
                    <td><input type="text" name="usuario"/></td>
                </tr>
                <tr>
                    <td>Senha</td>
                    <td><input type="password" name="senha"/></td>
                </tr>
                <tr>
                    <td><input type="submit" name="acao" value="Logon"/></td>
                    <td></td>
                </tr>
            </table>
        </form>
    </body>
</html>

Espero ter contribuído de alguma forma para seu aprendizado em java.








Nenhum comentário:

Postar um comentário

Obrigado por contribuir para melhorar este blog, deixe sua mensagem.
Forte Abraço