Programação para WEB com tecnologia JEE5

Started by Triplo X, 24 de August , 2008, 04:13:29 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Triplo X

QuoteSó escrevi isto pra informar que o conteúdo desta mensagem foi apagado graças a um backup do fórum, e por tanto era apenas texto técnico, onde não afetaria os estudos deste tópico.

Obrigado pela compreensão!
Não me venha dizer que é melhor que alguém que eu te espanco!
Todos não passamos de ratinhos que morrerão um dia como todos os outros...

Triplo X

#1
Continuando com os estudos.

QuoteTive que dividir o tópico pois faziam 3 dias que estava preparando o material e queria postar logo antes que eu o perdesse por aqui.  :P


Escolhi esta versão, pois futuramente vou utilizar de outras aplicações onde os jars são todos 3.1 por aí...
Mas você pode escolher a que quiser.

index.jsp

É a tela inicial do sistema. Em nossa concepção com fins didáticos,
ela conterá dois links: "administração" e "listar restaurantes". Veja a seguir.

<%--
    Document   : index
    Created on : 19/09/2008, 10:15:30
    Author     : Triplo X
--%>

<%@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>Restaurantes na WEB</title>
    </head>
    <body>
        <h2>Restaurantes na WEB</h2>
        <a href=login_administracao.jsp>administração</a><br>
        <h3><a href=listar_restaurantes.jsp>listar restaurantes</a></h3>
    </body>
</html>



login_administracao.jsp

É a tela de login dos administradores. Solicita login e senha de um administrador de nossa aplicação,
que terá permissões para o cadastro de restaurantes.
<%--
    Document   : login_administracao
    Created on : 19/09/2008, 14:47:04
    Author     : Triplo X
--%>

<%@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>Administração - Login</title>
    </head>
    <body>
        <h2>Administração - login</h2>
        <form action=verificar_login_administracao.jsp method=post>
            login: <input type=text name=login>
            senha: <input type=password name=senha>
                   <input type=submit value=acessar>
        </form>
    </body>
</html>



Antes de continuar, vamos implementar a página de teste de conexão com o banco de dados.






teste_jdbc.jsp

Esta página é apenas de teste mas é bom tê-la no projeto.

<%--
    Document   : verificar_login_administracao
    Created on : 19/09/2008, 15:19:46
    Author     : Triplo X
--%>

<%@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">
   <%
java.sql.Connection connection = null;
try {
    String driverName = "org.gjt.mm.Driver";  // também poderia ser com.mysql.jdbc.Driver
    Class.forName(driverName);
   
    String serverName = "localhost";
    String mydatabase = "rest_web";
   
    String url = "jdbc:mysql://" +serverName+ "/" +mydatabase;
    String username = "root";
    String password = "2017";
    connection = java.sql.DriverManager. getConnection(url, username, password);
    out.println("Conexão estabelecida com sucesso");
    } catch(ClassNotFoundException cnfex) {
        out.println("Não foi possível encontrar o driver: " +cnfex.toString());
        } catch(java.sql.SQLException sqlex) {
            out.println("Não foi possível conectar-se ao banco de dados: " +sqlex.toString());
            }
%>




verificar_login_administracao.jsp

Este documento fará o acesso ao servidor de banco de dados. Se o login e a senha passados pelo formulário
contido em login_administracao.jsp estiverem  presentes no banco de dados, a sessão de login se iniciará e o usuário
redirecionado para a tela de administração, que possibilitará (quando o programarmos) cadastrar os restaurantes.
 Caso os dados estejam incorretos, o usuário será redirecionado de volta para o documento login_administracao.jsp.

<%--
    Document   : verificar_login_administracao
    Created on : 19/09/2008, 15:19:46
    Author     : Triplo X
--%>

<%@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">
   <%
      
// captura parâmetros
String sLogin = request.getParameter("login");
String sSenha = request.getParameter("senha");

java.sql.Connection connection = null;

try {
    String driverName = "org.gjt.mm.mysql.Driver";  // também poderia ser com.mysql.jdbc.Driver
    Class.forName(driverName);

    String serverName = "localhost";
    String mydatabase = "rest_web";
   
    String url = "jdbc:mysql://" +serverName+ "/" +mydatabase;
    String username = "root";
    String password = "2017";
    connection = java.sql.DriverManager. getConnection(url, username, password);
} catch(ClassNotFoundException cnfex) {
        out.println("Não foi possível encontrar o driver: " +cnfex.toString());
        } catch (java.sql.SQLException sqlex) {
            out.println("Erro ao conectar-se ao banco de dados: " +sqlex.toString());
            }
   

//envia comando de verificação de login
try {
java.sql.Statement stmt = connection.createStatement();
java.sql.ResultSet rs = stmt.executeQuery("SELECT cod, login, senha, nome FROM administrador "+
          "WHERE login = '" +sLogin+ "'");
   
    // Verifica se o resultset retornou nenhuma linha *****
    rs.last();
    if (rs.getRow()==0) { //zero linhas
        %> <jsp:forward page="login_administracao.jsp" />
        <% return;
        }
   
    /* Este comando somente retornará no máximo um elemento,
     *  pois login deve ser um campo UNIQUE ******/
    rs.first();
   
    // Verifica se a senha obtida no banco confere com o parâmetro *****
    if (!rs.getString("senha").equals(sSenha)) {  // *** senha não confere
        %> <jsp:forward page="login_administracao.jsp" />
        <% 
    }
    else
    {  // OK, usuário logado!
      /** Atualizar a data de login e depois redirecionar
        * para a tela de administração *****/
        stmt.executeUpdate("UPDATE administrador SET dtultimoacesso=now() WHERE " +
                " login = '" +sLogin+ "' && senha = '" +sSenha+ "'");
        %> <jsp:forward page="administracao.jsp" />
        <%
        }
    } catch (java.sql.SQLException sqlex) {
            out.println("Erro ao realizar login: " +sqlex.toString());
            }
%>



A partir de agora a coisa começa a ficar difícil. pois não vamos apenas criar uma página de administração protegida por login, vamos protegê-la contra tentativa de entrar digitando sua url no browser sem ter iniciado a sessão. Por isso o uso de um if para testar se o parâmetro capturado e guardado na variável sLogin é nulo.

Veja:

if(sLogin == null) {
     response.sendRedirect("login_administracao.jsp");
       }

Vamos à página enfim:

administracao.jsp

<%@ page contentType = "text/html" %>
<%@ page pageEncoding = "UTF-8" %>

<%@ page import = "java.sql.*;" %>
 
 <%
 // seleciona dados da tabela: usuarios ***
 
 //recebe o valor digitado no campo login ***
 String sLogin = request.getParameter("login");
 
 if(sLogin == null) {
     response.sendRedirect("login_administracao.jsp");
       }
 
//recebe o valor digitado no campo senha ***
String sSenha = request.getParameter("senha");
 %>
 
 <%  //  include se faz assim:   <%@ include file = "select.jsp"  +  a tag de fechamento do JSP
 
Connection con = null;
Statement   st = null;
ResultSet   rs = null;

try {
    Class.forName("org.gjt.mm.mysql.Driver");
   
    String url = "jdbc:mysql://localhost/rest_web";
    String userBanco = "root";
    String passBanco = "2017";
   
    con = DriverManager.getConnection(url, userBanco, passBanco);
    st = con.createStatement();
   
    String sql = "SELECT * FROM administrador";
    rs = st.executeQuery(sql);
   
    } catch(ClassNotFoundException cnfex) {
        System.out.println("Driver de conexão não encontrado" + toString());
        } catch(SQLException sqlex) {
            System.out.println("Erro no acesso ao banco de dados" + toString());
            }

%>
 
 <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <link rel="icon" type="image/x-icon" href="favicon.ico" />
            <link rel="stylesheet" type="text/css" href="style/special.css" />
           
        <title>Painel de administração</title>

    </head>
   
    <body>
       
        <%
        if (rs != null) {  //*** verificando se ResultSet não está vazio
            int i = 1;   //*** acesso ao banco de dados foi bem sucedido
            %>
       

   <p align="center"><div id="admin">
            <a href="cadastrar.jsp">cadastrar clientes</a>    
            <a href="logout.jsp"><font color="blue"><% out.println("sair ( " + sLogin + " )");%></font> </a> 
       
           <!-- <a href="index.jsp" >
                <img src="images/logout.gif" style="cursor:hand;"
                onclick="window.location=<%session.invalidate();%>" />
                </a> -->
               
          
            <center><h2>Painel de administração</h2></center>
           
          <table align="center" width="80%" cellspacing="0" cellpadding="5" border="1">
               <tr>
                   <% //abrindo o laço de coleta de dados ***
                  while(rs.next()) {  %>
                   <td><% // preenchendo a tabela com os dados de código%>
                   <%= rs.getInt("cod") %></td>
                 
                   <td><% // preenchendo com o nome do usuário %>
                   <%= rs.getString("nome")%></td>
                  
                   <td><% // preenchendo a tabela com os dados de login%>
                   <%= rs.getString("login")%></td>
                  
                   <td><%// preenchendo com dados de senha %>
                   <%= rs.getString("senha")%></td>
                         
                   <td><% // preenchendo com a data de último acesso %>
                   <%= rs.getDate("dtultimoacesso")%></td>
              
               </tr>
               <% } %>
              
          </table>
     
          <% } else { %>
          <p align="center"><h3>Erro ao acessar o banco de dados</h3></p>
          <% } %>
         
<% // liberando os recursos *** if (resultados != null)
           rs.close();
           if (st != null)
               st.close();
           if (con != null)
               con.close();
           // fim!  
               %>
                 
    </div>
</p>
    </body>
</html>

Deste modo, se o login for nulo, vai redirecionar para a página de verificação de login.

IMPORTANTE: Como pegar o nome do usuário e setar em um link?
Fácil!
Um exemplo rápido: <% out.println("sair ( " + sLogin + " )");%>

Visualização:



Hehe, gostou? Se tudo deu certo, sua página ficou como mostra a imagem acima.

Bem, este é o modo mais correto de redirecionamento que eu conheço, pois assim mostra a url da página a ser redirecionada.
Você também pode utilizar um se quiser redirecionar escondendo a url. Os outros métodos estão como comentários no código acima. É um ótimo método e foi usado na página de administração. Você logou-se lá mas com a mesma URL de verificação de login  =D


Agora deixando de conversa, vamos encerrar a sessão, pois não adianta nada ter uma página de login sem uma de logout.

logout.jsp

<%--
    Document   : logout
    Created on : 19/09/2008, 17:22:13
    Author     : Triplo X
--%>

<%@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">

<%@ page import="javax.servlet.http.HttpSession" %>

<!-- <script>
top.document.location.href='index.jsp';
</script> -->

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>saindo...</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
    <% session.invalidate(); 
response.sendRedirect("index.jsp");  
    %>
    </body>
</body>
</html>


É só o começo ainda, falta implementar a página de cadastro de clientes, a página para listar os restaurantes e nesta, as páginas de cardápios...

Mas já dá pra ter uma ótima noção.

Caras, vocês não sabem como eu gosto de programar em JSP.
Prefiro mais do que o próprio puro java para desktop.

Bem, quando eu puder e quando eu desenvolver mais minha aprendizagem mostrarei um pouco mais do meu trabalho aqui.

Até lá espero encontrar ótimos tutoriais e ótimas aulas.

[]s.
Não me venha dizer que é melhor que alguém que eu te espanco!
Todos não passamos de ratinhos que morrerão um dia como todos os outros...

Reeves

Ficou mui bom kra!

se alguem quiser começar aprender algo sobre JSP... ai uma bela porta de entrada!


Ponto Positivo
por sua colaboração a nossa comunidade!


[]s
  °vº   NÃO USE DROGAS,
/(_)\  USE GNU/LINUX
^ ^

blackwinner

Merecido ponto cara.
Já tinha o beans aqui desde que fiz um cursinho de java então foi só ler.
Eu realmente ADORO materiais próprios porque o autor sempre deixa um pouco da "personalidade" dele no tutorial e foi isso que você fez, um tutorial limpo e objetivo mas mesmo assim expressando alguns pontos de vista e etc.

Da pra ver que você estudo o forum e procurou links para cada assunto também, além das pics que eu sei por experiencia própria como é chato upar.

Por esse esforço cara, parabens mesmo.
sergaralho.blogspot.com --> a informação como ela deve ser.. pura!

Synyster

Era o empurrãozinho que eu precisava para começar a fuçar no Java. =P
Parabéns cara, o tópico ficou mais do que excelente, ficou perfeito.

Há um tempo atrás eu ia começar a estudar Java, cheguei a instalar o eclipse aqui, mas desanimei quando fui instalar o plugin Visual Editor para ter a IDE em Java, e o plugin bugou.

Vou começar meus estudos em aplicações web.
Mais uma vez, parabéns pelo tópico, e obrigado. Será de grande utilidade para mim.  ;)

Reeves

Synyster

Ele usou o NetBeans
faz um teste drive nele tambem antes de usar o eclipse!

:D
  °vº   NÃO USE DROGAS,
/(_)\  USE GNU/LINUX
^ ^

Triplo X

#6
Obrigado a todos por reconhecerem meu trabalho.

Quote from: "Synyster"Há um tempo atrás eu ia começar a estudar Java, cheguei a instalar o eclipse aqui, mas desanimei quando fui instalar o plugin Visual Editor para ter a IDE em Java, e o plugin bugou.

Se seu pc tem mais 512 MB de memória RAM eu recomendo utilizar o NetBeans ou Eclipse ao invés do BlueJ ou outras IDEs que não são preparadas a ajudar o usuário a encontrar o erro e corrigí-lo.

Faz o seguinte: clique em GlassFish and Java EE Downloads e veja a lista de tools no browser.

Daí, se meu inglês não estiver tão enferrujado assim, acho que entendi que o último botão de download é da IDE NetBeans Plus + a JDK.
O importante é que tenha os 2. Não precisa ser exatamente deste link.

QuoteJava EE 5 Tools Bundle contains all Java Application Platform SDK content plus the NetBeans IDE and the Portal Pack plugin for creating portlets
Apenas  170 MB.


Ou se preferir faça o login no site do MySql e baixe tudo separado nesta lista:

Lista de arquivos do MySql

Escolha os seguintes itens:
o banco de dados mais atual (MySql Database***)
MySql Connector/***
e o gerenciador de Banco de dados mais completo na minha opinião:
MySQL Query Browser and MySQL Administrator

Ou então baixe ele aqui: mysql-gui-tools-5.0-r12-win32.msi (link do Brasil)


Agora o NetBeans também pode ser baixado diretamente do site oficial:
Baixar o NetBeans IDE 6.1

Escolha o primeiro ou o último botão, pois ambos contém o GlassFish V2 UR2 e o Apache Tomcat 6.0.16, que são 2 ótimos servidores JSP.

Cara, faz tudo menos desistir de programação.  ;)
Não me venha dizer que é melhor que alguém que eu te espanco!
Todos não passamos de ratinhos que morrerão um dia como todos os outros...

tiaguito-.-

excelente, comecei a mecher em java e realmente me abriu horizontes.

valeu cara!
Não tenho medo do escuro, nem do que tem nele, medo do escuro é pra fracos, e vc é um?
Meu MSN ta ali, se quiser add, add mais nun fala bosta não =P

Triplo X

Esse tutorial aqui me ajudou e muito a entender a estrutura de um servlet.

Java para Web no Netbeans 6 – Servlet, JSP & CSS

Foi melhor que alguns fóruns específicos na área. ::)

Até comentei lá, só que o admin ainda não aceitou o coment.

Espero que ajude.

[]s.
Não me venha dizer que é melhor que alguém que eu te espanco!
Todos não passamos de ratinhos que morrerão um dia como todos os outros...