Apresentação Java Web Si Ufc Quixadá

Post on 25-May-2015

2.872 views 0 download

description

Apresentação para um curso sobre Java voltada para web!

Transcript of Apresentação Java Web Si Ufc Quixadá

JAVAWEBIntroduçã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("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://servidor:porta/bancodedados"; return DriverManager.getConnection(url, "root", “senha"); } catch (ClassNotFoundException e) { throw new SQLException(e.getMessage()); } }}

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("Você está conectado!"); } catch (SQLException sQLException) { System.out.println("Ocorreu um erro!"); } }}

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 {// conectandoConnection con = Conector.getConnection();// cria um preparedStatementPreparedStatement stmt = con.prepareStatement("insert into contatos (nome,email,endereco) values (?,?,?)");// preenche os valoresstmt.setString(1, “Raimundinho”);stmt.setString(2, “contato@raimundinho.com.br”);stmt.setString(3, “R. Vergueiro 3185 cj57”);// executastmt.execute();stmt.close();System.out.println("Gravado!");con.close();} catch (SQLException e) {e.printStackTrace();}}}

DAO – DATA ACCESS OBJECTEsta idéia, inocente a primeira vista, é capaz de isolar todo o acesso a banco em classesbem 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 dadosprivate Connection connection;public ContatoDAO() throws SQLException {this.connection = ConnectionFactory.getConnection();}

public void adiciona(Contato contato) throws SQLException {// prepared statement para inserçãoPreparedStatement stmt = this.connection.prepareStatement("insert intocontatos (nome,email,endereco) values (?, ?, ?)");// seta os valoresstmt.setString(1,contato.getNome());stmt.setString(2,contato.getEmail());stmt.setString(3,contato.getEndereco());// executastmt.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 PAGESEXPRESSION 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="contato“ class="br.com.caelum.jdbc.modelo.Contato"/>

JSTL - BIBLIOTECA DE TAGSA 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="http://java.sun.com/jsp/jstl/core" prefix="c" %>

JSTL - BIBLIOTECA DE TAGSC:OUTA partir deste momento, temos a variável dao no chamado escopo de página, esse é oescopo 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="${dao.lista[0].nome}"/>

C:FOREACHA 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="contato" items="${dao.lista}"><li>${contato.nome}, ${contato.email}: ${contato.endereco}</li></c:forEach>“Mais elegante que o código que foi apresentado usando scriptletss, não?”

C:SETA 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="nome" value="${contato.nome}"/>

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 TAGSA lista completa das tags da versão 1.1 da JSTL core pode ser facilmente compreendida:

c:catch bloco do tipo try/catchc:choose bloco do tipo switchc:forEach forc:forTokens for em tokens (ex: “a,b,c” separados por vírgula)c:if ifc:import importc:otherwise default do switchc:out saídac:param parâmetroc:redirect redirecionamentoc:remove remoção de variávelc:set criação de variávelc:url link para outra paginac:when teste para o switch

JSTL - BIBLIOTECA DE TAGSC:IMPORTUma 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="outrapagina.jsp"/>

C:URLAs 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 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.

BIBLIOGRAFIAwww.caelum.com.br – apostila FJ21www.guj.com.brwww.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!