JAVAWEB Introdução a Java volta para web! Zarathon Maia – zarathon@ufc.br
CRIANDO O BANCO E A TABELA A SEREM UTILIZADA NO PROGRAMA Criando o Banco de Dados: No prompt do MySQL: CREATE DATABASE  nomedobanco  <enter> \g  <enter> Criando a tabela com os campos: create table contatos (<enter> id BIGINT NOT NULL AUTO_INCREMENT,  <enter> nome VARCHAR(255), <enter> email VARCHAR(255), <enter> endereco VARCHAR(255), <enter> primary key (id) <enter> ); <enter>
CONECTOR Classe criada para guardar as informações da conexão com o banco de dados. package br.com.biloto.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Conector { public static Connection getConnection() throws SQLException { try { Class.forName(&quot;com.mysql.jdbc.Driver&quot;); String url = &quot;jdbc:mysql:// servidor:porta/bancodedados &quot;; return DriverManager.getConnection(url, &quot;root&quot;, “ senha &quot;); } catch (ClassNotFoundException e) { throw new SQLException(e.getMessage()); } } }
TESTE DO CONECTOR import br.com.biloto.jdbc.Conector; import com.mysql.jdbc.Connection; import java.sql.SQLException; public class Main { public static void main (String[] args) throws SQLException{ try { Connection con = (Connection) Conector.getConnection(); System.out.println(&quot;Você está conectado!&quot;); } catch (SQLException sQLException) { System.out.println(&quot;Ocorreu um erro!&quot;); } } }
JAVABEANS (CONTATO) Nada mais é do que uma classe, com um construtor vazio, seus métodos e seus respectivos get’s e set’s. package br.com.biloto.jdbc.modelo; public class Contato { private Long id; private String nome; private String email; private String endereco; public String getNome() { return this.nome;  } public void setNome(String novo) { this.nome = novo;  } public String getEmail() { return this.email;  } public void setEmail(String novo) { this.email = novo;  } public String getEndereco() { return this.endereco;  } public void setEndereco(String novo) { this.endereco = novo;  } public Long getId() { return this.id;  } public void setId(Long novo) { this.id = novo;  } }
INSERINDO O NOSSO PRIMEIRO CONTATO public class JDBCInsere { public static void main(String[] args) { try { // conectando Connection con = Conector.getConnection(); // cria um preparedStatement PreparedStatement stmt = con.prepareStatement(&quot;insert into contatos ( nome,email,endereco) values (?,?,?)&quot;); // preenche os valores stmt.setString(1, “Raimundinho”); stmt.setString(2, “contato@raimundinho.com.br”); stmt.setString(3, “R. Vergueiro 3185 cj57”); // executa stmt.execute(); stmt.close(); System.out.println(&quot;Gravado!&quot;); con.close(); } catch (SQLException e) { e.printStackTrace(); } } }
DAO – DATA ACCESS OBJECT Esta idéia, inocente a primeira vista, é capaz de isolar todo o acesso a banco em classes bem simples, cuja instância é um objeto responsável por acessar os dados. Da responsabilidade deste objeto surgiu o nome de  Data Access Object ou simplesmente DAO,  um dos mais famosos padrões de desenvolvimento. public class ContatoDAO { // a conexão com o banco de dados private Connection connection; public ContatoDAO() throws SQLException { this.connection = ConnectionFactory.getConnection(); } public void adiciona(Contato contato) throws SQLException { // prepared statement para inserção PreparedStatement stmt = this.connection.prepareStatement(&quot;insert into contatos (nome,email,endereco) values (?, ?, ?)&quot;); // seta os valores stmt.setString(1,contato.getNome()); stmt.setString(2,contato.getEmail()); stmt.setString(3,contato.getEndereco()); // executa stmt.execute(); stmt.close(); } }
JSP – JAVA SERVER PAGES SCRIPTLET : Para escrever código java na sua página basta escrevê-lo entre as tags <% e %>.Esse código é chamado de  scriptlet. COMENTÁRIOS:  <%--comentário em jsp --%> LISTANDO CONTATOS: <% ContatoDAO dao = new ContatoDAO(); List contatos = dao.getLista(); for (int i = 0; i < contatos.size(); i++ ) { Contato contato = (Contato) contatos.get(i); %> <li><%=contato.getNome()%>, <%=contato.getEmail()%>: <%=contato.getEndereco()%></li> <% } %>
EU NÃO QUERO CÓDIGO JAVA NO MEU JSP! É complicado ficar escrevendo Java em seu arquivo jsp, não é? Primeiro fica tudo mal escrito e difícil de ler. O Java passa a atrapalhar o código html em vez de ajudar. Depois, quando o responsável pelo design gráfico da página quiser alterar algo terá que conhecer Java para entender o que está escrito lá dentro... hmm... não parece uma boa solução.
JSP – JAVA SERVER PAGES EXPRESSION LANGUAGE: Para remover um pouco do código java que fica na página jsp a Sun desenvolveu uma linguagem chamada Expression Language que é interpretada pelo servlet contêiner. Na Expression Language ${contado.nome} chamará a função getNome por padrão. Para que isso sempre funcione devemos colocar o parâmetro em letra minúscula ou seja ${contato.Nome} não funciona. Ex.: ${param.nomedoparametro} JSP:USEBEANS: Uma nova forma alternativa para criar objetos sem a necessidade de Scriptlet. < jsp:useBean  id=&quot;contato“ class=&quot;br.com.caelum.jdbc.modelo.Contato&quot; / >
JSTL - BIBLIOTECA DE TAGS A JSTL é a api que encapsulou em tags simples toda a funcionalidade que diversas páginas web precisam, como controle de laços (fors), controle de fluxo do tipo if else,manipulação de dados xml e a internacionalização de sua aplicação. A JSTL foi a forma encontrada de padronizar o trabalho de milhares de programadores de páginas JSP. <%@ taglib uri=&quot;http://java.sun.com/jsp/jstl/core&quot; prefix=&quot;c&quot; %>
JSTL - BIBLIOTECA DE TAGS C:OUT A partir deste momento, temos a variável dao no chamado escopo de página, esse é o escopo chamado pageContext, onde os beans ficam armazenados. Podemos mostrar o nome do primeiro contato usando a JSTL core. Para isso usaremos o prefixo configurado no cabeçalho: c. <c:out value=&quot;${dao.lista[0].nome}&quot;/> C:FOREACH A JSTL core disponibiliza uma tag chamada c:forEach capaz de iterar por uma coleção, exatamente o que precisamos. O exemplo a seguir mostra o uso de expression language de uma maneira muito mais elegante. <c:forEach var=&quot;contato&quot; items=&quot;${dao.lista}&quot;> <li>${contato.nome}, ${contato.email}: ${contato.endereco}</li> </c:forEach> “ Mais elegante que o código que foi apresentado usando scriptletss, não?” C:SET A tag c:set permite armazenar o resultado da expressão contida no atributo value em outravariável, para algum tipo de manipulação futura. <c:set var=&quot;nome&quot; value=&quot;${contato.nome}&quot;/>
JSTL - BIBLIOTECA DE TAGS Como você pode perceber é muito simples aprender a utilizar uma taglib, basta ler o que ela faz, passar os argumentos corretos e pronto. Sugero a leitura completa da especificação da JSTL no site da sun: http://java.sun.com/products/jsp/jstl/ http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html Não precisa decorar tudo, basta ler por cima e saber o que existe e o que não existe. Quando surgir a necessidade do uso de uma dessas tags você terá ela disponível em suas mãos.
JSTL - BIBLIOTECA DE TAGS A lista completa das tags da versão 1.1 da JSTL core pode ser facilmente compreendida: c:catch  bloco do tipo try/catch c:choose  bloco do tipo switch c:forEach  for c:forTokens  for em tokens (ex: “a,b,c” separados por vírgula) c:if  if c:import  import c:otherwise  default do switch c:out  saída c:param  parâmetro c:redirect  redirecionamento c:remove  remoção de variável c:set  criação de variável c:url  link para outra pagina c:when  teste para o switch
JSTL - BIBLIOTECA DE TAGS C:IMPORT Uma pergunta que sempre aparece na vida dos programadores é a de como executar o código de outro arquivo jsp dentro de um primeiro arquivo jsp, isto é, você quer colocar um cabeçalho? Um rodapé? <c:import url=&quot;outrapagina.jsp&quot;/> C:URL As vezes não é simples trabalhar com links pois temos que pensar na url que o cliente acessa ao visualizar a nossa página. <c:url value=“sucesso-cadastro.html”/>
SERVLETS Uma servlet funciona como um pequeno servidor (servidorzinho em inglês) que recebe chamadas de diversos clientes. Colocar todo HTML dentro de uma Servlet realmente não parece a melhor idéia. O que acontece quando precisamos mudar o design da página? O seu designer não vai ter tempo de editar sua Servlet, recompilá-la e colocá-la no servidor. Uma idéia mais interessante é usar o que é bom de cada um dos dois. O JSP foi feito apenas para apresentar o resultado, e ele não deveria fazer acessos a bancos e outros. Isso deveria estar na Servlet. O ideal então é que a Servlet faça o trabalho sujo e árduo, e o JSP apenas apresente esses resultados. A Servlet possui a lógica de negócios (ou regras de negócio)e o JSP tem a lógica de apresentação.
SERVLETS REQUEST DISPATCHER Poderíamos melhorar a nossa aplicação se trabalhássemos com o código java na servlet e depois o código html em uma página jsp. A api da servlet nos permite fazer tal redirecionamento. Basta conhecermos a url que queremos acessar e podemos usar o que fora chamado de RequestDispatcher para acessar outro recurso web, seja esse recurso uma página jsp ou uma servlet: RequestDispatcher rd = request.getRequestDispatcher(“/contatoadicionado.jsp”); rd.forward(request,response); return; Agora podemos facilmente executar a lógica de nossa aplicação web em uma servlet e então redirecionar para uma página jsp, onde você possui seu código html.
BIBLIOGRAFIA www.caelum.com.br  – apostila FJ21 www.guj.com.br www.javafree.org
LINK PARA O PROJETO SISTEMA DE CONTATOS 1.0 (NETBEANS) Abaixo estou disponibilizando o meu código-fonte do Projeto Sistema de Contatos 1.0, desenvolvido na IDE Netbeans 6.1. http://rapidshare.com/files/118954003/SistemaDeContatos.rar.html Enjoy!

Apresentação Java Web Si Ufc Quixadá

  • 1.
    JAVAWEB Introdução aJava volta para web! Zarathon Maia – zarathon@ufc.br
  • 2.
    CRIANDO O BANCOE A TABELA A SEREM UTILIZADA NO PROGRAMA Criando o Banco de Dados: No prompt do MySQL: CREATE DATABASE nomedobanco <enter> \g <enter> Criando a tabela com os campos: create table contatos (<enter> id BIGINT NOT NULL AUTO_INCREMENT, <enter> nome VARCHAR(255), <enter> email VARCHAR(255), <enter> endereco VARCHAR(255), <enter> primary key (id) <enter> ); <enter>
  • 3.
    CONECTOR Classe criadapara guardar as informações da conexão com o banco de dados. package br.com.biloto.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Conector { public static Connection getConnection() throws SQLException { try { Class.forName(&quot;com.mysql.jdbc.Driver&quot;); String url = &quot;jdbc:mysql:// servidor:porta/bancodedados &quot;; return DriverManager.getConnection(url, &quot;root&quot;, “ senha &quot;); } catch (ClassNotFoundException e) { throw new SQLException(e.getMessage()); } } }
  • 4.
    TESTE DO CONECTORimport br.com.biloto.jdbc.Conector; import com.mysql.jdbc.Connection; import java.sql.SQLException; public class Main { public static void main (String[] args) throws SQLException{ try { Connection con = (Connection) Conector.getConnection(); System.out.println(&quot;Você está conectado!&quot;); } catch (SQLException sQLException) { System.out.println(&quot;Ocorreu um erro!&quot;); } } }
  • 5.
    JAVABEANS (CONTATO) Nadamais é do que uma classe, com um construtor vazio, seus métodos e seus respectivos get’s e set’s. package br.com.biloto.jdbc.modelo; public class Contato { private Long id; private String nome; private String email; private String endereco; public String getNome() { return this.nome; } public void setNome(String novo) { this.nome = novo; } public String getEmail() { return this.email; } public void setEmail(String novo) { this.email = novo; } public String getEndereco() { return this.endereco; } public void setEndereco(String novo) { this.endereco = novo; } public Long getId() { return this.id; } public void setId(Long novo) { this.id = novo; } }
  • 6.
    INSERINDO O NOSSOPRIMEIRO CONTATO public class JDBCInsere { public static void main(String[] args) { try { // conectando Connection con = Conector.getConnection(); // cria um preparedStatement PreparedStatement stmt = con.prepareStatement(&quot;insert into contatos ( nome,email,endereco) values (?,?,?)&quot;); // preenche os valores stmt.setString(1, “Raimundinho”); stmt.setString(2, “contato@raimundinho.com.br”); stmt.setString(3, “R. Vergueiro 3185 cj57”); // executa stmt.execute(); stmt.close(); System.out.println(&quot;Gravado!&quot;); con.close(); } catch (SQLException e) { e.printStackTrace(); } } }
  • 7.
    DAO – DATAACCESS OBJECT Esta idéia, inocente a primeira vista, é capaz de isolar todo o acesso a banco em classes bem simples, cuja instância é um objeto responsável por acessar os dados. Da responsabilidade deste objeto surgiu o nome de Data Access Object ou simplesmente DAO, um dos mais famosos padrões de desenvolvimento. public class ContatoDAO { // a conexão com o banco de dados private Connection connection; public ContatoDAO() throws SQLException { this.connection = ConnectionFactory.getConnection(); } public void adiciona(Contato contato) throws SQLException { // prepared statement para inserção PreparedStatement stmt = this.connection.prepareStatement(&quot;insert into contatos (nome,email,endereco) values (?, ?, ?)&quot;); // seta os valores stmt.setString(1,contato.getNome()); stmt.setString(2,contato.getEmail()); stmt.setString(3,contato.getEndereco()); // executa stmt.execute(); stmt.close(); } }
  • 8.
    JSP – JAVASERVER PAGES SCRIPTLET : Para escrever código java na sua página basta escrevê-lo entre as tags <% e %>.Esse código é chamado de scriptlet. COMENTÁRIOS: <%--comentário em jsp --%> LISTANDO CONTATOS: <% ContatoDAO dao = new ContatoDAO(); List contatos = dao.getLista(); for (int i = 0; i < contatos.size(); i++ ) { Contato contato = (Contato) contatos.get(i); %> <li><%=contato.getNome()%>, <%=contato.getEmail()%>: <%=contato.getEndereco()%></li> <% } %>
  • 9.
    EU NÃO QUEROCÓDIGO JAVA NO MEU JSP! É complicado ficar escrevendo Java em seu arquivo jsp, não é? Primeiro fica tudo mal escrito e difícil de ler. O Java passa a atrapalhar o código html em vez de ajudar. Depois, quando o responsável pelo design gráfico da página quiser alterar algo terá que conhecer Java para entender o que está escrito lá dentro... hmm... não parece uma boa solução.
  • 10.
    JSP – JAVASERVER PAGES EXPRESSION LANGUAGE: Para remover um pouco do código java que fica na página jsp a Sun desenvolveu uma linguagem chamada Expression Language que é interpretada pelo servlet contêiner. Na Expression Language ${contado.nome} chamará a função getNome por padrão. Para que isso sempre funcione devemos colocar o parâmetro em letra minúscula ou seja ${contato.Nome} não funciona. Ex.: ${param.nomedoparametro} JSP:USEBEANS: Uma nova forma alternativa para criar objetos sem a necessidade de Scriptlet. < jsp:useBean id=&quot;contato“ class=&quot;br.com.caelum.jdbc.modelo.Contato&quot; / >
  • 11.
    JSTL - BIBLIOTECADE TAGS A JSTL é a api que encapsulou em tags simples toda a funcionalidade que diversas páginas web precisam, como controle de laços (fors), controle de fluxo do tipo if else,manipulação de dados xml e a internacionalização de sua aplicação. A JSTL foi a forma encontrada de padronizar o trabalho de milhares de programadores de páginas JSP. <%@ taglib uri=&quot;http://java.sun.com/jsp/jstl/core&quot; prefix=&quot;c&quot; %>
  • 12.
    JSTL - BIBLIOTECADE TAGS C:OUT A partir deste momento, temos a variável dao no chamado escopo de página, esse é o escopo chamado pageContext, onde os beans ficam armazenados. Podemos mostrar o nome do primeiro contato usando a JSTL core. Para isso usaremos o prefixo configurado no cabeçalho: c. <c:out value=&quot;${dao.lista[0].nome}&quot;/> C:FOREACH A JSTL core disponibiliza uma tag chamada c:forEach capaz de iterar por uma coleção, exatamente o que precisamos. O exemplo a seguir mostra o uso de expression language de uma maneira muito mais elegante. <c:forEach var=&quot;contato&quot; items=&quot;${dao.lista}&quot;> <li>${contato.nome}, ${contato.email}: ${contato.endereco}</li> </c:forEach> “ Mais elegante que o código que foi apresentado usando scriptletss, não?” C:SET A tag c:set permite armazenar o resultado da expressão contida no atributo value em outravariável, para algum tipo de manipulação futura. <c:set var=&quot;nome&quot; value=&quot;${contato.nome}&quot;/>
  • 13.
    JSTL - BIBLIOTECADE TAGS Como você pode perceber é muito simples aprender a utilizar uma taglib, basta ler o que ela faz, passar os argumentos corretos e pronto. Sugero a leitura completa da especificação da JSTL no site da sun: http://java.sun.com/products/jsp/jstl/ http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html Não precisa decorar tudo, basta ler por cima e saber o que existe e o que não existe. Quando surgir a necessidade do uso de uma dessas tags você terá ela disponível em suas mãos.
  • 14.
    JSTL - BIBLIOTECADE TAGS A lista completa das tags da versão 1.1 da JSTL core pode ser facilmente compreendida: c:catch bloco do tipo try/catch c:choose bloco do tipo switch c:forEach for c:forTokens for em tokens (ex: “a,b,c” separados por vírgula) c:if if c:import import c:otherwise default do switch c:out saída c:param parâmetro c:redirect redirecionamento c:remove remoção de variável c:set criação de variável c:url link para outra pagina c:when teste para o switch
  • 15.
    JSTL - BIBLIOTECADE TAGS C:IMPORT Uma pergunta que sempre aparece na vida dos programadores é a de como executar o código de outro arquivo jsp dentro de um primeiro arquivo jsp, isto é, você quer colocar um cabeçalho? Um rodapé? <c:import url=&quot;outrapagina.jsp&quot;/> C:URL As vezes não é simples trabalhar com links pois temos que pensar na url que o cliente acessa ao visualizar a nossa página. <c:url value=“sucesso-cadastro.html”/>
  • 16.
    SERVLETS Uma servletfunciona como um pequeno servidor (servidorzinho em inglês) que recebe chamadas de diversos clientes. Colocar todo HTML dentro de uma Servlet realmente não parece a melhor idéia. O que acontece quando precisamos mudar o design da página? O seu designer não vai ter tempo de editar sua Servlet, recompilá-la e colocá-la no servidor. Uma idéia mais interessante é usar o que é bom de cada um dos dois. O JSP foi feito apenas para apresentar o resultado, e ele não deveria fazer acessos a bancos e outros. Isso deveria estar na Servlet. O ideal então é que a Servlet faça o trabalho sujo e árduo, e o JSP apenas apresente esses resultados. A Servlet possui a lógica de negócios (ou regras de negócio)e o JSP tem a lógica de apresentação.
  • 17.
    SERVLETS REQUEST DISPATCHERPoderíamos melhorar a nossa aplicação se trabalhássemos com o código java na servlet e depois o código html em uma página jsp. A api da servlet nos permite fazer tal redirecionamento. Basta conhecermos a url que queremos acessar e podemos usar o que fora chamado de RequestDispatcher para acessar outro recurso web, seja esse recurso uma página jsp ou uma servlet: RequestDispatcher rd = request.getRequestDispatcher(“/contatoadicionado.jsp”); rd.forward(request,response); return; Agora podemos facilmente executar a lógica de nossa aplicação web em uma servlet e então redirecionar para uma página jsp, onde você possui seu código html.
  • 18.
    BIBLIOGRAFIA www.caelum.com.br – apostila FJ21 www.guj.com.br www.javafree.org
  • 19.
    LINK PARA OPROJETO SISTEMA DE CONTATOS 1.0 (NETBEANS) Abaixo estou disponibilizando o meu código-fonte do Projeto Sistema de Contatos 1.0, desenvolvido na IDE Netbeans 6.1. http://rapidshare.com/files/118954003/SistemaDeContatos.rar.html Enjoy!