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!

terça-feira, 27 de outubro de 2009

Linus Torvalds Aprova Windows 7...



Não gente, não é o fim do mundo, o que aconteceu é que a sra M$ resolveu montar um quiosque em frente a um Simpósio de Software Livre que estava acontecendo no Japão. Linus, para não perder a oportunidade, foi tirar uma onda com o querido sistema da M$. Que não é lá uma carroça, mas também não é nada de mais.

Vocês podem checar a notícia nos links:



Então galera aliviados? :D

Até a próxima.

segunda-feira, 26 de outubro de 2009

Windows 7

Depois de se dar conta do Fiasco que o Windows Vista estava sendo, nossa querida M$ resolveu lançar a mais nova e revolucionári a versão do Windows já mais vista em todos os tempos, o tão esperado Windows 7. Então, a tão esperada versão deste querido sistema foi lançada. E pasmem! É melhor que o seu sucessor (o que não é lá grande coisa). É um sistema estável, estou usando-o a mais ou menos duas semanas, e até agora não travou uma vez se quer, além de ser mais rápido que o Vista, mas ainda mais lento que o XP. Tudo bem, sei que todos nós conhecemos vários sistemas que não travam e etc. Mas se falando de Windows e M$, estabilidade e velocidade nunca foram a praia desta querida empresa. Afinal, quem não lembra das famosas blue screens? Em alguns momentos era simplesmente impossível usar tal sistema, 95, 98, Me(pior de todos) erão umas carroças, você tinha que usar e sempre estar salvando seu documento a cada 30 segundos, caso não... o estrago estaria feito. Por tanto velocidade e estabilidade é um feito e tanto ( se trantando de M$ ). Porém, está muito cedo ainda, com disse minha estou usando a apenas alguns dias, e todos sabemos que este sistema piora com o passar do tempo. Vamos ver como ele se comporta.