Páginas

Pesquisar este blog

domingo, 21 de março de 2010

Java para Web - Aprendendo a programar - Parte II - JSP, Javabean, Mysql com login criptografado

Nesta segunda parte vou postar os códigos que consegui desenvolver durante este período. Consegui fazer um pequeno código, com autenticacao usando o banco de dados mysql, consulta de cadastro e inclusão no banco de dados.

Desculpem me se o código estiver um tanto quanto tosco. Lembro que estou apenas aprendendo.

index.jsp


<%-- 
    Document   : index
    Created on : 16/03/2010, 15:39:11
    Author     : Alexandro Félix Pereira
--%>


<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">


<%--Cria instâncias das classes userBean e UserDataBean--%>
<jsp:useBean id="user" class="com.vignette.vps.UserBean" scope="page"/>
<jsp:useBean id="userData" class="com.vignette.vps.UserDataBean" scope="page"/>


<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Pet Plus</title>
    </head>
    <body>
        <%-- Seta todas as propriedades do java bean UserBean, que
         equivalem ao nome dos campos "input" abaixo --%>
        <jsp:setProperty name="user" property="*"/>
        <%
        /*Testa se os campos userName ou senha são diferente de null, caso algum seja,
        significa que temos uma consulta à ser realizada, caso contrário exibe os
        campos para consulta*/
        if(user.getUserName() == null |
           user.getSenha() == null){
        %>
        <form action="index.jsp" method="post">
            <table>
                <tr><th>Usuário:</th>
                    <th><input name="userName" type="text"/></th>
                </tr>
                <tr><th>Senha:</th>
                    <th><input name="senha" type="password"/></th>
                </tr>
            </table>
            <input type="submit" name="Entrar" value="Enviar"/>
        </form>
    <%
    /*Verifica as credenciais do usuário, caso o retorno seja "true", redireciona
      o usuário para home.jsp*/
    }else if(userData.getCredentials(user.getUserName(), user.getSenha())){
    %>
        <jsp:forward page = "home.jsp"/>
    <%
    /*Caso usuário ou senha estejam incorretos, será exibida a mensagem abaixo  */
    }else{
        out.println("Usuário ou senha incorretos");      
    %>
    <br />
    <%-- Link recarrega a pagina apos insercao de dados incorreta --%>
    <a href="index.jsp">Voltar</a>    
    <% } %><%-- finaliza o "else" --%>
    </body>
</html>


##################################################
home.jsp



<%-- 
    Document   : home
    Created on : 16/03/2010, 16:17:01
    Author     : Alexandro Félix Pereira
--%>


<%@page contentType="text/html" pageEncoding="UTF-8"
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Pet Plus</title>
    </head>
    <body>
        <h2><strong>O que deseja fazer?</strong></h2>
        <table>
            <tr>
                <th><a href="listaClientes.jsp">Consultar Clientes</a></th>
            </tr>
            <tr>
                <th><a href="incluirClientes.jsp">Cadastrar Clientes</a></th>
            </tr>
        </table>        
    </body>
</html>


##################################################
listaClientes.jsp

<%-- 
    Document   : listaClientes
    Created on : 17/03/2010, 12:31:29
    Author     : Alexandro Félix Pereira
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<%--Cria instâncias das classes userBean e UserDataBean--%>
<jsp:useBean id="userData" class="com.vignette.vps.UserDataBean" scope="page"/>
<jsp:useBean id="user" class="com.vignette.vps.UserBean" scope="page"/>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Consulta Clientes</title>
    </head>
    <%--Seta prpriedades--%>
    <jsp:setProperty name="user" property="*"/>
    <%-- Se nome ou id igual null, exibe a página para consulta --%>
    <%
    if((user.getId() == null && user.getNome() == null)){
    %>
    <body>
        <h2><strong>O que deseja fazer?</strong></h2>
        <form action="listaClientes.jsp">
        <table>
            <tr>
                <th align="left">Id:</th>
                <th align="left"><input type="text" name="id" value="" size="30" /></th>
            </tr>
            <tr>
                <th align="left">Nome do cliente:</th>
                <th align="left"><input type="text" name="nome" value="" size="30" /></th>
            </tr>            
        </table>
            <input type="submit" value="Consultar" name="consultar" />
        </form>
    <%  /*
        se o retorno do metodo listaClientes for verdadeiro, exibe o resultado
        da consulta
        */
        }else if(userData.listaClientes(user.getNome(), user.getId())){
    %>
        <table width="90%" border="1">
          <tr>
    <%  // write out the header cells containing the column labels
         for (int i=1; i<=userData.getColumns(); i++) {
              out.write("<th>" + userData.getRsmd().getColumnLabel(i) + "</th>");
         }
    %>
    </tr>
    <% // now write out one row for each entry in the database table
         while (userData.getResult().next()) {
            out.write("<tr>");
            for (int i=1; i<=userData.getColumns(); i++) {
               out.write("<td>" + userData.getResult().getString(i) + "</td>");
            }
            out.write("</tr>");
         }     
     }
    %>
    </table>
    </body>
</html>
##################################################
incluirClientes.jsp
<%-- 
    Document   : incluirClientes
    Created on : Mar 21, 2010, 6:05:29 PM
    Author     : rideick
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<%--Cria instâncias das classes userBean e UserDataBean--%>
<jsp:useBean id="user" class="com.vignette.vps.UserBean" scope="request"/>
<jsp:useBean id="userData" class="com.vignette.vps.UserDataBean" scope="request"/>

<HTML>
    <HEAD><META http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <TITLE>Incluir Clientes</TITLE>
    </HEAD>
    <BODY>
        <%-- Define as propriedades do bean user--%>
        <jsp:setProperty name="user" property="*"/>
        <%
        //se nome diferente de null exibe a página para inclusão de cliente
        if(user.getNome() == null){
        %>
        <H3>Incluir Cliente</H3>
        <FORM action="incluirClientes.jsp" method="get">
            <TABLE>
                <TBODY><TR><TH align="left">Nome do Cliente:</TH>
                    <TH><INPUT type="text" name="nome" value="" size="60"></TH>
                </TR>
                <TR><TH align="left">Endereço:</TH>
                    <TH><INPUT type="text" name="end1" value="" size="60"></TH>
                </TR>
                <TR><TH align="left">Endereço Secundário:</TH>
                    <TH><INPUT type="text" name="end2" size="60"></TH>
                </TR>
                <TR><TH align="left">CEP:</TH>
                    <TH><INPUT type="text" name="cep" size="60"></TH>
                </TR>
                <TR><TH align="left">Cidade:</TH>
                    <TH><INPUT type="text" name="cidade" size="60"></TH>
                </TR>
                <TR><TH align="left">Estado</TH>
                    <TH><INPUT type="text" name="estado" size="60"></TH>
                </TR>
                <TR><TH align="left">Telefone:</TH>
                    <TH><INPUT type="text" name="telefone" size="60"></TH>
                </TR>
                <TR><TH align="left">Fax:</TH>
                    <TH><INPUT type="text" name="fax" size="60"></TH>
                </TR>
                <TR><TH align="left">E-mail:</TH>
                    <TH><INPUT type="text" name="email" size="60"></TH>
                </TR>
                <TR><TH align="left">Código de Desconto:</TH>
                    <TH><INPUT type="text" name="cod_desc" size="60"></TH>
                </TR>
                <TR><TH align="left">Limite de Crédito:</TH>
                    <TH><INPUT type="text" name="lim_cred" size="60"></TH>
                </TR>
            </TBODY></TABLE>
            <INPUT type="submit" value="Incluir" name="incluir">
        </FORM>
        <%
        }else{
            //construcao do sql para inclusão do cliente
            userData.setSql(user.getId(),user.getNome(),user.getEnd1(),user.getEnd2(),
                            user.getCep(),user.getCidade(),user.getEstado(),user.getTelefone(),
                            user.getFax(),user.getEmail(),user.getCod_desc(),user.getLim_cred());
            //se as linhas afetadas maior ou igual a 1, exibe mensagem de sucesso.
         }if(userData.getLinhas() >= 1){
        %>
        <strong>Dados inseridos com sucesso</strong><br />
        <a href="incluirClientes.jsp">Voltar</a>
        <%
        }
        %>
    </BODY>
</HTML>
##################################################
UserBean.java

package com.vignette.vps;

import java.io.Serializable;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 *
 * @author rideick
 */
public class UserBean implements Serializable{

    private String userName,senha,id,nome,end1,end2,
                   cep,cidade,estado,telefone,fax,email,
                   cod_desc,lim_cred;

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) {

        try {
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        md5.update(senha.getBytes());
        BigInteger hash = new BigInteger(1, md5.digest());
        senha = hash.toString(16);
        } catch (NoSuchAlgorithmException nsae) {

        }

        this.senha = senha;
    }

    /**
     * @return the id
     */
    public String getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * @return the userName
     */
    public String getUserName() {
        return userName;
    }

    /**
     * @param userName the userName to set
     */
    public void setUserName(String userName) {
        this.userName = userName;
    }

    /**
     * @return the end1
     */
    public String getEnd1() {
        return end1;
    }

    /**
     * @param end1 the end1 to set
     */
    public void setEnd1(String end1) {
        this.end1 = end1;
    }

    /**
     * @return the end2
     */
    public String getEnd2() {
        return end2;
    }

    /**
     * @param end2 the end2 to set
     */
    public void setEnd2(String end2) {
        this.end2 = end2;
    }

    /**
     * @return the cep
     */
    public String getCep() {
        return cep;
    }

    /**
     * @param cep the cep to set
     */
    public void setCep(String cep) {
        this.cep = cep;
    }

    /**
     * @return the cidade
     */
    public String getCidade() {
        return cidade;
    }

    /**
     * @param cidade the cidade to set
     */
    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    /**
     * @return the estado
     */
    public String getEstado() {
        return estado;
    }

    /**
     * @param estado the estado to set
     */
    public void setEstado(String estado) {
        this.estado = estado;
    }

    /**
     * @return the telefone
     */
    public String getTelefone() {
        return telefone;
    }

    /**
     * @param telefone the telefone to set
     */
    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    /**
     * @return the fax
     */
    public String getFax() {
        return fax;
    }

    /**
     * @param fax the fax to set
     */
    public void setFax(String fax) {
        this.fax = fax;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param email the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * @return the cod_desc
     */
    public String getCod_desc() {
        return cod_desc;
    }

    /**
     * @param cod_desc the cod_desc to set
     */
    public void setCod_desc(String cod_desc) {
        this.cod_desc = cod_desc;
    }

    /**
     * @return the lim_cred
     */
    public String getLim_cred() {
        return lim_cred;
    }

    /**
     * @param lim_cred the lim_cred to set
     */
    public void setLim_cred(String lim_cred) {
        this.lim_cred = lim_cred;
    }

}
##################################################
UserDataBean.java
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.vignette.vps;

import javax.naming.NamingException;
import javax.sql.*;
import java.sql.*;
import javax.naming.Context;
import javax.naming.InitialContext;

/**
 *
 * @author Alexandro Felix Pereira
 */
public class UserDataBean {
    
    private Statement pstmt = null;
    private PreparedStatement pst = null;
    private ResultSetMetaData rsmd = null;
    private ResultSet result = null;
    private Context ctx = new InitialContext();
    private DataSource ds = (DataSource) ctx.lookup("petplus");
    private Connection connection = ds.getConnection();

    String usrName, pass;
    private boolean credentials = false;
    private int columns = 0;
    private int linhas = 0;

    private String sql = null;

    UserBean usrBean = new UserBean();

    public UserDataBean()
            throws SQLException, NamingException{
    }

    public boolean getCredentials(String userName, String senha) 
            throws SQLException, NamingException{

        String sql = "SELECT user_name,password " +
                     "FROM users " +
                     "WHERE user_name='" + userName + "' " +
                     "AND password='" + senha + "'";

        try{
            
            setPstmt(getConnection().createStatement());

            setResult(getPstmt().executeQuery(sql));

            while(result.next()){

                if( getResult().getString("user_name").equals(userName) &&
                    getResult().getString("password").equals(senha)){

                    credentials = true;

                }

            }
            
        }
        catch(SQLException e){

            System.out.println("Exception na consulta: SELECT user_name,password " +
                                              "FROM users " +
                                              "WHERE user_name='" + userName + "' " +
                                              "AND password='" + senha + "'" + e);

        }

        return credentials;

    }

    public boolean listaClientes(String nome, String id) throws SQLException{

        setPstmt(getConnection().createStatement());

        try{
        if (ds != null) {

            if(id == null && nome == null){

                    setResult(getPstmt().executeQuery("SELECT customer_id as id, " +
                                                     "name as nome, " + "city as cidade, " +
                                                     "" + "phone as telefone, " + "state as estado, " +
                                                     "addressline1 as endereço, " +
                                                     "addressline2 as endereço_alternativo, " +
                                                     "credit_limit as limite_de_crédito " +
                                                     "FROM customer " +
                                                     "ORDER BY name"));

            }else if(id != null && nome == null){

                    setResult(getPstmt().executeQuery("SELECT customer_id as id, name as nome, city as cidade, " +
                                                      "phone as telefone, state as estado, " +
                                                      "addressline1 as endereço, " +
                                                      "addressline2 as endereço_alternativo, " +
                                                      "credit_limit as limite_de_credito " +
                                                      "FROM customer " +
                                                      "WHERE customer_id=" + id + " " +
                                                      "ORDER BY name"));

            }else if(id != null && nome != null){

                    setResult(getPstmt().executeQuery("SELECT customer_id as id, name as nome, city as cidade, " +
                                                      "phone as telefone, state as estado, " +
                                                      "addressline1 as endereço, " +
                                                      "addressline2 as endereço_alternativo, " +
                                                      "credit_limit as limite_de_credito " +
                                                      "FROM customer " +
                                                      "WHERE customer_id=" + id + " " +
                                                      "AND LOWER(name) LIKE '%" + nome + "%' " +
                                                      "ORDER BY name"));
            }else{

                    setResult(getPstmt().executeQuery("SELECT customer_id as id, name as nome, city as cidade, " +
                                                      "phone as telefone, state as estado, " +
                                                      "addressline1 as endereço, " +
                                                      "addressline2 as endereço_alternativo, " +
                                                      "credit_limit as limite_de_credito " +
                                                      "FROM customer " +
                                                      "WHERE LOWER(name) " +
                                                      "LIKE '%" + nome + "%' " +
                                                      "ORDER BY name"));
            }

            if(result != null ){
                credentials = true;
            }
        }
     }
     catch (SQLException e) {
        System.out.println("Error occurred " + e);
      }
      
      try {
            setRsmd(getResult().getMetaData());
            setColumns(getRsmd().getColumnCount());
      }
      catch (SQLException e) {
         System.out.println("Error occurred " + e);
      }
     return credentials;

    }

    public void setSql(String id,String nome,String end1,String end2,
            String cep,String cidade,String estado,String telefone,
            String fax,String email,String cod_desc,String lim_cred) throws SQLException{
        
        pstmt = connection.createStatement();

        sql = "INSERT INTO customer " +
              "(discount_code, zip, name, " +
              "addressline1, addressline2, city, state, phone, " +
              "fax, email, credit_limit) " +
              "VALUES ('" + cod_desc + "','" +
              cep +"','" + nome + "','" + end1 + "','" + end2 +"','" +
              cidade + "','" + estado + "','" + telefone
              + "','" + fax + "','" + email + "'," + lim_cred + ")";

        setLinhas(pstmt.executeUpdate(sql));
        
    }

    public String getSql(){

        return sql;
    }

    /**
     * @return the columns
     */
    public int getColumns() {
        
        return columns;
    }

    /**
     * @param columns the columns to set
     */
    public void setColumns(int columns) {
        this.columns = columns;
    }

    /**
     * @return the rsmd
     */
    public ResultSetMetaData getRsmd() {
        return rsmd;
    }

    /**
     * @param rsmd the rsmd to set
     */
    public void setRsmd(ResultSetMetaData rsmd) {
        this.rsmd = rsmd;
    }

    /**
     * @return the result
     */
    public ResultSet getResult() {
        return result;
    }

    /**
     * @param result the result to set
     */
    public void setResult(ResultSet result) {
        this.result = result;
    }

    /**
     * @return the connection
     */
    public Connection getConnection() {
        return connection;
    }

    /**
     * @param connection the connection to set
     */
    public void setConnection(Connection connection) {
        this.connection = connection;
    }

    /**
     * @return the pstmt
     */
    public Statement getPstmt() {
        return pstmt;
    }

    /**
     * @param pstmt the pstmt to set
     */
    public void setPstmt(Statement pstmt) {
        this.pstmt = pstmt;
    }  
    /**
     * @return the pst
     */
    public PreparedStatement getPst() {
        return pst;
    }

    /**
     * @param pst the pst to set
     */
    public void setPst(String sql) throws SQLException {

        pst = connection.prepareStatement(sql);
        
    }
    /**
     * @return the linhas
     */
    public int getLinhas() {
        return linhas;
    }

    /**
     * @param linhas the linhas to set
     */
    public void setLinhas(int linhas) {
        this.linhas = linhas;
    }

    @Override
    public void finalize() throws SQLException{

        try{
            result.close();
            connection.close();
            pstmt.close();
        }
        catch(SQLException e){
            System.out.print(e);
        }

    }


}




quinta-feira, 18 de março de 2010

Java para Web - Aprendendo a programar

Depois de um tempo de inatividade, estou eu aqui de volta à "blogar". Agora para passar um pouco minha experiência com programação para web.

Bem, sempre tive vontade de desenvolver aplicações, pois considero a programação, uma arte. Acredito que seja uma grande satisfação, desenvolver algo útil onde você pode facilitar a vida das pessoas através de seu trabalho, e dessa forma, contribuir com o meio em que você vive.
Até hoje tenho desenvolvido, pequenos programas em variadas linguagens, php, C, java e shell script, uma boa gama de linguagens, para alguém que até agora tem na programação, umas espécie de hobby. Contudo, na maioria dos casos, os programas desenvolvidos, só serviram para o meu próprio deleito, nada sofisticados, multi usuário, ou que atendesse a uma certa quantidade de pessoas.

Agora que relatei alguns dos motivos, que me levaram, a realmente aprender a programar. Vou tentar passar um pouco da minha experiência, relatando dificuldades e o que houver de mais relevante, e claro, sempre que aprender algo novo, postarei aqui, para ajudar novos "programadores" como eu.

A duas semanas atrás, estava na livraria Saraiva, e encontrei um livro chamado: Denvolvendo aplicações para web com jsp, servlets, javaserver faces, hibernate, ejb 3 persitense e ajax. Li um pouco o que havia no mesmo e resolvi comprar. É um livro muito, estou usando ele como base no meu aprendizado, que hoje, está fazendo mais ou menos uma semana desde seu início. Até agora, aprendi um pouco sobre servlets, jsp, e javabeans. Já consegui fazer uma página de login, efetuando a consulta em um data source, no app server, uma página para inclusão de dados e outra para consulta de dados. Nada mal para uma semana.

Hoje, aprendi um novo conceito, aprendi que não é uma boa prática, criar a conexão ao banco de dados, dentro da jsp. Devemos fazer isto através de um javabean. Dessa maneira, tornamos nosso código mais legível, mais coeso, e o reaproveitamento de código é mais eficiente. Estou tendo uma certa dificuldade, mas acho que amanhã, consigo transferir toda a parte de conexão com banco, para javabean.

O aprendizado tem sido fantástico, algo que tem me motivado, e me mantido na frente do computador. Estou me fascinando por esta área, e espero que com os conhecimentos adquiridos, possa ajudar outras pessoas a resolver seus problemas, e passar conhecimento às mesmas.

Por hoje é só.

Abraços e boa noite!